Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "Taschen"rechner programmieren... (https://www.delphipraxis.net/29783-taschen-rechner-programmieren.html)

Leviathan 14. Sep 2004 17:19


"Taschen"rechner programmieren...
 
Vorweg : Bin absoluter Newbie, ich hab mit Delphi gestern (in der Schule in Informatik) angefangen.

Also, wir sollten heute einen einfachen Rechner programmiern, mit + - / *
Das hab ich problemlos hingekriegt, jetzt wollte ich noch eine = Taste einbauen,
sodass man erst die Rechenart auswählt, anschließend auf = klickt und dadurch das
Ergebnis dann angezeigt wird.

Beim = Button hatte ich vorher

Label1.Caption := FloatToStr(StrToFloat(edit1.text) x StrToFloat(edit2.text))

stehen, statt dem x jeweils das Rechenzeichen.
Wie mach ich jetzt dass die angeklickte Rechenart verwendet wird?

Thx im Voraus,
by MICH :mrgreen:

hummer 14. Sep 2004 17:33

Re: "Taschen"rechner programmieren...
 
Willst du das mit RadioButtons machen? Dann kannst du schreiben.

Delphi-Quellcode:
If RadioButtonMul.checked then Label1.Caption := FloatToStr(StrToFloat(edit1.text) * StrToFloat(edit2.text));
If RadioButtonAdd.checked then Label1.Caption := FloatToStr(StrToFloat(edit1.text) + StrToFloat(edit2.text));
//usw.
Must halt 4 Radiobuttons auf deine Form nehmen. Dann kannst du immer eine Rechenart auswählen.

Leviathan 14. Sep 2004 21:47

Re: "Taschen"rechner programmieren...
 
Nee, keine RadioButtons... die ganz normalen Buttons halt.

Aber du hast mir trotzdem geholfen... Vor lauter Bäumen hab ich den Wald nicht gesehn
und die Möglichkeit der IF-THEN Anweisung vergessen... :wall:

Funktioniert jetzt prima.

Ach ja... wie mach ich dass er aus den eingegebenen Zahlen (=> in den 2 Edit Fenstern)
die Potenz bildet?

JasonDX 14. Sep 2004 21:50

Re: "Taschen"rechner programmieren...
 
1. mit vorschleife, oder
2. mit exp(exponent*ln(basis))

Um genau zu sein:
Delphi-Quellcode:
 Label1.Caption := FloatToStr(exp(StrToFloat(Edit2.Text) * ln(StrToFloat(edit1.Text))));
wobei in edit2 der exponent steht

Edit: Genauer beschrieben

rai 17. Sep 2004 16:47

Re: "Taschen"rechner programmieren...
 
Ich weiss ja nicht ob dir der Tipp von Chimaira geholfen hat, aber warum versuchst du nicht die Idee mit den Radiobuttons zu adaptieren?

Bsp: Die Radiogroup unsichtbar machen (Eigenschaft 'Visible' auf 'false')
Dann kannst du daraus jederzeit die gewählte Rechenart auslesen

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);   // [+]
begin[color=darkred][/color]
  RadioGroup1.ItemIndex:=0;
end;

procedure TForm1.Button2Click(Sender: TObject);   // [-]
begin
  RadioGroup1.ItemIndex:=1;
end;

procedure TForm1.Button3Click(Sender: TObject);   //[*]
begin
  RadioGroup1.ItemIndex:=2;
end;

procedure TForm1.Button4Click(Sender: TObject);   // [:]
begin
  RadioGroup1.ItemIndex:=3;
end;

procedure TForm1.Button5Click(Sender: TObject);   // [=]
begin
  case RadioGroup1.ItemIndex of
    0: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) + StrToFloat(edit2.text));
    1: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) - StrToFloat(edit2.text));
    2: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) * StrToFloat(edit2.text));
    3: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) / StrToFloat(edit2.text));
  // Der Fall ItemIndex = -1 wird nicht behandelt, da ja keine Rechenart ausgewählt ist
  end;
  RadioGroup1.ItemIndex:=-1;
end;

Dax 17. Sep 2004 17:19

Re: "Taschen"rechner programmieren...
 
Bessere Idee:
Delphi-Quellcode:
var
  OpCode: byte = 0; //Globale Variable

procedure Button1Click(Sender: TObject); //EIN Event für ALLE Buttons
begin
  case TButton(Sender).Caption[1] of // da CASE keine Strings verarbeiten kann und wir sowieso nur ein Zeichen brauchen, behelfen wir uns mit dem ersten Chars des Caption-Strings
    '+': OpCode := 1;
    '-': OpCode := 2;
    '/': OpCode := 3;
    '*': OpCode := 4;
    '=': Case OpCode of
           1: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) + StrToFloat(edit2.text));
           2: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) - StrToFloat(edit2.text));
           3: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) / StrToFloat(edit2.text));
           4: Label1.Caption:=FloatToStr(StrToFloat(edit1.text) * StrToFloat(edit2.text));
         end;
  end;
end;
Ich hoffe nur, das war jetzt kein Overkill...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 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