AGB  ·  Datenschutz  ·  Impressum  







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

Taschenrechner ein Editfeld

Ein Thema von Beat · begonnen am 30. Nov 2012 · letzter Beitrag vom 7. Dez 2012
Antwort Antwort
Seite 3 von 4     123 4      
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: Taschenrechner ein Editfeld

  Alt 1. Dez 2012, 17:59
no problem, jedem ist eh klar, daß du dich nur vertippt hast. Wollte nur etwas abkürzen ("Wieso kommt denn da inkompatible Typen?")
  Mit Zitat antworten Zitat
Beat

Registriert seit: 30. Nov 2012
12 Beiträge
 
#22

AW: Taschenrechner ein Editfeld

  Alt 1. Dez 2012, 18:39
Du wirst doch wissen, was eine Variable und was ein Integer ist.
Delphi-Quellcode:
var
  Operation: integer;
...
case Operation of
  1: Addieren(Zahl1, Zahl2);
  2: Subtrahieren(Zahl1, Zahl2);
  3: Multiplizieren(Zahl1, Zahl2);
  4: Dividieren(Zahl1, Zahl2);
  else
    //ungültige Operation, entsprechend reagieren
end;
Etwas lesbarer wird das mit einem eigenen Aufzählungstypen:
Delphi-Quellcode:
type
  TOperation = (opPlus, opMinus, opMal, opDurch);

var
  Operation: TOperation;
...
case Operation of
  opPlus: Addieren(Zahl1, Zahl2);
//usw. usf.
Ich will vorerst nochmal anmerekn wir haben in der Schule erst 3 Delphi Stunden gehabt Ihr müsst mich also wie ein Vollpfosten behandeln, sorry
Gut, ich bevorzuge deinen 2. Quelltext, wobei mir da noch 2 Fragen offen sind.

1. Unter type hast du TOperation, was ist das ? ein Button ist ja ein TButtoon, aber was ist eine TOperation ?

2. Das Case of kommt dann in den '=' Button nicht wahr ?


Aber danke nochmal, dass hier so großzügig geholfen wird

Geändert von Beat ( 1. Dez 2012 um 18:41 Uhr) Grund: Irreführende Rechtschreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#23

AW: Taschenrechner ein Editfeld

  Alt 1. Dez 2012, 19:04
Ihr sollt nach 3 Stunden bereits einen Taschenrechner schreiben? Das könnte man großzügig "ambitioniert" nennen. Das TOperation ist ein selbst definierter Datentyp, nämlich eine Aufzählung. Genauere Infos dazu solltest Du in der Delphi-Hilfe finden oder z.B. hier. Deine 2. Frage verstehe ich ehrlich gesagt nicht
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Beat

Registriert seit: 30. Nov 2012
12 Beiträge
 
#24

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 13:52
So bin fertig hier mal mein Quelltext, Punkt vor Strich wird aber nicht beachtet!

Code:
    unit Taschenrechner;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons, ImgList;

type
  TForm1 = class(TForm)

    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Ausgabe: TEdit;
    Button18: TButton;
    BitBtn1: TBitBtn;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  zwischen : boolean;
  rz : integer ;
  Ergebnis : real;

implementation



{$R *.DFM}



procedure einlesen ;
begin
If rz = 1 then Form1.Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Form1.Ausgabe.Text))
else
If rz = 2 then Form1.Ausgabe.Text := FloatToStr (Ergebnis - StrToFloat (Form1.Ausgabe.Text))
else
If rz = 3 then Form1.Ausgabe.Text := FloatToStr (Ergebnis * StrToFloat (Form1.Ausgabe.Text))
else
If rz = 4 then Form1.Ausgabe.Text := FloatToStr (Ergebnis / StrToFloat (Form1.Ausgabe.Text))
else
If rz = 0 then ShowMessage ('Bitte Rechnung vollenden. Sprich Zahl 1 eingeben, dann Rechenzeichen bestimmen, dann 2. Zahl eingeben und den = Button betätigen !');



end;



procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Ausgabe.text := '' ;
zwischen := false;
rz := 0 ;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '1' ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '2' ;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '3' ;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '4' ;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '5' ;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '6' ;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '7' ;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '8' ;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '9' ;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
     form1.Ausgabe.Text := form1.Ausgabe.Text + '0' ;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
form1.Ausgabe.text := '' ;
zwischen := false;
rz := 0 ;

end;

procedure TForm1.Button12Click(Sender: TObject);
begin
     form1.Ausgabe.Text := '';
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
try
     If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text));
        zwischen := true ;
        Ergebnis := StrToFloat (Ausgabe.Text) ;
        rz := 1 ;
        form1.Ausgabe.Text := '' ;
except Showmessage ('Bitte 2 oder mehr Zahlen addieren !');
end;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
try
   If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis - StrToFloat (Ausgabe.Text));
      zwischen := true ;
      Ergebnis := StrToFloat (Ausgabe.Text) ;
      rz := 2 ;
      form1.Ausgabe.Text := '' ;
except Showmessage ('Bitte 2 oder mehr Zahlen subtrahieren !')
end;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
try
   If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis * StrToFloat (Ausgabe.Text));
      zwischen := true ;
      Ergebnis := StrToFloat (Ausgabe.Text) ;
      rz := 3 ;
      form1.Ausgabe.Text := '' ;
except ShowMessage (' Bitte 2 oder mehr Zahlen mutliplizieren !');
end;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
try
     If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis / StrToFloat (Ausgabe.Text));
        zwischen := true ;
        Ergebnis := StrToFloat (Ausgabe.Text) ;
        rz := 4 ;
        form1.Ausgabe.Text := '' ;
except ShowMessage (' Bitte 2 oder mehr Zahlen miteinander divideren !');
end;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
einlesen

end;

procedure TForm1.Button18Click(Sender: TObject);
begin
form1.Ausgabe.Text := form1.Ausgabe.Text + ',' ;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ShowMessage ('Vielen Dank, dass sie unseren Taschenrechner benutzt haben !');
Close

end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#25

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 14:12
Wenn ich ehrlich bin, bezweifle ich, daß der Taschenrechner richtig funktioniert, - wofür ist "zwischen" gut?
Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);
begin
try
     If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text));
        zwischen := true ;
        Ergebnis := StrToFloat (Ausgabe.Text) ;
        rz := 1 ;
        form1.Ausgabe.Text := '' ;
except Showmessage ('Bitte 2 oder mehr Zahlen addieren !');
end;
end;
Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);
begin
  try
    If zwischen then
      Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text));
    zwischen := true ;
    Ergebnis := StrToFloat (Ausgabe.Text) ;
    rz := 1 ;
    Ausgabe.Text := '' ;
  except
    Showmessage ('Bitte 2 oder mehr Zahlen addieren !');
  end;
end;
Ein wenig formatieren, das nicht auszurottende "if irgendwas=true then" berichtigt, und schon ist das alles etwas lesenswerter.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#26

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 14:40
Hättest du den Komponenten aussagekräftige Namen gegeben, man könnte leichter nachvollziehen was wofür ist.

Ich hab auch mal paar Taschenrechner am Anfang geprogt und hab sogar einen der Punkt vor Strichrechnung beachtet, finde den aber im Archiv nicht. Vielleicht ist es auf einer der anderen CDs.

Was ich aber gefunden habe ist mein alter Ein-Prozedur-Taschenrechner für ein Editfeld. Allerdings keine Punkt vor Strichrechnung. Ich glaube sonst hat er funktioniert.

Aber vielleicht ist es gut für paar Anregungen.

Delphi-Quellcode:
{                  --== Ein-Prozedur Taschenrechner ==--                       }
{           Hinweis: befolgt nicht die Punkt vor Strich Regel                  }
var
  Mem1, Mem2: Extended;
  LastOpKey: Char;

