Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - mehrere if Schleifen auf eine verkürzen?


DeadEyeFlint - Do 03.07.08 08:37
Titel: mehrere if Schleifen auf eine verkürzen?
Hallo Liebe Community,

ich habe dank meines Informatikunterrichts angefangen mich mit delphi und pascal angefangen zu beschäftigen.

Meine Lehrerin gab mir eine Aufgabe die ich wie Ihr unten sehen könnt bearbeitet habe.

Und jetzt zu meiner Frage: Ich habe als Abfangung für leere Felder jetzt für jedes Feld einzeln eine if schleife eingebaut. Würe es auch gehen dass man da nur eine einbaut um den source code ein wenig zu verkürzen?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
procedure TForm1.Button1Click(Sender: TObject);

var a1,a2,a3,p1,p2,p3,g1,g2,g3,gs:real;



begin

          if ([edit_a_1.Text] ='') then

       begin
      showmessage('Bitte Feld "Anzahl" komplett ausfüllen.');
      exit;
      end;

      if (edit_a_2.Text ='') then

       begin
      showmessage('Bitte Feld "Anzahl" komplett ausfüllen.');
      exit;
      end;

      if (edit_a_3.Text ='') then

       begin
      showmessage('Bitte Feld "Anzahl" komplett ausfüllen.');
      exit;
      end;

       if (edit_p_1.Text ='') then

       begin
      showmessage('Bitte Feld "Preis pro Stück" komplett ausfüllen.');
      exit;
      end;


       if (edit_p_2.Text ='') then

       begin
      showmessage('Bitte Feld "Preis pro Stück" komplett ausfüllen.');
      exit;
      end;


       if (edit_p_3.Text ='') then

       begin
      showmessage('Bitte Feld "Preis pro Stück" komplett ausfüllen.');
      exit;
      end;




      a1:=strtofloat(edit_a_1.Text);
      a2:=strtofloat(edit_a_2.Text);
      a3:=strtofloat(edit_a_3.text);

      p1:=strtofloat(edit_p_1.text);
      p2:=strtofloat(edit_p_2.Text);
      p3:=strtofloat(edit_p_3.Text);


      


      g1:=a1*p1;
      g2:=a2*p2;
      g3:=a3*p3;

      edit_g_1.Text:=floattostr(g1);
      edit_g_2.Text:=floattostr(g2);
      edit_g_3.Text:=floattostr(g3);

      gs:=g1+g2+g3;

      edit_gs.Text:=floattostr(gs);


              

end;



Gruß DeadEyeFlint


Stefan-W - Do 03.07.08 08:40

hier kannst du nur die If abfrage kürzen indem du die Meldungen zusammen fasst.
also erst auswerten und dann ne Meldung wie "bitte das, das und das noch richtig ausfüllen"


Gausi - Do 03.07.08 08:41

Hallo und :welcome: in der Entwickler-Ecke!

Ja, da kann man was machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if (edit_a_1.Text ='') 
OR (edit_a_2.Text ='')
OR (edit_a_3.Text ='')
then 
begin 
  showmessage('Bitte Feld "Anzahl" komplett ausfüllen.'); 
  exit; 
end;


btw.: http://www.if-schleife.de ;-)


ZeitGeist87 - Do 03.07.08 08:42


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
var a1,a2,a3,p1,p2,p3,g1,g2,g3,gs:real;
begin

 if (length(edit_a_1.Text) < 1) or 
    (length(edit_a_2.Text) < 1) or
    (length(edit_a_3.Text) < 1) or
    (length(edit_p_1.Text) < 1) or
    (length(edit_p_2.Text) < 1) or
    (length(edit_p_3.Text) < 1) then
 begin
  showmessage('Bitte alle Felder ausfüllen');
  exit;
 end;

 a1:=strtofloat(edit_a_1.Text);
 a2:=strtofloat(edit_a_2.Text);
 a3:=strtofloat(edit_a_3.text);

 p1:=strtofloat(edit_p_1.text);
 p2:=strtofloat(edit_p_2.Text);
 p3:=strtofloat(edit_p_3.Text);

 g1:=a1*p1;
 g2:=a2*p2;
 g3:=a3*p3;

 edit_g_1.Text:=floattostr(g1);
 edit_g_2.Text:=floattostr(g2);
 edit_g_3.Text:=floattostr(g3);
 
 gs:=g1+g2+g3;
 edit_gs.Text:=floattostr(gs);
end;


LG
Stefan


DeadEyeFlint - Do 03.07.08 08:47

Hehe okay Gausi if Abfrage ;)

