AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Taschenrechner Problem: Record, Objekt oder Klassentyp
Thema durchsuchen
Ansicht
Themen-Optionen

Taschenrechner Problem: Record, Objekt oder Klassentyp

Ein Thema von Ghostleader · begonnen am 22. Aug 2009 · letzter Beitrag vom 22. Aug 2009
Antwort Antwort
Seite 2 von 2     12   
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 16:42
Nein also = + usw sind alles Buttons.

Reihenfolge:

1.)User drückt einen Button1-9 (so oft wie er will - also das er auch zweimal Button1 drücken kann.)
2.)User drückt Button +.
3.)User drückt einen Button1-9 (so oft wie er will - also das er auch zweimal Button1 drücken kann.)
4.)User drückt Button =.
5.)Das Ergebnis wird in Label1 (Caption: Anzeige), angezeigt.

So wollte ich den Rechner haben.

Wenn der Button 2 gedrückt wird, soll die Anzeige leer sein, damit erneut etwas eingegeben werden kann.

Nicht bedacht habe ich, fällt mir gerade auf, wie das Programm sich die Zahl von Schritt 1.) merken soll. Aber das geht doch über den Arbeitspeicher (mit entsprechendem Befehl), oder nicht?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#12

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 16:48
Du könntest Die Zahl in einem sog. "Feld" des Formulars speichern.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Ergebnis: TButton;
    Zahl4: TButton;
    Zahl2: TButton;
    Zahl1: TButton;
    Zahl9: TButton;
    Zahl6: TButton;
    Zahl7: TButton;
    Zahl8: TButton;
    Zahl5: TButton;
    Zahl3: TButton;
    Label2: TLabel;
    Plus: TButton;
    procedure ErgebnisClick(Sender: TObject);
  private
    { Private-Deklarationen } 
    FErsteZahl: Integer;
  public
    { Public-Deklarationen } 
  end;
Die Zahl kommt a) in den "private" Abschnitt (wir brauchen sie ja nur innerhalb des Formulars) und b) wird üblicherweise solchen Feldern ein "F" (für Feld oder engl. Field) vorangestellt.

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 16:53
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Button10: TButton;
    Button12: TButton;
    Label3: TLabel;
    Panel3: TPanel;
    Button4: TButton;
    Button1: TButton;
    Button7: TButton;
    Button8: TButton;
    Button5: TButton;
    Button2: TButton;
    Button3: TButton;
    Button6: TButton;
    Button9: TButton;
    Panel4: TPanel;
    Plus: TButton;
    Ergebnis: TButton;
    Label4: TLabel;
    Label5: TLabel;
    Button11: TButton;
    procedure ErgebnisClick(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FErsteZahl: Integer;
  public
    { Public-Deklarationen }
  end;
So siehts aus. (Hab noch einige Panels+Labels hinzugefügt aber nur fürs Aussehen.)
Allerdings, kommt immernoch:

[Hinweis] Taschenrechnerunit.pas(57): Auf 'Zahl1' zugewiesener Wert wird niemals benutzt
[Hinweis] Taschenrechnerunit.pas(54): Variable 'Plus' wurde deklariert aber in 'TForm1.ErgebnisClick' nicht verwendet
[Fehler] Taschenrechnerunit.pas(66): 'END' erwartet, aber ',' gefunden
[Hinweis] Taschenrechnerunit.pas(40): Das private Symbol 'FErsteZahl' wurde deklariert, aber nie verwendet
[Fataler Fehler] Taschenrechnerprojekt.dpr(5): Verwendete Unit 'Taschenrechnerunit.pas' kann nicht compiliert werden
und

Ergebnis:= Zahl1,Zahl2,Zahl3,Zahl4,Zahl5,Zahl6,Zahl7,Zahl8,Za hl9+Zahl1,Zahl2,Zahl3,Zahl4,Zahl5,Zahl6,Zahl7,Zahl 8,Zahl9;

ist dabei rot markiert.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 17:02
Du musst diese Variable bzw. das Feld auch benutzen.

Das mit Ergebnis, diese Zuweisung ist nicht möglich.

Schau Dir besser die Grundlagen Tutorials von dsdt.info an, dann werden Dir einige Zusammenhänge klarer sein.

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 17:04
Hm das mit dem kleinen Rechner Tutorial kenne ich schon. Ich will allerdings Buttons kein Edits

Ich werd wohl erstmal aufhören mit dem Rechner. Nur diese Editierboxen find ich zu stupide und die Buttons krieg ich nicht auf die Reihe .

Vielen Dank für deine große Hilfe .

Mit freundlichen Grüßen Ghostleader
Michael
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 19:32
Hallo,

also das mit den TEdit ist ja auch nur Beispielhaft. Du könntest ja einfach machen, dass wenn ein Button gedrückt wird (je nachdem ob 1, 2, 3, ...) wird das EditFeld um diese Zahl erweitert. Wenn + gedrückt wird, dann merkst du dir die Zahl (eine TStringlist wäre da Beispielsweise gut) und danach leerst du das EditFeld, damit die 2., 3., 4., ... Zahl eingegeben wird. Die TStringlist hätte den Vorteil, dass du auch mehrere Zahlen dir merken kannst ohne dir Gedanken über die Anzahl der Möglichen eingegebenen Zahlen zu machen. Bei = wird dann alles berechnet, das Ergebnis ausgegeben und die TStringList gelöscht.
So ist eigentlich heute Jeder Taschenrechner aufgebaut. Ist denke ich auch mit einem relativ geringem Aufwand umsetzbar. Wenn natürlich höhere Funktionen und komplizierte Berechnungen (z.B. Beachtung von Punkt- und Strichrechnungnen bei längeren Formeln oder Integrale) kommen, wird der Programieraufwand natürlich deutlich größer.

MfG
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 22:29
Du hast doch beschrieben, was du machen musst

Als erstes gibt der Benutzer ein, was die erste Zahl ist.

Also machst du da einfach ganz am Anfang (du meintest Button2 würde das Zurücksetzen?) "FErsteZahl" oder wie du das genannt hattest" auf 0.
Wenn jetzt jemand auf die 1 drückt, dann willst du ja das in FErsteZahl statt 0 jetzt 1 steht. Nun könntest du einfach sagen: FErsteZahl := 1. Aber was ist, wenn man 11 haben will? Deshalb musst du das etwas erweitern Und zwar kommt eine Stelle hinzu und das macht man im Dezimalsystem mit einer Multiplikation.

So jetzt wird es etwas kompilizierter. Und zwar wenn du auf einem Button (0-9) drückst dann wird im "OnClick"-Ergebnis das aufgerufen:
Delphi-Quellcode:
procedure TForm1.ButtonZifferClick(Sender : TObject);
begin
  // In Sender steht die Komponente drinne die das ausgelöst hat. Hiermit teste ich
  // ob darin ein Button steht
  if Sender is TButton then
  begin
    // Jetzt nehmen wir die Zahl mal 10
    // Also wenn wir vorher 1 hatten und jetzt die 2 gedrückt haben wollen wir ja 12
    // Und 12 ist ja: 1 * 10 + 2 also 10 * WasVorherWar + WasJetztGedrücktWurde
    FErsteZahl := FErsteZahl * 10;
    // Und ganz zum schluss musst du ja das neue Ergebnis hinzufügen
    // Dazu gucken wir, welcher Text im übergebenen Button stand (dafür das if da oben)
    FErsteZahl := FErsteZahl + StrToInt(TButton(Sender).Caption);
  end;
end;
So als nächstes solltest du noch ein Operator hinzufügen. Damit du nachher auch weißt was gedrückt wurde.
Also du hast die Buttons "+", "-", "*" und "/". Wenn man darauf klickt wird jetzt folgende Methode ausgeführt:
Delphi-Quellcode:
procedure TForm1.ButtonOperatorClick(Sender : TObject);
begin
  // In Sender steht die Komponente drinne die das ausgelöst hat. Hiermit teste ich
  // ob darin ein Button steht
  if Sender is TButton then
  begin
    // Jetzt speichern wir einfach den Operator
    FOperator := TButton(Sender).Caption[1];
    // Dazu nehme ich das erste Zeichen aus dem Text.

    // Dann die zweite Zahl zurücksetzen
    FZweiteZahl := 0;
  end else
    // Wenn im Sender kein Button stand dann den Operator "ungültig" setzen
    FOperator := #0;
end;
Damit sind wir schon fast fertig. Jetzt müssen wir den Inhalt aus ButtonZifferClick verbessern. Bisher haben wir da ja nur die erste Zahl gesetzt. Jetzt wollen wir da auch die zweite Zahl setzen. Dazu modifizieren wir den Code:
Delphi-Quellcode:
procedure TForm1.ButtonZifferClick(Sender : TObject);
begin
  if Sender is TButton then
  begin
    // NEU: Wenn der Operator "ungültig" ist, dann ändern wir die erste Zahl, ansonsten die zweite
    if FOperator = #0 then
    begin
      FErsteZahl := FErsteZahl * 10 + StrToInt(TButton(Sender).Caption);
    end else
    begin
      FZweiteZahl := FZweiteZahl * 10 + StrToInt(TButton(Sender).Caption);
    end;
  end;
end;
Ich habe dazu den Code etwas optimiert und die Kommentare raus genommen. Als letzten Schritt müssen wir dann nur noch etwas Code ausführen, wenn der "="-Button gedrückt wird:
Delphi-Quellcode:
procedure TForm1.ButtonGleichClick(Sender : TObject);
begin
  // Jetzt überprüfen wir welcher Operator gewählt wurde
  case FOperator of
    '+' : LErgebnis.Caption := IntToStr(FErsteZahl + FZweiteZahl);
    '-' : LErgebnis.Caption := IntToStr(FErsteZahl - FZweiteZahl);
    '*' : LErgebnis.Caption := IntToStr(FErsteZahl * FZweiteZahl);
    '/' : LErgebnis.Caption := FloatToStr(FErsteZahl / FZweiteZahl);
    else LErgebnis.Caption := 'Unvollständige Eingabe';
  end;
  FErsteZahl := 0;
  FZweiteZahl := 0;
  FOperator := #0
end;
So das ist jetzt nicht 100% zu übernehmen. Aber versuche bitten den Code erst zu verstehen.

MfG
xZise

PS: Anfangs war das Problem, dass du "Button.Text" hattest und auch ein Self hat da nicht geholfen Aber die Codevervollständigung (Strg+Leerzeichen) hilft dir da gerne!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:00 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