AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory Funktion Taschenrechner

Ein Thema von jdiephaus · begonnen am 22. Mai 2017 · letzter Beitrag vom 23. Mai 2017
Antwort Antwort
jdiephaus

Registriert seit: 29. Nov 2016
15 Beiträge
 
#1

Memory Funktion Taschenrechner

  Alt 22. Mai 2017, 22:09
Delphi-Version: 5
Hallo liebe Community,

ich hoffe ihr könnt mir etwas auf die Sprünge helfen, deswegen hier direkt mein Problem:

Programm ist ein Taschenrechner.
Das Problem dreht sich um die Memory Funktion. Falls jemand damit nichts anfangen kann:

MR Taste : Übergibt aktuellen Display Wert an Speicher
MC Taste : Setzt Speicher + Display Wert auf 0
M+ Taste : Addiert Speicher Wert zu aktuellem Display Wert
M- Taste : Subtrahiert Speicher Wert von aktuellem Display Wert

Mein Code:
Code:
procedure TForm1.MemoryFunction(Sender: TObject);
var mem: ansistring;
begin
 if Sender is TSpeedButton then
    case TSpeedButton(Sender).Name of
      'TsbMR': mem := label1.Caption;
      'TsbMC': begin
               mem := '0';
               label1.Caption := '0';
               end;
      'TsbMMinus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) - StrToFloat(mem));
      'TsbMPlus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) + StrToFloat(mem));
    end;
end;
Mein Problem besteht in der Übergabe des Display Wert an den Speicher Wert. Es wird kein String übergeben.

Beim Drücken von M+ und M- kommt Exception EConvertError: "" is an invalid float.

Wenn ich mem einen festen Wert z.B mem := '5' zuordne, funktioniert alles ohne Probleme (ausser natürlich die Taste MR zum Setzen des Speicher Werts).

(Zeichen werden übrigens auch als ansistring an label1.Caption übergeben, falls das irgendeine Rolle spielen könnte.)

Hat jemand von euch zufällig eine Idee bzw. kann mir sagen, wo ich dumm war?

Vielen Dank für eure Aufmerksamkeit!
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#2

AW: Memory Funktion Taschenrechner

  Alt 22. Mai 2017, 22:36
"mem" ist bei dir eine lokale Variable. Beim nächsten Aufruf (M+, M-) ist sie wieder ein leerer String.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Memory Funktion Taschenrechner

  Alt 22. Mai 2017, 22:51
Denk dir folgende zwei Zeilen hinzu und überleg dir nochmal, was dein Programm wirklich macht, mit so einer lokalen Variable.
Delphi-Quellcode:
procedure TForm1.MemoryFunction(Sender: TObject);
var mem: String;
begin
  mem := ''; // <<<<<<<<<< die LOKALE Variable ist zu Beginn leer
  if Sender is TSpeedButton then
    case TSpeedButton(Sender).Name of
      'TsbMR': mem := label1.Caption;
      'TsbMC': begin
               mem := '0';
               label1.Caption := '0';
               end;
      'TsbMMinus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) - StrToFloat(mem));
      'TsbMPlus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) + StrToFloat(mem));
    end;
  mem := ''; // <<<<<<<<<< die LOKALE Variable wird am Ende der Prozedur gelöscht
end;
[edit]
Ich glaube ich hätte zwischendurch mal F5 drücken sollen, wenn die DP schon keine RedBox anzeigt.
$2B or not $2B

Geändert von himitsu (22. Mai 2017 um 22:53 Uhr)
  Mit Zitat antworten Zitat
jdiephaus

Registriert seit: 29. Nov 2016
15 Beiträge
 
#4

AW: Memory Funktion Taschenrechner

  Alt 22. Mai 2017, 23:18
Oha bin ich dämlich. Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Memory Funktion Taschenrechner

  Alt 22. Mai 2017, 23:26
Sei froh, dass es ein String war ... eine lokale Integer-Variable wird nicht automatisch initialisiert und hat somit zu Beginn potentiel einen "zufälligen" Wert drinnen.

Obwohl, der Compiler würde dich dann darauf hinweisen, dass diese Variable nicht initialisiert wurde,
aber wenn man das ignoriert, dann passieren in Programmen komische Dinge.
$2B or not $2B
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Memory Funktion Taschenrechner

  Alt 23. Mai 2017, 14:30
Falls jemand damit nichts anfangen kann:

MR Taste : Übergibt aktuellen Display Wert an Speicher
MC Taste : Setzt Speicher + Display Wert auf 0
M+ Taste : Addiert Speicher Wert zu aktuellem Display Wert
M- Taste : Subtrahiert Speicher Wert von aktuellem Display Wert
Ich könnte damit tatsächlich nichts anfangen, denn bei einem normalen handelsüblichen Taschenrechner sind die Bedeutungen so:
MR Taste : Übergibt Speicher Wert an Display (MR steht für Memory Recall)
M+ Taste : Addiert aktuellen Display Wert zu Speicher Wert
M- Taste : Subtrahiert aktuellen Display Wert von Speicher Wert
Ist das Absicht, dass das bei dir alles genau anders herum ist?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Memory Funktion Taschenrechner

  Alt 23. Mai 2017, 14:50
die Bezeichnungen rumdehen ginge och

MS Taste : Memory Set
MC Taste : Memory Clear
+M Taste : Add Memory to View
-M Taste : Substract Memory from View
$2B or not $2B

Geändert von himitsu (23. Mai 2017 um 15:01 Uhr)
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#8

AW: Memory Funktion Taschenrechner

  Alt 23. Mai 2017, 18:45
[...]
MC Taste : Setzt Speicher + Display Wert auf 0
[...]
Wenn wir schon am i-Tüpfeln und wünscheln sind: Ich würde dann nur den Speicher und nicht das Display löschen. Irgendwie wird das dann einfacher, wenn schon was im Speicher steht und man grade was überraschend "wertvolles" spontan im Display stehen hat. (Quasi so wie deine MS Taste )

Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz