Autor Beitrag
Neuling94
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 31.01.12 17:32 
Hallo Leute,
Ich bin verzweifelt beim Programmieren meines Taschenrechners mittels Delphi5.
Anmerkung: Wir benutzen Delphi in der Schule, haben dort jedoch eine andere "Sprache" als die, die ich hier im Forum finde (wohl eine einfachere). Deswegen hoffe ich das ihr trotzdem damit klar kommt und mir helfen könnt...

Nun zu meinem Problem:
Ich will einen Taschenrechner programmieren. So weit so gut. Jedoch will ich alles auf einen Display kriegen (also den mit den 3 feldern: Zahl 1, Zahl2, Ergebnis, und den Aktionsknöpfen hab ich schon). Nun zu dem Problem: Ich gebe die gewünschte Zahl über Knöpfe an. Wenn ich dannden "+" - Knopf drücke, soll er den Disply auf "0" setzen und die vorher eingegebene Zahl Speichern (lHilf).
Problem:
Ich will das er die anschließend eingegebene Zahl mit der ersten addiert und auf den Display ausgibt, sobald ich auf "=" drücke. Jedoch passiert wenn ich den Knopf drücke einfach nichts.

Hoffe ihr könnt mir helfen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TTaschenrechner.hatKnopfPlusGeklickt(Sender: TObject);
var lHilf : GanzeZahl; //Hilfsvariabeln
begin
 lHilf := hatTextfeldDisplay.InhaltAlsGanzeZahl;
 hatTextfeldDisplay.setzeInhalt (0);
  if Sender=hatKnopfGleich
   then begin
    hatTextfeldDisplay.setzeInhalt (lHilf+hatTextfeldDisplay.InhaltAlsGanzeZahl );
   end;
end;
Metschu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: Di 31.01.12 18:53 
Ich gehe mal davon aus, das du die Procedure "hatKnopfPlusGeklickt" ebenfalls ausgeführt wird, wenn du die Taste "=" drückst.
Sonst gibt die Abfrage "if Sender=hatKnopfGleich" keinen Sinn.

Wenn das so ist, passiert folgender Ablauf:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
Procedure wird aufgerufen
Inhalt des Displays wird in die Hilfsvariable "lHilf" gesichert
Displayinhalt wird auf "0" gesetzt
Procedure wird verlassen -> die Hilfsvariable "lHilf" wird aus dem Arbeitsspeicher gelöscht

Somit hast du beim 2. Aufruf der Procedure durch die "=" Taste wieder eine leere Variable "lHilf".

Der Fehler liegt also im Bereich der Variablendeklarierung, die man einmal Global und Lokal (wie du es gemacht hast) deklarieren kann.
Bei der Lokalen Deklaration wird die Variable nur für die Procedure genutzt und anschliessen wieder gelöscht ("freigegeben").
Bei der Globalen Deklaration steht die Variable dem Ganzen Programm in jeder Procedure zur Verfügung.
Neuling94 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 31.01.12 19:22 
ah klar vielen dank Metschu =)
Ich hab nun eine Globale Variable "zHilfszahl" erstellt, die die Displayzahl speichert, und eine Variable "zStatus" die auf +,-,* oder / gesetzt wird.
Wenn daraufhin der "="-Knopf gedrückt wird, wird abgefragt, was als letztes gedrückt wurde (also welche Rechenart) und die Lösung anschließend auf dem Display angezeigt.
Hier die Syntax dafür:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TTaschenrechner.hatKnopfPlusGeklickt(Sender: TObject);
begin
 zHilfszahl := hatTextfeldDisplay.InhaltAlsGanzeZahl;
 hatTextfeldDisplay.setzeInhalt (0);
 zStatus := 1;
end;


procedure TTaschenrechner.hatKnopfGleichGeklickt(Sender: TObject);
begin
 if zStatus = 1
 then begin
  hatTextfeldDisplay.setzeInhalt (zHilfszahl+hatTextfeldDisplay.inhaltalsganzezahl);
 end;
end;


nochmals danke für die schnelle Antwort =)