Autor Beitrag
DelphiSchüler1989
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 30.10.10 16:29 
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:

ausblenden volle Höhe 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 user profile iconGausi: Delphi-Tags hinzugefügt
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: DelphiSchüler1989
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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.