| Autor |
Beitrag |
Berger3000
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 27.02.07 17:03
Hoffe bin hier richtig im Forum. Ich bin gerade daran in der Schule einen Taschenrechner mit allmöglichen Funktionen zu programmieren. Mein Taschenrechner besteht aus einem Editfenster und allerlei Buttons. Dabei hab ich es aber nicht so gemacht, dass man die Zahlen mit der Tastatur in das Editfenster eingibt, sondern auch mit den Buttons. Beispiel für die 2: Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button2Click(Sender: TObject); begin edit1.text := edit1.Text + '2'; end; | Ich wollte Fragen ob es eine Möglichkeit gibt, ob das was im Editfenster steht, direkt ausgerechnet werden kann, indem ich einfach auf einen Button(der Button wäre "=")drücke. Als Beispiel: Ich drücke den Button "2" dann Button "+" und dann Button "4". Im Editfenster steht jetz "2+4". Ich möchte, dass er dies mit einen einfachen Buttonklick direkt ausrechnet und das Ergebnis im Editfenster wieder ausgibt. Hoffe ihr könnt mir helfen, würde mich sehr freuen. Moderiert von Gausi: Delphi-Tags hinzugefügtModeriert von Christian S.: Titel geändert.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 27.02.07 17:08
Hi!
Das Delphiforum hat eine geniale Funktion, die deinen Quellcode wunderschön formatiert ausgibt, mit Syntaxhighlighting, fettgedruckten Schlüsselwörtern und sämtlichen Absätzen, die in deinem Code sind. Diese Funktion lässt sich einfach nutzen, in dem du deinen Code mit Delphi-Tags umschließt, etwa so: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG14fa1e8ecacceb3edf220c20eb0fc9c1}</span></span>!
Auf diese Weise ersparst du unseren lieben Mods viel Arbeit und ausserdem werden dir die anderen Delphianer gerner helfen, zumal dein Code wesentlich leserlicher ist!
Bitte ändere das doch einfach, in dem du die  -Taste (bzw. für den Inline-Editor, falls im Profil AJAX aktiviert ist, die  -Taste) rechts neben deinem Beitrag benutzt.
Wenn du so eine Berechnung durchführen willst, helfen dir die Funktionen POS und COPY um an die Zahlen zu kommen, bzw auf das Rechenzeichen zu prüfen. Wenn du kompliziertere Ausdrücke berechnen willst, musst du wohl zu einem MATHEMATISCH PARSER greifen, das ganze wird dann zum selber schreiben seeehr kompliziert.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Bääääär
      
Beiträge: 117
|
Verfasst: Di 27.02.07 18:29
du musst eben eine art eigenen script erfinden. Im prinzip nimmst du den string, der nun im edit steht und nimmst ihn auseinander. aber ich glaube, wenn ihr einen taschenrechner macht, dann seid ihr noch am anfang, oder?
also ich würde mich nicht an eine solche aufgabe ranwagen, es ist einfach eine höllische arbeit.
|
|
Berger3000 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 27.02.07 19:20
Ähm danke erstmal für die schnellen Antworten.
Ich habs mit Delphi nicht wirklich drauf(hab gedacht das wird leichter). Meine Lehrerin in Informatik hat es selber nich drauf und kann mir nie weiterhelfen.
Könntet ihr mir bitte mit ein paar konkreteren Antworten helfen, einen Quellcode vielleicht.
|
|
Bääääär
      
Beiträge: 117
|
Verfasst: Di 27.02.07 19:47
also sagen wirs mal so:
Quellcode hilft dir nix, wenn du's nicht verstanden hast. Und wenn du noch ganz am anfang bist: Ich programmiere hobby-mäßig seit 2 jahren und ich würde mich nicht da ranwagen. (es sei denn man lässt klammern und weitere operatoren aus der zu berechnenden formel raus)
|
|
Benjie
      
Beiträge: 55
Win 98 SE / Win XP / xubuntu Linux / Mac OS 9.2
D6 Enterprise
|
Verfasst: Di 27.02.07 20:13
Hey!
Du könntest theoretisch ja auch zwei Variablen machen:
Zahl1, Zahl: real;
Dann brauchst du noch die Variable Operator:
Operator:string;
und wenn man auf des '+' klickt, schreibst du die 1. zahl, dass heisst, das was schon im editfeld ist, in ihre variable und bestimmst den operator:
Delphi-Quelltext 1: 2:
| Zahl1:=strtofloat(edit_rechnung.text); operator:='+'; |
Wenn man dann auf das '=' klickt, kannst du die Zweite Zahl folgendermassen einlesen:
Delphi-Quelltext 1:
| Zahl2:=strtofloat(copy(edit_rechnung.text,pos(operator,edit_rechnung.text),length(edit_rechnung.text))); |
und die rechnung ist dann einfach:
Delphi-Quelltext 1: 2: 3: 4:
| if operator = '+' then edit_rechnung.text:=floattostr(zahl1+zahl2); if operator = '-' then edit_rechnung.text:=floattostr(zahl1-zahl2); if operator = '*' then edit_rechnung.text:=floattostr(zahl1+zahl2); if operator = '/' then edit_rechnung.text:=floattostr(zahl1/zahl2); |
MfG, Benjie
|
|
Berger3000 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 27.02.07 20:40
Hey danke Mann, hab das mal getestet und es funktioniert. So lass ich das.
Rechtherzlichen Dank, du bist mein Lebensretter.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 27.02.07 20:46
Moin!
Berger3000 hat folgendes geschrieben: | | Ich habs mit Delphi nicht wirklich drauf(hab gedacht das wird leichter). Meine Lehrerin in Informatik hat es selber nich drauf und kann mir nie weiterhelfen. |
[OT]Komisch, es scheint ganz einfach keine Informatik-Lehrer zu geben, die überhaupt irgendwas können, ausser Schnürsenkel zubinden...  [/OT]
Berger3000 hat folgendes geschrieben: | | Könntet ihr mir bitte mit ein paar konkreteren Antworten helfen, einen Quellcode vielleicht. |
Falls du mal einen ganz anderen Ansatz sehen möchtest, dann schau mal hier hin.  (und versuch besser nicht, das als deinen Code auszugeben, das dürfte auffallen...  )
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 27.02.07 21:44
Narses hat folgendes geschrieben: | Moin!
Berger3000 hat folgendes geschrieben: | | Ich habs mit Delphi nicht wirklich drauf(hab gedacht das wird leichter). Meine Lehrerin in Informatik hat es selber nich drauf und kann mir nie weiterhelfen. |
[OT]Komisch, es scheint ganz einfach keine Informatik-Lehrer zu geben, die überhaupt irgendwas können, ausser Schnürsenkel zubinden...[/OT] |
Es gibt einige wenige, die Informatik überhaupt studiert haben. Mein Ex-Lehrer zum Beispiel hat vermutlich mal Delphi für Kids gelesen, was seine Qualifikation ausmacht. Er ist eigentlich Erdkundelehrer.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
julian2304
      
Beiträge: 26
|
Verfasst: Di 19.06.07 16:31
Benjie hat folgendes geschrieben: | Hey!
Du könntest theoretisch ja auch zwei Variablen machen:
Zahl1, Zahl: real;
Dann brauchst du noch die Variable Operator:
Operator:string;
und wenn man auf des '+' klickt, schreibst du die 1. zahl, dass heisst, das was schon im editfeld ist, in ihre variable und bestimmst den operator:
Delphi-Quelltext 1: 2:
| Zahl1:=strtofloat(edit_rechnung.text); operator:='+'; |
Wenn man dann auf das '=' klickt, kannst du die Zweite Zahl folgendermassen einlesen:
Delphi-Quelltext 1:
| Zahl2:=strtofloat(copy(edit_rechnung.text,pos(operator,edit_rechnung.text),length(edit_rechnung.text))); |
und die rechnung ist dann einfach:
Delphi-Quelltext 1: 2: 3: 4:
| if operator = '+' then edit_rechnung.text:=floattostr(zahl1+zahl2); if operator = '-' then edit_rechnung.text:=floattostr(zahl1-zahl2); if operator = '*' then edit_rechnung.text:=floattostr(zahl1+zahl2); if operator = '/' then edit_rechnung.text:=floattostr(zahl1/zahl2); |
MfG, Benjie |
mmhhh das hab ich irgendwie noch nich richtig vertsanden:
ist bei dir zahl1 und zahl2 die beiden zahlen, die man eingibt?
und was ist edit_Rechnung? ist das das editfenster für das rechenzeichen oder wie?
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Di 19.06.07 17:55
ist zwar noch beta aber für deine Belange sollte es reichen. Mein Taschenrechner RAFX.
myfunction:=parsetotree(edit1.text);//myfunction:TFunction
myconst:=myfunction.evaluate;//myconst:TConstant;
edit1.text:=myconst.tostring;
|
|
Benjie
      
Beiträge: 55
Win 98 SE / Win XP / xubuntu Linux / Mac OS 9.2
D6 Enterprise
|
Verfasst: Di 19.06.07 18:13
Hallo,
Ja, in den beiden Variablen legst du die Zahlen ab.
Edit_rechnung ist das edit-"fenster" (eigentlich feld) in dem du die GANZE RECHNUNG eingibst. Also:
im edit_rechnung steht: 15+27 (das gibst du ja mit Hilfe de Buttons ein)
dann drückst du den "="-Button und voilá: im edit_rechnung steht nun die Rechnung inkl. Resultat: 15+27=42.
Ich habe den Code noch einmal ein Bissle geändert:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button_plus: TButton; edit_rechnung: TEdit; Button_Gleich: TButton; procedure Button_plusClick(Sender: TObject); procedure Button_GleichClick(Sender: TObject); private public end;
var Form1: TForm1;
zahl1,zahl2:real; operator:string;
implementation
{$R *.dfm}
procedure TForm1.Button_plusClick(Sender: TObject); begin Zahl1:=strtofloat(edit_rechnung.text); operator:='+'; edit_rechnung.Text:=edit_rechnung.text+'+'; end;
procedure TForm1.Button_GleichClick(Sender: TObject); begin Zahl2:=strtofloat(copy(edit_rechnung.text,pos(operator,edit_rechnung.text),length(edit_rechnung.text))); if operator = '+' then edit_rechnung.text:=edit_rechnung.text+'='+floattostr(zahl1+zahl2); if operator = '-' then edit_rechnung.text:=edit_rechnung.text+'='+floattostr(zahl1-zahl2); if operator = '*' then edit_rechnung.text:=edit_rechnung.text+'='+floattostr(zahl1+zahl2); if operator = '/' then edit_rechnung.text:=edit_rechnung.text+'='+floattostr(zahl1/zahl2); end;
end. |
Hoffentlich hilft das
Grüsse: Benjie!
|
|
|