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
robo202 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 end; end; |
Moderiert von
Narses: 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
Gausi 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
[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
elundril 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.
jakobwenzel - Do 03.07.08 13:11
elundril 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!