Problem mit if

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
sunshine94
Beiträge: 4
Registriert: Mi 17. Okt 2012, 21:18

Problem mit if

Beitrag von sunshine94 »

Hey Ihr,
ich habe ein riiiiesen Problem:(
Ich schreibe am Freitag eine Klassenarbeit und wir haben dafür eine Übungsaufgabe bekommen. Wir sollen eine OOP machen, dass ein Kommentar zu der eingegebenen Note gibt...doch egal welche Zahl ich am Ende bei dem (angeblich) erfolgreich gebauten Projekt eingebe, es wird immer 'Unsinn' angezeigt :cry:

Ich danke schonmal allen die mir antworten :)

Code: Alles auswählen

var
  Form1: TForm1; 
 
implementation
 
{ TForm1 }
 
procedure TForm1.btn_noteClick(Sender: TObject);
begin
  IF edt_zahl.Text='1'
  then lbl_text.Caption:='Ausgezeichnet';
       IF edt_zahl.Text='2'
       then lbl_text.Caption:='Gut gemacht';
            IF edt_zahl.Text='3'
            then lbl_text.Caption:='Befriedigend';
                 IF edt_zahl.Text='4'
                 then lbl_text.Caption:='Ausreichend';
                      IF edt_zahl.Text='5'
                      then lbl_text.Caption:='Mangelhaft';
                            IF edt_zahl.Text='6'
                             then lbl_text.caption:='Hundsmiserabel'
                             else lbl_text.Caption:='Unsinn'
 
