![]() |
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: |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Zitat:
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:
Du wirst sehen, dass die Zahl -18 vom Label angezeigt wird. Eigentlich kein Hexenwerk.
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; 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; |
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. |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
|
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:(
|
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Bitte überarbeite deinen Beitrag nochmal und rahme den gesamten SourceCode in
Code:
Tags ein damit man das ansatzweise lesen kann. Achte auch bitte auf Einrückungen in deinem SourceCode. Die sind jetzt natürlich verloren gegangen.
[DELPHI][/DELPHI]
EDIT: Du kannst auch den SourceCode komplett markieren und dann den Delphi Helm über dem (erweiterten) Beitragseditor klicken. |
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 |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Ok danke schön
|
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Zitat:
Zitat:
|
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.
:) |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
ich kann es dir ja gleich schreiben :)
|
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Zitat:
Stack ist klar oder nicht? UPN ist... 1 2 + 3 * = Hierfür nimmt man einen Stack für die Zahlen und einen für die Operatoren... Jeder Operator hat eine Wertigkeit Beispiel: (=3;*=2 +=1 So kann man die Reihenfolge was zu erst berechnet werden muss erhalten. |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Hier ist es .
Damit zusammengesetzte Ausdrücke auch ohne Klammern geschrieben werden können, hat der polnische Mathematiker Jan Lukasiewicz eine Notation entworfen, welche die Operatoren neben den Zahlen und Variablen (und nicht dazwischen) aufführt. Die hier verwendete Notation schreibt die Operatoren nach den Zahlen und wird "umgekehrte Polnische Notation" genannt. Anstelle von "3 + 4" schreibt man hier "3 4 +". Damit können auch zusammengesetzte Ausdrücke ohne Klammern geschrieben werden. Anstelle von "(3 + 4) * (6 - 2)" schreibt man nun "3 4 + 6 2 - *". Es wird also zuerst 3 + 4 gerechnet, danach wird 6 - 2 bestimmt und am Schluss werden die beiden Faktoren miteinander multipliziert. Achtung: Eine Änderung in der Reihenfolge der Operatoren hat natürlich auch eine Auswirkung auf die Auswertungsreihenfolge und somit auf das Resultat. Somit wird "3 4 + 6 - 2 *" wie folgt ausgewertet: "((3 + 4) - 6) * 2" . Am einfachsten stellt man sich vor, die Zahlen werden der Reihe nach (von links nach rechts) auf Zettel geschrieben und aufeinadergetürmt (Stapel). Kommt nun ein Operator, so werden die beiden obersten Zettel vom Stapel genommen, miteinander verrechtet und am Schluss das Resultat wieder auf dem Stapel (auf einem neuen Zettel) aufgetürmt. (Die beiden verrechneten Zahlen werden nicht mehr auf den Stapel gelegt.) Beispiel : markieren ausblenden Quelltext 1: 2: 3: 1 * 5 7 * * 68 9 2 Davor kommen wiederum die Operatoren für die Additionen. Das ganze sieht dann also so aus: markieren ausblenden Quelltext 1: + + 1 * 5 7 * * 68 9 2 |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Danke mavarik ich habs zwar selber gefunden aber noch mal danke für die kurz vor :)
|
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
Gut kopiert, hast Du es denn auch verstanden?
;) Sherlock |
AW: Taschenrechner (Anfänger) Problem mit Minuszahlen
im Großen und Ganze ja
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz