Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Taschenrechner (Anfänger) Problem mit Minuszahlen (https://www.delphipraxis.net/190406-taschenrechner-anfaenger-problem-mit-minuszahlen.html)

Prakti16 30. Sep 2016 11:02

Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Hallo ich wollte fragen ob mir jemand ein paar Tipps oder Beispiele für einen Delphi Taschenrechner geben kann.
Ich meine damit nur beispiele wie ich in einen Edit1.Text und/oder im Label1.Caption Minuszahlen anzeigen lassen kann.
Dazu soll er die Minuszahlen dann noch weiter rechnen. ( Beispiel: 9-9-9-9 = -18 )
Falls jemand den Quelltext sehen möchte bitte schreiben dann setze ich in rein.

Danke schon mal im vor raus.:thumb:

Aviator 30. Sep 2016 11:40

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Zitat:

Zitat von Prakti16 (Beitrag 1349304)
Hallo ich wollte fragen ob mir jemand ein paar Tipps oder Beispiele für einen Delphi Taschenrechner geben kann.
Ich meine damit nur beispiele wie ich in einen Edit1.Text und/oder im Label1.Caption Minuszahlen anzeigen lassen kann.
Dazu soll er die Minuszahlen dann noch weiter rechnen. ( Beispiel: 9-9-9-9 = -18 )
Falls jemand den Quelltext sehen möchte bitte schreiben dann setze ich in rein.

Danke schon mal im vor raus.:thumb:

Hallo Prakti,

SourceCode ist eigentlich immer gut wenn man bei einem konkreten Problem helfen soll. In diesem Fall wäre es interessant, was du bereits gemacht hast.

Für einen Anfänger hört sich das jetzt vielleicht schwierig an, aber man sollte niemals die GUI / Grafische Elemente zur Datenerhaltung benutzen/"missbrauchen".

Ein Label zeigt etwas an. Die Daten zur Anzeige werden aus einer Variablen geliefert. Sobald sich die Variable ändert, updatet sich das Label. In einfachster Form über Properties realisierbar.

Generell kann ein Label alles mögliche anzeigen. Setze ein Label auf deine Form und mache einen EventHandler für das OnShow Ereignis der Form.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    MyVar: Integer; // Nur um mal bei Ganzzahlen zu bleiben
  end;

implementation

procedure TForm1.OnShow(Sender: TObject);
begin
  MyVar := -18;
  Label1.Caption := IntToStr(MyVar);
end;
Du wirst sehen, dass die Zahl -18 vom Label angezeigt wird. Eigentlich kein Hexenwerk.

Um das jetzt automatisiert zu machen, kannst du auf die bereits erwähnten Properties zurückgreifen. Beispiel sähe dann so aus:


Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    FMyVar: Integer; // Nur um mal bei Ganzzahlen zu bleiben
    procedure SetMyVar(Value: Integer);
    property MyVar: Integer read FMyVar write SetMyVar;
  end;

implementation

procedure TForm1.OnShow(Sender: TObject);
begin
  MyVar := -18;
  Label1.Caption := IntToStr(MyVar);
end;

procedure TForm1.SetMyVar(Value: Integer);
begin
  FMyVar := Value;
  Label1.Caption := IntToStr(FMyVar); // Hierdurch wird das Label beim Aktualisieren der Property automatisch auf den neuen Wert gesetzt
end;

Prakti16 30. Sep 2016 11:49

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Ok danke ich mache das jetzt gerade in In real.
Delphi-Quellcode:
unit Taschenrechner;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math, Buttons;

type
  TForm1 = class(TForm)
    Gleich: TButton;
    Addieren: TButton;
    Subtrahieren: TButton;
    Multiplizieren: TButton;
    Dividieren: TButton;
    Edit1: TEdit;
    Zahl1: TButton;
    Zahl2: TButton;
    Zahl3: TButton;
    Zahl4: TButton;
    Zahl5: TButton;
    Zahl6: TButton;
    Zahl7: TButton;
    Zahl8: TButton;
    Zahl9: TButton;
    Label1: TLabel;
    Zahl0: TButton;
    Aus: TButton;
    Rechenweg: TLabel;
    C: TButton;
    procedure Zahl1Click(Sender: TObject);
    procedure AusClick(Sender: TObject);
    procedure AddierenClick(Sender: TObject);
    procedure SubtrahierenClick(Sender: TObject);
    procedure MultiplizierenClick(Sender: TObject);
    procedure DividierenClick(Sender: TObject);
    procedure GleichClick(Sender: TObject);
    procedure CClick(Sender: TObject);
  private
    { Private-Deklarationen}
    function TextZuZahl(Text: String): real;
// Deklaration nur mit den Kopf Der Funktion
  public
    { Public-Deklarationen }
end;
var
  Form1: TForm1;
  LetzteZahl: Integer;
  Zwischensumme: real;
  Rechnung: String;

implementation

{$R *.dfm}
function TForm1.TextZuZahl(Text: String): real;
begin
  result := StrToFloat(Text);
end;
function TForm1.MehrZahlenAlsZwei(Zwischensumme: real; LetzteZahl: Integer): real;
begin
  result := Zwischensumme + LetzteZahl;
end;

procedure TForm1.Zahl1Click(Sender: TObject);
begin
  Edit1.Text := Edit1.Text + (Sender as TButton).Caption;
  Rechenweg.Caption := Rechenweg.Caption + (Sender as TButton).Caption;
end;

procedure TForm1.AusClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.AddierenClick(Sender: TObject); // Pluszeichen-Button ( + )
begin
  Rechenweg.Caption := Rechenweg.Caption + (Sender as TButton).Caption;
  Rechnung := '+';
  GleichClick(nil);
  LetzteZahl := StrToInt(Edit1.Text);
  Edit1.Text := '';
end;

procedure TForm1.SubtrahierenClick(Sender: TObject); // Minuszeichen-Button ( - )
begin
  Rechenweg.Caption := Rechenweg.Caption + (Sender as TButton).Caption;
  Rechnung := '-';
  GleichClick(nil);
  LetzteZahl := StrToInt(Edit1.Text);
  Edit1.Text := '';
end;

procedure TForm1.MultiplizierenClick(Sender: TObject); // Malzeichen-Button ( * )
begin
  Rechenweg.Caption := Rechenweg.Caption + (Sender as TButton).Caption;
  Rechnung := '*';
  GleichClick(nil);
  LetzteZahl := StrToInt(Edit1.Text);
  Edit1.Text := '';
end;

procedure TForm1.DividierenClick(Sender: TObject); // Geteiltzeichen-Button ( / )
begin
  Rechenweg.Caption := Rechenweg.Caption + (Sender as TButton).Caption;
  Rechnung := '/';
  GleichClick(nil);
  LetzteZahl := StrToInt(Edit1.Text);
  Edit1.Text := '';
end;

procedure TForm1.GleichClick(Sender: TObject); // Gleichzeichen-Button ( = )
begin

  // Addieren
  if (Rechnung = '+') then
  begin
    Zwischensumme := Zwischensumme + TextZuZahl(Edit1.Text);
    Label1.Caption := FloatToStr(Zwischensumme);
  end;

  // Subtrahieren
  if (Rechnung = '-') then
  begin
    Zwischensumme := LetzteZahl + Zwischensumme - TextZuZahl(Edit1.Text);
    Label1.Caption := FloatToStr(Zwischensumme);
  end;

  // Multiplizieren
  if (Rechnung = '*') then
  begin
    if (Zwischensumme > 0) then
    begin
      Zwischensumme := Zwischensumme * TextZuZahl(Edit1.Text);
    end else
    begin
      Zwischensumme := LetzteZahl * TextZuZahl(Edit1.Text);
    end;
    Label1.Caption := FloatToStr(Zwischensumme);
  end;

  // Dividieren
  if (Rechnung = '/') then
  begin
    if (Zwischensumme > 0) then
    begin
      Zwischensumme := Zwischensumme / TextZuZahl(Edit1.Text);
    end else
    begin
      Zwischensumme:= LetzteZahl / TextZuZahl(Edit1.Text);
    end;
    Label1.Caption := FloatToStr(Zwischensumme);
  end;
end;

procedure TForm1.CClick(Sender: TObject);
begin
  Rechenweg.Caption := '';
  Edit1.Text := '';
  Label1.Caption := '';
  Zwischensumme := 0;
  LetzteZahl := 0;
end;

end.

Jim Carrey 30. Sep 2016 11:53

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
:idea: http://www.delphipraxis.net/190355-e...ml#post1348903

Prakti16 30. Sep 2016 11:55

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Das habe ich ja aber soweit ich meine Programmierung verstehe wird die zahl im Edit1.Text gespeichert und dann erst in die var Zwischensumme deswegen kann ich keine Minuszahlen Richtig rechnen aber ich kriege es nicht mehr behoben:(

Aviator 30. Sep 2016 11:56

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Bitte überarbeite deinen Beitrag nochmal und rahme den gesamten SourceCode in
Code:
[DELPHI][/DELPHI]
Tags ein damit man das ansatzweise lesen kann. Achte auch bitte auf Einrückungen in deinem SourceCode. Die sind jetzt natürlich verloren gegangen.

EDIT: Du kannst auch den SourceCode komplett markieren und dann den Delphi Helm über dem (erweiterten) Beitragseditor klicken.

Mavarik 30. Sep 2016 12:16

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Leider rechnet Dein Taschenrechner aber falsch...

1+2*3 = 7 und nicht 9

Am einfachsten kann man das umsetzen, in dem man einen Stack benutzt! - intern - die Umgekehrte polnische Notation verwenden. // Edit

Prakti16 30. Sep 2016 12:22

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Ok danke schön

Jim Carrey 30. Sep 2016 12:34

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Zitat:

Zitat von Mavarik (Beitrag 1349325)
Am einfachsten kann man das umsetzen, in dem man einen Stack benutzt - intern - die Umgekehrte polnische Notation verwendet.

Zitat:

Zitat von Prakti16 (Beitrag 1349328)
Ok danke schön

Weißt du denn, was er meint? Ich nämlich nicht :thumb:

Prakti16 30. Sep 2016 12:49

AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
 
Nicht so wirklich aber ich gucke im delphi treff nach der bedeutung von stack - intern - die Umgekehrte polnische Notation verwendet.
:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf