WinFuture-Forum.de: Taschenrechner - Fehlersuche :o - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Taschenrechner - Fehlersuche :o Delphi 7


#1 Mitglied ist offline   Noaki 

  • Gruppe: aktive Mitglieder
  • Beiträge: 25
  • Beigetreten: 14. September 05
  • Reputation: 0

geschrieben 12. Dezember 2006 - 21:33

Sers,

ich bin gerade dabei in Delphi einen Taschenrechner zu programmieren, jedoch macht er nicht ganz das, was ich möchte, was er tun soll (scheiter im Moment schon an Addition und Subtraktion) <_<

Aber naja bevor ich zu viel rede poste ich einfach mal den Quelltext, der für mich eigentlich vom Logischen her richtig erscheint ^^ Wäre nett, wenn ihr mir sagt, was da schief läuft bzw, ob der ganze Ansatz falsch ist. Bitte postet keine komplette Lösung, da will ich selber drauf kommen.

unit Taschenrechner;

// delphi-eigene einstellungen bezüglich der verwendeten objekten

interface

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

type
  TForm1 = class(TForm)
	Display: TEdit;
	Taste7: TButton;
	Taste8: TButton;
	Taste0: TButton;
	Taste3: TButton;
	Taste6: TButton;
	Taste9: TButton;
	Taste5: TButton;
	Taste2: TButton;
	Taste1: TButton;
	Taste4: TButton;
	TasteKomma: TButton;
	TasteMal: TButton;
	TasteTeilen: TButton;
	TasteMinus: TButton;
	TastePlus: TButton;
	TasteGleich: TButton;
	procedure Taste4Click(Sender: TObject);
	procedure Taste0Click(Sender: TObject);
	procedure Taste1Click(Sender: TObject);
	procedure Taste2Click(Sender: TObject);
	procedure Taste3Click(Sender: TObject);
	procedure Taste5Click(Sender: TObject);
	procedure Taste6Click(Sender: TObject);
	procedure Taste7Click(Sender: TObject);
	procedure Taste8Click(Sender: TObject);
	procedure Taste9Click(Sender: TObject);
	procedure TasteKommaClick(Sender: TObject);
	procedure TastePlusClick(Sender: TObject);
	procedure TasteMinusClick(Sender: TObject);
	procedure TasteGleichClick(Sender: TObject);
  private
	{ Private-Deklarationen }
  public
	{ Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

// Variablen für Rechnungen des Rechners
// (gelten über den komplett code)
//
// zahl			 :  sich im display befindene zahl
//					 zur zeit der rechenanweisung
// x				:= zahl (zahl = string, x = real)
// zwischenergebnis :  variable für zwischenergebnisse

var
  zahl				 : string;
  x , zwischenergebnis : real;


{$R *.dfm}

// definiere prozeduren - bei klick auf taste 0-9 und ","
// zahl ins display schreiben, bwz hinzufügen

 procedure TForm1.Taste0Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '0';
 end;

 procedure TForm1.Taste1Click(Sender: TObject);
  begin
  Display.Text := Display.Text + '1';
 end;

 procedure TForm1.Taste2Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '2';
 end;

 procedure TForm1.Taste3Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '3';
 end;

 procedure TForm1.Taste4Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '4';
 end;

 procedure TForm1.Taste5Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '5';
 end;

 procedure TForm1.Taste6Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '6';
 end;

 procedure TForm1.Taste7Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '7';
 end;

 procedure TForm1.Taste8Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '8';
 end;

 procedure TForm1.Taste9Click(Sender: TObject);
  begin
   Display.Text := Display.Text + '9';
 end;

 procedure TForm1.TasteKommaClick(Sender: TObject);
  begin
   Display.Text := Display.Text + ',';
 end;

// "richtiges" programm beginnt


// Rechenvorgang : Addition

 procedure TForm1.TastePlusClick(Sender: TObject);
  begin
   //der Variable "zahl" wird der inhalt/wert des displays überwiesen
   zahl			 := Display.Text;
   //der string "zahl" wird in eine zahl vom real typ umgewandelt
   x				:= StrToFloat(zahl);
   //zwischenergebnis wird aktualisiert
   zwischenergebnis := zwischenergebnis + x;
   //display wird dem zwischenergebnis angepasst (vorher gelöscht)
   Display.Clear;
   Display.Text	 := FloatToStr(zwischenergebnis);

 end;

// Rechenvorgang : Subtraktion

 procedure TForm1.TasteMinusClick(Sender: TObject);
  begin
   //der Variable "zahl" wird der inhalt/wert des displays überwiesen
   zahl			 := Display.Text;
   //der string "zahl" wird in eine zahl vom real typ umgewandelt
   x				:= StrToFloat(zahl);
   //zwischenergebnis wird aktualisiert
   zwischenergebnis := zwischenergebnis - x;
   //display wird dem zwischenergebnis angepasst (vorher gelöscht)
   Display.Clear;
   Display.Text	 := FloatToStr(zwischenergebnis);
  end;

 procedure TForm1.TasteGleichClick(Sender: TObject);
  begin
   Display.Clear;
   Display.Text := FloatToStr(zwischenergebnis);
 end;

end.

Dieser Beitrag wurde von Noaki bearbeitet: 12. Dezember 2006 - 21:34

0

Anzeige



#2 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 12. Dezember 2006 - 21:40

ich weis zwar net mehr genau, wie das alles in delphi ging, aber, wenn du eine stringtofloat konvertierung durchführst und andersrum, kannst du das doch dann nur auf iene als float deklarierte variable schreiben, und nicht auf eine vom typ real, oder? (sry, der datentyp real ist mir noch nie untergekommen, aber das ist der einzige fehler, den ich in der prozedur an sich sehe.) wäre mal interessant ansonsten zu wissen, was unten im compiler fenster bei fehler steht.
0

#3 Mitglied ist offline   Noaki 

  • Gruppe: aktive Mitglieder
  • Beiträge: 25
  • Beigetreten: 14. September 05
  • Reputation: 0

geschrieben 12. Dezember 2006 - 21:47

Zitat

wenn du eine stringtofloat konvertierung durchführst und andersrum, kannst du das doch dann nur auf iene als float deklarierte variable schreiben, und nicht auf eine vom typ real, oder?


Doch das geht, sonst käm ja schon ein Compilerfehler.

Zitat

wäre mal interessant ansonsten zu wissen, was unten im compiler fenster bei fehler steht.


Gar nichts <_<
Mein Problem ist nichts syntaktisches, ich gebe mal ein Beispiel:

- Druck auf Taste 6 --> im Display steht 6
- Druck auf TastePlus --> im Display steht weiterhin 6
- Druck auf Taste 3 --> im Display steht 63 (hier sollte jetzt eigentlich 9 stehen)
- Druck auf TastePlus --> im Display steht 69
- Druck auf Taste4 --> im Display steht 694
- Druck auf TastePlus --> im Display steht 763

Es steht nie das drin, was da sein sollte :D
0

#4 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 13. Dezember 2006 - 10:57

das ist total vertrackt...
1.) finde keine intiializiserung von var zwischenergebnis
2.) gebe ich zahlen ein, werden sie einfach an den text angehaengt.
3.) gebe ich plus ein, wird das, was aktuell im display.text steht auf zwischenergebnis addiert und das ergebnis auf display.text geschrieben, ergo kann man gar nicht 'normal' add- und sub'en.

mach dir erst einmal klar, was fuer eine steuerung du eigentlich verwenden willst. die klassische HP-taschenrechnersteuerung? (reverse polish notation) (zahl+enter, zahl+enter, operation in bel. verschachtelung oder die, die man von gewoehlichen taschenrechnern kennt: zahl, operaration, zahl, enter.)

ps: um's normal klar zu machen. zum zeitpunkt der addition kannst du bei 'normalem' taschenrechnerverhalten noch gar nicht wissen, welche zahl der zweite summand ist. beim 'hp'-verhalten schon, dabei musst du aber die zwei summanden zwischenspeichern (und ueber ein kommando wie '=' oder 'enter') vom benutzer trennen lassen.
I'm mó. mo's good twin.
0

#5 Mitglied ist offline   Noaki 

  • Gruppe: aktive Mitglieder
  • Beiträge: 25
  • Beigetreten: 14. September 05
  • Reputation: 0

geschrieben 13. Dezember 2006 - 12:04

Also er sollte so funktionieren, wie ein 'normaler', älterer Taschenrechner:

Ich drücke auf '2' und die '2' steht im Display
Ich drücke auf '+' und die 2 steht noch im Display
Ich drücke auf '3' und die '3' steht im Display
Entweder drücke ich nun '=' und das Ergebnis '5' wird angezeigt, oder ich drücke nochmals auf '+' und es steht '5' im Display, mit dem Unterschied, dass eine weitere Zahl hinzuaddiert werden kann.

