Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Probleme mit IF THEN Verzweigungen
DelphiSchüler1989 - Sa 30.10.10 16:29
Titel: Probleme mit IF THEN Verzweigungen
Hallo alle zusammen, bin gerade am üben für eine Delphi-Klausur.
Hab schon alles mögliche Versuch und komme mit diesem Problem nicht weiter.
Da ich Montag die Klausur schreiben werde, brauche ich möglichst schnell Hilfe.
Vielen Dank schon im Voraus, euer Delphi-Schüler.
Zur Aufgabe:
Der Fahrzeugtyp eines Autos wird in einer ComboBox ausgewählt.
Daraufhin werden mit Hilfe eines OnChange Ereignis IF THEN Anweisungen (Grundpreis und Fahrzeugtyp werden in einem Label ausgegeben und Motoren werden zur Auswahl in Abhängigkeit vom Fahrzeugtyp in einer RadioGroup ausgegeben) ausgeführt.
Quellcode:
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:
| VAR Fahrzeugtyp:real;
procedure TForm1.ComboBoxTypChange(Sender: TObject); begin ImageAuto.visible:=true; Fahrzeugtyp:=StrToFloat(ComboboxTyp.text);
IF Fahrzeugtyp=125 THEN BEGIN ListboxDaten.items.add('Typ: 125, Grundpreis: 22.500,00 €'); RadioGroupMotoren.items.add('B 71 KW'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 100 KW'); RadioGroupMotoren.items.add('D 60 KW'); RadioGroupMotoren.items.add('D 75 KW'); END ELSE IF Fahrzeugtyp=250 THEN BEGIN ListboxDaten.items.add('Typ: 250, Grundpreis: 32.750,00 €'); RadioGroupMotoren.items.add('B 71 KW'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 100 KW'); RadioGroupMotoren.items.add('D 60 KW'); RadioGroupMotoren.items.add('D 75 KW'); END ELSE <span style="color: red">IF Fahrzeugtyp=250 Kombi</span> THEN BEGIN ListboxDaten.items.add('Typ: 250 Kombi, Grundpreis: 34.500,00 €'); RadioGroupMotoren.items.add('B 71 KW'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 100 KW'); RadioGroupMotoren.items.add('D 60 KW'); RadioGroupMotoren.items.add('D 75 KW'); END ELSE IF Fahrzeugtyp=500 THEN BEGIN ListboxDaten.items.add('Typ: 500, Grundpreis: 42.120,00 €'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 110 KW'); RadioGroupMotoren.items.add('B 131 KW'); RadioGroupMotoren.items.add('D 75 KW'); RadioGroupMotoren.items.add('D 90 KW'); END ELSE IF Fahrzeugtyp=500 Quatro THEN BEGIN ListboxDaten.items.add('Typ: 500 Quatro, Grundpreis: 44.250,00 €'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 110 KW'); RadioGroupMotoren.items.add('B 131 KW'); RadioGroupMotoren.items.add('D 75 KW'); RadioGroupMotoren.items.add('D 90 KW'); END ELSE IF Fahrzeugtyp=600 Van THEN BEGIN ListboxDaten.items.add('Typ: 600 Van, Grundpreis: 46.360,00 €'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 110 KW'); RadioGroupMotoren.items.add('B 131 KW'); RadioGroupMotoren.items.add('D 75 KW'); RadioGroupMotoren.items.add('D 90 KW'); END; end;
end. |
Nun wird beim Testen des Programmes folgender Fehler:
[Error] Komponentenabfragen1.pas(78): 'THEN' expected but identifier 'Kombi' found
Und der Bereich "IF Fahrzeugtyp=250 Kombi" im Quellcode farbig markiet angezeigt.
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Gausi - Sa 30.10.10 16:41
Hallo und :welcome: in der Entwickler-Ecke,
FahrzeugTyp ist eine Real-Variable, also eine Zahl. 250 Kombi ist aber keine Zahl - das ist sogar gar nichts, womit Delphi arbeiten kann. Wenn in der Combobox für den Fahrzeugyp auch ein String '250 Kombi' stehen kann, dann solltest du für den Typ generell mit Strings arbeiten, nicht mit Real.
Und: Eine Real-variable mit "=" zu überprüfen kann sehr schnell in die Hose gehen. Grund dafür ist die interne Darstellung der Zahlen und die damit verbundenen Rundungsfehler.
jaenicke - Sa 30.10.10 16:48
Globale Variablen sind nicht schön. Die solltest du lieber vermeiden, sonst blickst du hinterher nicht mehr durch. (Ausnahmen gibt es natürlich, wo die sinnvoll sind.)
Nebenbei ist deine Formatierung etwas seltsam. Wie wäre es so:
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:
| procedure TForm1.ComboBoxTypChange(Sender: TObject); var Fahrzeugtyp: Double; begin ImageAuto.Visible := True; Fahrzeugtyp := StrToFloat(ComboboxTyp.Text);
if Fahrzeugtyp = 125 then begin ListboxDaten.items.add('Typ: 125, Grundpreis: 22.500,00 €'); RadioGroupMotoren.items.add('B 71 KW'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 100 KW'); RadioGroupMotoren.items.add('D 60 KW'); RadioGroupMotoren.items.add('D 75 KW'); end else if Fahrzeugtyp = 250 then begin ListboxDaten.items.add('Typ: 250, Grundpreis: 32.750,00 €'); RadioGroupMotoren.items.add('B 71 KW'); RadioGroupMotoren.items.add('B 80 KW'); RadioGroupMotoren.items.add('B 100 KW'); RadioGroupMotoren.items.add('D 60 KW'); RadioGroupMotoren.items.add('D 75 KW'); end else if ... |
Grund: du bist immer noch in der selben if..else Abfrage. Daher brauchst du auch nicht weiter einrücken. ;-)
Ja, wenn in dem Edit immer eine ganze Zahl steht, könntest du auch case benutzen.
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!