{Mögliche Tasten: "0123456789" und ",", dann "+-*/", "c", "=", alternativ Enter}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  Edit: TEdit;
begin
  {Dies und das}
  Edit := Edit1;
  if Key = #13 then Key := '=';

  {Clear}
  if Key = 'cthen
  begin
    Edit.Text := FloatToStr(0);
    Edit.SelStart := Length(Edit.Text); //setzt Cursor an Editfeld Ende
    Mem2 := 0;
    LastOpKey := #0;
    Key := #0;
    Exit;
  end;

  {Rechnen}
  if Key in ['+', '-', '*', '/', '='] then
  begin
    {Änderung des Operators (Operatorkorrektur)}
    if not Edit.Modified then
    begin
      LastOpKey := Key;
      Key := #0;
      Exit;
    end;
    {bedeutet, daß Opperator eigegeben wurde und vor der nächsten Zahleeingabe
    Edit-Feld gelöscht werden muß. Wird auch für Operatorkorrektur genutzt}

    Edit.Modified := False;

    {altuelle Zahl aus Editfeld holen}
    Mem1 := StrToFloat(Edit.Text);

    case LastOpKey of
    '+': Mem1 := Mem2 + Mem1;
    '-': Mem1 := Mem2 - Mem1;
    '*': Mem1 := Mem2 * Mem1;
    '/': Mem1 := Mem2 / Mem1;
    else
      Mem2 := Mem1;
      LastOpKey := Key;
      Key := #0;
      Exit;
    end;

    {Ergebnis und Zwischenergebns in Editfeld zurückschreiben}
    Edit.Text := FloatToStr(Mem1);
    Edit.SelStart := Length(Edit.Text);

    {auf nächste Zahlen-Eingabe verbreiten}
    Mem2 := Mem1;
    if Key <> '=then LastOpKey := Key else LastOpKey := #0;
    Key := #0;
    Exit;
  end;

  {Zahlen Filtern}
  if not (Key in [#8, '0'..'9', ',']) then Key := #0;
  {Löscht Editinhalt nach Operatoreingabe, bei neuen Zahleingabe}
  if not Edit.Modified then Edit.Text := '';
end; {Popov}
  Mit Zitat antworten Zitat
Beat

Registriert seit: 30. Nov 2012
12 Beiträge
 
#27

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 15:53
Wenn ich ehrlich bin, bezweifle ich, daß der Taschenrechner richtig funktioniert, - wofür ist "zwischen" gut?
Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);
begin
try
     If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text));
        zwischen := true ;
        Ergebnis := StrToFloat (Ausgabe.Text) ;
        rz := 1 ;
        form1.Ausgabe.Text := '' ;
except Showmessage ('Bitte 2 oder mehr Zahlen addieren !');
end;
end;

Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);
begin
  try
    If zwischen then
      Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text));
    zwischen := true ;
    Ergebnis := StrToFloat (Ausgabe.Text) ;
    rz := 1 ;
    Ausgabe.Text := '' ;
  except
    Showmessage ('Bitte 2 oder mehr Zahlen addieren !');
  end;
end;
Ein wenig formatieren, das nicht auszurottende "if irgendwas=true then" berichtigt, und schon ist das alles etwas lesenswerter.

Gruß
K-H
1. Ganz einfach. Zwischen habe ich eingebaut, damit man mehrere mal hintereinander addieren kann. Sprich Falls (If) zwischen schon bestimmt wurde (= true), dann soll man die alte abgespeicherte Zahl mit der neuen addieren (Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text)). Ich konnte es nicht anders formulieren

2.
Mhh, was ist denn an dem "if irgendwas=true then" so schlimm ?
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#28

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 15:56
Mhh, was ist denn an dem "if irgendwas=true then" so schlimm ?
Dass man es besser so schreiben kann:
if irgendwas then ...

Mit =true kann man unter Umstaenden grosse Probleme bekommen, die man dann schwer wieder findet.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#29

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 16:44
Mhh, was ist denn an dem "if irgendwas=true then" so schlimm ?
An für sich nichts, mal davon abgesehen, dass man mit der Zeit p80286's Variante übersichtlicher findet. Bei Delphi ist das die Typische Variante, (fast) jeder macht es so.

Zufällig gab es die Tage eine Diskussion dazu. Man kann sagen, dass deine Variante gegen True zu prüfen an für sich nicht schlimm ist, solange du nur Delphifunktionen nutzt. Wenn du aber irgendwann mit API oder einigen DLLs usw. arbeitest, kann es passieren, dass es zu Problemen kommen wird. Denn andere Sprachen liefern u. U. andere Werte für True (bei Delphi ist es -1), so dass der Vergleich gegen True u. U. nicht klappen wird. Wenn also eine Delphifremde Funktion für True eine 1 liefert und Delphi unter True -1 versteh, dann wird der Vergleich nicht klappen. Wenn du aber nicht gegen True prüfst, betrachtet Delphi alles was nicht False ist als True, auch eine 3.

Aber wie gesagt, solange du nur Delphi Funktionen nutzt ist es gehopst wie gesprungen ob du es so oder so machst.

Geändert von Popov ( 7. Dez 2012 um 17:04 Uhr) Grund: Kleinen Fehler korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#30

AW: Taschenrechner ein Editfeld

  Alt 7. Dez 2012, 17:05
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  Function WithTrue:Boolean;
    begin
      Result := Boolean(2);
    end;

begin
  try
    if WithTrue then Writeln('OK 1');
    if WithTrue = true then Writeln('OK 2');
    Readln;

    { TODO -oUser -cConsole Main : Code hier einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 11:39 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