Meine Idee war nun, dass ich die Tasten 0-9 und ',' drücken kann und die 1. Zahl im Display erscheint. Dann drücke ich '+' und der Text im Display wird in eine Realzahl umgewandelt und auf das bisherige Zwischenergebnis (anfangs 0) hinzuaddiert. Dann soll der Display gelöscht werden und danach wird das aktuelle Ergebnis (zwischenergebnis) auf dem Display angezeigt und es kann weiter gerechnet werden.

Edit: Ok, ich merke gerade, dass das so gar nicht funktionieren kann, wie ich das gemacht habe ^^ Ich muss mir wohl was anderes überlegen :)

Dieser Beitrag wurde von Noaki bearbeitet: 13. Dezember 2006 - 12:07

0

#6 Mitglied ist offline   dastriebel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 439
  • Beigetreten: 11. August 06
  • Reputation: 1
  • Wohnort:Schweiz, Breitenbach

geschrieben 13. Dezember 2006 - 15:19

Beitrag anzeigenZitat (Noaki: 13.12.2006, 12:04)

Meine Idee war nun, dass ich die Tasten 0-9 und ',' drücken kann und die 1. Zahl im Display erscheint. Dann drücke ich '+' und der Text im Display wird in eine Realzahl umgewandelt und auf das bisherige Zwischenergebnis (anfangs 0) hinzuaddiert. Dann soll der Display gelöscht werden und danach wird das aktuelle Ergebnis (zwischenergebnis) auf dem Display angezeigt und es kann weiter gerechnet werden.
Aber bei der Eingabe einer Zahl, musst Du zuerst prüfen, ob die letzte Eingabe ein Operator war, dann ist die Anzeige zuerst noch zu löschen
0

#7 Mitglied ist offline   K050V4 

  • Gruppe: aktive Mitglieder
  • Beiträge: 788
  • Beigetreten: 13. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Stuttgart
  • Interessen:(X)HTML<br />CSS2+<br />PHP 4/5<br />MySQL 5<br />Symfony 1.2+<br />JavaScript / AJAX<br />jQuery<br />C++<br />C#<br />Java<br />...

geschrieben 29. Dezember 2006 - 01:10

Ich habe früher auch mal ein bischen mit Delphi gespielt...
wie wäre es den wen du eine if-Abfrage einbaust, welches prüft ob schon eine Zahl in display.text vorhanden ist - wen ja ---> addiere bzw sub... wen nein ---> zeige diese zahl in display an :whistling:

Zitat

"In der Welt des Erkennbaren ist die Idee des Guten die höchste." - Platon

Spritify! Easy CSS-Sprite-Generator | Albanisch Deutsch Wörterbuch
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0