Und danke an euch zwei für die schnellen Antworten. An das or hab ich auch schon gedacht und probiert aber dann hatte ich die Syntax falsch gesetzt.

Danke

Gruß DeadEye


robo202 - Do 03.07.08 10:49

WEnn du deine Eingabe felder anders nennst dann ist es ganz einfach


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var i:integer;
begin
for i := 1 to 4 do begin
If (edit(i)).text = '' then 
begin
showmessage ('Bitte eingaben überprüfen');
exit;
end;


End;


glaube ich jedenfals :?


ZeitGeist87 - Do 03.07.08 10:53

user profile iconrobo202 hat folgendes geschrieben:
glaube ich jedenfals :?

:lol:

Code schon mal ausprobiert?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var i: Integer;
      myCompo: TComponent;
begin
 for i:= 1 to 4 do
 begin
  myCompo:= findcomponent('Edit' + inttostr(i));
  if length((myCompo as TEdit).Text) < 1 then
  begin
   //Fehlerbehandlung
  end;
 end;


Moderiert von user profile iconNarses: Zitat gekürzt


DeadEyeFlint - Do 03.07.08 11:41

okay sieht auch ganz gut aus ^^

aaaber, wie gesagt hab ich mit delphi und pascal erst emgefangen.

var mycompo ... um ehrlich zu sein kann ich damit nichts anfangen. ich hab schon gidf.de befragt. aber ich habe nich wirklich viel gefunden.

und diese if abfrage " if length((myCompo as TEdit).Text) < 1 then" hab ich auch noch nich ganz verstanden


gruß DeadEye


Tilman - Do 03.07.08 12:22

@robo202: so mach ich das meistens, die Komponenten als array auffassen (natürlich mit [] und nicht mit runden Klammern). Aber dazu muss man sich erst ein Array aus Zeigern erstellen, und diese mit den Komponenten verknüpfen.


Gausi - Do 03.07.08 12:30

Das mit dem FindComponent würde ich an dieser Stelle sein lassen. Das ist nur sinnvoll, wenn man wirklich viele Edits (oder sonstwas) hat, und dann würde ich auch in der Regel die Variante mit dem selbsterstellten Array vorziehen.

Bei so wenigen ist es imho sinnvoller (und auch für Anfänger verständlicher) das direkt zu machen.


ZeitGeist87 - Do 03.07.08 12:37

user profile iconGausi hat folgendes geschrieben:
Das mit dem FindComponent würde ich an dieser Stelle sein lassen. Das ist nur sinnvoll, wenn man wirklich viele Edits (oder sonstwas) hat, und dann würde ich auch in der Regel die Variante mit dem selbsterstellten Array vorziehen.

Bei so wenigen ist es imho sinnvoller (und auch für Anfänger verständlicher) das direkt zu machen.


Würd ich auch sagen, aber ich hab nur das Beispiel verbessert ;-)


elundril - Do 03.07.08 12:45

user profile iconGausi hat folgendes geschrieben:

btw.: http://www.if-schleife.de ;-)


[ot]

OMG! Wer gibt min. 15 €uro für ne Top-Level-Domain aus für sowas. Das is doch schon ein bisschen absurd. Auch wens ein wenig lustig ist.

[/ot]

lg elundril


Tilman - Do 03.07.08 12:56

user profile iconelundril hat folgendes geschrieben:

OMG! Wer gibt min. 15 €uro für ne Top-Level-Domain aus für sowas. Das is doch schon ein bisschen absurd. Auch wens ein wenig lustig ist.


Irgendwo [http://www.irgendwo.de/] muss es Leute geben die so was lustig finden.

btw. ist der Satz "Es gibt keine if-Schleifen, sondern nur if-Abfragen!" in meinen Augen ungünstig formuliert, er hätte lauten sollen "Es gibt keine if-Schleifen, sondern nur if-Blöcke!", denn die Anfänger verwechseln in meinen Augen Schleife und Block.


ZeitGeist87 - Do 03.07.08 12:57

Ende gut, alles gut! [http://www.ende.de]


jakobwenzel - Do 03.07.08 13:11

user profile iconelundril hat folgendes geschrieben:
OMG! Wer gibt min. 15 €uro für ne Top-Level-Domain aus für sowas. Das is doch schon ein bisschen absurd. Auch wens ein wenig lustig ist.

Nun ja, bei manchen Hosting-Paketen hast du mehrere Inklusiv-Domains, brauchst aber u.U. nur eine - und dann ist Platz für sowas.


Narses - Do 03.07.08 13:21

Moin!

Bitte zurück zum Thema! :mahn: ;)

cu
Narses