Autor Beitrag
Berger3000
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:
ausblenden 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 user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Titel geändert.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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>! :mahn:

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 user defined image-Taste (bzw. für den Inline-Editor, falls im Profil AJAX aktiviert ist, die user defined image-Taste) rechts neben deinem Beitrag benutzt.
Wenn du so eine Berechnung durchführen willst, helfen dir die Funktionen Suche in: Delphi-Forum, Delphi-Library POS und Suche in: Delphi-Forum, Delphi-Library 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 Suche in: Delphi-Forum, Delphi-Library MATHEMATISCH PARSER greifen, das ganze wird dann zum selber schreiben seeehr kompliziert.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Bääääär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Win 98 SE / Win XP / xubuntu Linux / Mac OS 9.2
D6 Enterprise
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
Zahl1:=strtofloat(edit_rechnung.text);
operator:='+'; //Muss je nach Button geändert werden


Wenn man dann auf das '=' klickt, kannst du die Zweite Zahl folgendermassen einlesen:

ausblenden Delphi-Quelltext
1:
Zahl2:=strtofloat(copy(edit_rechnung.text,pos(operator,edit_rechnung.text),length(edit_rechnung.text)));					


und die rechnung ist dann einfach:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 27.02.07 20:46 
Moin!

user profile iconBerger3000 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... :?!?: :roll: [/OT]

user profile iconBerger3000 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... :mrgreen:)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 27.02.07 21:44 
user profile iconNarses hat folgendes geschrieben:
Moin!

user profile iconBerger3000 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 26



BeitragVerfasst: Di 19.06.07 16:31 
user profile iconBenjie 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:

ausblenden Delphi-Quelltext
1:
2:
Zahl1:=strtofloat(edit_rechnung.text);
operator:='+'; //Muss je nach Button geändert werden


Wenn man dann auf das '=' klickt, kannst du die Zweite Zahl folgendermassen einlesen:

ausblenden Delphi-Quelltext
1:
Zahl2:=strtofloat(copy(edit_rechnung.text,pos(operator,edit_rechnung.text),length(edit_rechnung.text)));					


und die rechnung ist dann einfach:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Win 98 SE / Win XP / xubuntu Linux / Mac OS 9.2
D6 Enterprise
BeitragVerfasst: 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:

ausblenden volle Höhe Delphi-Quelltext
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
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

//Die beiden benötigten Variablen
  zahl1,zahl2:real;
  operator:string;

implementation

{$R *.dfm}

procedure TForm1.Button_plusClick(Sender: TObject);
begin
  Zahl1:=strtofloat(edit_rechnung.text);
  operator:='+'; //Operator muss je nach Button geändert werden
  edit_rechnung.Text:=edit_rechnung.text+'+'; //Operator muss je nach Button geändert werden
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 :wink:

Grüsse: Benjie!