end;//of procedure

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: HIIIIILFE :(

Beitrag von theo »

sunshine94 hat geschrieben: doch egal welche Zahl ich am Ende bei dem (angeblich) erfolgreich gebauten Projekt eingebe, es wird immer 'Unsinn' angezeigt :cry:
Glaube ich nicht. Wenn du '6' eingibst müsste eigentlich 'Hundsmiserabel' angezeigt werden.
Überlege mal warum.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: HIIIIILFE :(

Beitrag von m.fuchs »

sunshine94 hat geschrieben:egal welche Zahl ich am Ende bei dem (angeblich) erfolgreich gebauten Projekt eingebe, es wird immer 'Unsinn' angezeigt
Ich nehme mal deinen Quellcode, formatiere ihn etwas besser und schreibe mal rein was passiert. Nehmen wir mal an, jemand gibt 4 ein:

Code: Alles auswählen

if edt_zahl.Text='1' then lbl_text.Caption:='Ausgezeichnet';
// Die if-Bedingung ist nicht erfüllt. Nichts passiert
if edt_zahl.Text='2' then lbl_text.Caption:='Gut gemacht';
// Die if-Bedingung ist nicht erfüllt. Nichts passiert
if edt_zahl.Text='3' then lbl_text.Caption:='Befriedigend';
// Die if-Bedingung ist nicht erfüllt. Nichts passiert
if edt_zahl.Text='4' then lbl_text.Caption:='Ausreichend';
// Die if-Bedingung ist erfüllt. Die Caption von lbl_text wird auf Ausreichend gesetzt.
if edt_zahl.Text='5' then lbl_text.Caption:='Mangelhaft';
// Die if-Bedingung ist nicht erfüllt. Nichts passiert
if edt_zahl.Text='6' then lbl_text.caption:='Hundsmiserabel' else lbl_text.Caption:='Unsinn'
// Die if-Bedingung ist nicht erfüllt. Also greift der else-Zweig. Die Caption von lbl_text wird auf Unsinn gesetzt.
Letztendlich ist nur die letzte if-Bedingung ausschlaggebend, da eine von beiden Möglichkeiten IMMER greift.
Gibst du also 6 ein, dann sollte Hundsmiserabel da stehen. Das ist aber auch der einzige Fall wo dein Label nicht mit Unsinn gefüllt wird.

Übrigens, wer bringt eigentlich den Schülern so einen Unfug bei der Benennung von Komponenten bei? lbl_text, das sieht ja furchtbar aus.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

sunshine94
Beiträge: 4
Registriert: Mi 17. Okt 2012, 21:18

Re: HIIIIILFE :(

Beitrag von sunshine94 »

Daaanke für die Antworten :]]
ja wir müssen das so machen -.-*
aber wie kann ich das ändern, sodass da dann "ausreichend " erscheint.? =)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: HIIIIILFE :(

Beitrag von pluto »

mit dem else zweig.

Code: Alles auswählen

etwa so:
if test1 then
  tue_etwas
  else
    if test2 then tue_etwas
und soweiter
 
edit01: Ein andere Titel wäre auch nicht schlecht. HILFE ist etwas Übertrieben. Hilfe brauchen wir alle, wenn wir Fragen. Z.b.
Warum klappt die Auswertung nicht?
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Problem mit if-Schleife

Beitrag von mschnell »

Warum nicht einfach:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  s1, s2: String;
begin
  s1 := '1';
  case s1 of
   '1': s2 := 'eins';
   '2': s2 := 'zwei';
   else s2 := 'xy';
  end;
  Caption:=s2;
end;
???
-Michael

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Problem mit if-Schleife

Beitrag von Heinrich Wolf »

mschnell hat geschrieben:Warum nicht einfach:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  s1, s2: String;
begin
  s1 := '1';
  case s1 of
   '1': s2 := 'eins';
   '2': s2 := 'zwei';
   else s2 := 'xy';
  end;
  Caption:=s2;
end;
???
-Michael
s1 ist ein string. Der wird als case label nicht akzeptiert. Da werden nur ordinale Typen, z.B. char akzeptiert.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  s1, s2: String;
begin
  s1 := '1';
  if length(s1) = 1 then
    case s1[1] of
      '1': s2 := 'eins';
      '2': s2 := 'zwei';
    else 
      s2 := 'xy';
    end
  else
    s2 := 'xy';
  Caption:=s2;
end;

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit if-Schleife

Beitrag von m.fuchs »

Und jetzt muss ich nach der Titeländerung noch einmal klugscheißen: Es gibt keine if-Schleifen!

Das sind bedingte Anweisungen und keine Schleifen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit if-Schleife

Beitrag von theo »

Heinrich Wolf hat geschrieben: s1 ist ein string. Der wird als case label nicht akzeptiert. Da werden nur ordinale Typen, z.B. char akzeptiert.
Doch, das geht, schon eine ganze Weile: http://www.lazarusforum.de/viewtopic.php?f=10&t=3036

Ob es hier sinnvoll ist, ist die andere Frage. Ein case mit StrToIntDef oder s1[1] würde auch reichen.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Problem mit if-Schleife

Beitrag von mse »

theo hat geschrieben:Ein case mit StrToIntDef oder s1[1] würde auch reichen.
Ich frage mich sowieso, warum alle diese Schularbeiten immer TEdit.Text und StrToInt() benützen. Hat denn Lazarus kein Widget zur Zahleneingabe?

Martin

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit if-Schleife

Beitrag von theo »

mse hat geschrieben:
theo hat geschrieben:Ein case mit StrToIntDef oder s1[1] würde auch reichen.
Ich frage mich sowieso, warum alle diese Schularbeiten immer TEdit.Text und StrToInt() benützen. Hat denn Lazarus kein Widget zur Zahleneingabe?
Doch, TSpinEdit im 'Misc' Tab.
Ich nehme an, die wollen einfach möglichst mit den Standardkomponenten arbeiten.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Problem mit if-Schleife

Beitrag von pluto »

Es gibt da noch RadioGrub was eigentlich dazu gedacht ist, oder halt ListBoxen der ItemIndex ist ein Integer.
MFG
Michael Springwald

Cybermonkey342
Beiträge: 109
Registriert: Sa 1. Mär 2008, 15:19
OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
CPU-Target: x64
Kontaktdaten:

Re: Problem mit if-Schleife

Beitrag von Cybermonkey342 »

m.fuchs hat geschrieben:Und jetzt muss ich nach der Titeländerung noch einmal klugscheißen: Es gibt keine if-Schleifen!

Das sind bedingte Anweisungen und keine Schleifen.
Absolut richtig. Es gibt While-Schleifen und For-Schleifen etc. aber keine IF-Schleifen ...
Mit besten Grüßen,
Cybermonkey

Lori
Beiträge: 93
Registriert: Sa 9. Sep 2006, 22:17

Re: Problem mit if

Beitrag von Lori »

:oops:
loris-spinnereyen.de

tryunderror
Beiträge: 57
Registriert: Di 9. Okt 2012, 17:32

Re: Problem mit if

Beitrag von tryunderror »

Als Laie würde ich sagen
zum Startpost
es wird falsch eingelesen
es wird also gar nicht die "6" gesehen
deswegen gibt er immer Unsinn aus.
Bei "5" muss er ja Unsinn ausgeben
weil das "Else" falsch gesetzt worden ist.
Wenn schon else
was gar nicht benutzt werden soll
dann
if
then
else begin ausgabe if.... etc

weil dann ist auch Fehler schneller zu finden.

Antworten