Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit Rechenprogramm!!


24karatboy - Di 26.06.07 10:03
Titel: Problem mit Rechenprogramm!!
Guten Morgen!

ich habe nen taschenrechner programmiert mit einem edit und vielen buttons +,-,= etc.

jetzt möchte ich z.B wenn man im ersten edit 15 eingegeben hat das er das in nen hilfserg speichert und wenn ich dann auf + drücke und eine nächste zahl eingebe und dann auf gleich drücke das der dann macht


Delphi-Quelltext
1:
edit2.Text:=hilfserg+' + '+edit1.text;                    


wenn ich dann aber weiter rechne sagen wir mal ich hab vorher 55+12 gemacht dann steht in edit2 55 + 12 und in edit1 67 nach dem ich auf gleich gedrückt habe drücke ich jetzt wieder auf plus wird 67 in hilferg gespeichert und wenn ich dann 20 eingebe und auf = drücke steht in edit2 67 + 20 was ich aber eigentlich wollte:

es soll einstatt erstmal 55 + 12 und dann 67 + 20 soll da drinne stehen 55 + 12 + 20

jemand in irgendeiner weisse nen paar denkanstösse ?

ps.: konnte heute nicht schlafen weil mir dieses problem denn kopf zerstört hat ;)


LowSkills - Di 26.06.07 10:16

[edit]
Ich hornochse, dass steht ja schon so da... :mrgreen:
[/edit]

Lass dir doch nen string übergeben. So als zusatz.
da steht dann halt der "Rechenweg" drin..


Delphi-Quelltext
1:
2:
3:
4:
var Rechenweg : string;
begin
Rechenweg:= Rechenweg+' + '+IntToStr(Edit1.Text);
end;


So kannste denk ich mal den Rechenweg anzeigen lassen, falls das das ist was du willst.


FiceGoesDelphi - Di 26.06.07 10:19

Du sagst ihm er soll bei drücken auf Plus den Inhalt von Edit1 ins Hilfserg reinspeichern.
Du gibst das Ergebnis aber auch in Edit1 wieder.
Das kann dann nicht funktionieren!
Gib das Ergebniss doch in einem anderen Edit wieder. Vllt hilft dir das!
Sry habe hier gerade viel zu tun und kann mich daher nicht tiefergehend mit deinem problem auseinander setzen!


Narses - Di 26.06.07 10:20

Moin!

Schau mal hier [http://www.delphi-forum.de/viewtopic.php?p=398242#398242], da ist der Taschenrechner mal ganz anders aufgezogen; vielleicht ist das ja was für dich. ;)

cu
Narses


LowSkills - Di 26.06.07 10:32

neuer anlauf... :mrgreen:


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:
var Rechenweg : string;
    Ergebnis, Eingabe: integer;
begin
    //erstes Mal BT drücken
    if not Edit1.Text = '' then
      begin
        Zahl:=StrToInt(Edit1.Text);
        Rechenweg:=IntToStr(Zahl);
        Edit1.clear;
      end
    else
      showmessage('Sie sollten vielleicht erst eine Zahl eingeben, bevor Sie rechnen wollen...');


    if not Edit1.Text = '' then
      begin
       //du gibts die zu addierende Zahl ein, drückst BT zum zweiten mal...
         Eingabe:=StrToInt(Edit1.Text);
         Zahl:=Zahl+StrToInt(Edit1.Text);
         Edit1.Text:=StrToInt(Zahl);
         //gibt in edit1. das ergebnis aus (eine Zahl)
         Rechenweg:=Rechenweg+' + '+inttostr(Eingabe);
         Edit2.Text:=Rechenweg;
         //in Edit2. steht der Rechenweg
      end
    else
      ShowMessage('Bitte geben Sie eine Zahl ein');
end;


trägst du jetzt 1 in ed1 ein, wird Zahl1, ed1 wird geleert, zweite eingabe wird erwartet.
gibts du dann in ed1 5 ein, ist zahl = 6 und wird in ed1 so ausgegeben. In ed2 steht dann der Rechenweg, nähmlich "1 + 5"

Müsste so funktionieren.


24karatboy - Di 26.06.07 10:35

ähm sorry aber bis jetzt haben mir die antworten noch nicht wirklich geholfen ich habs auch mal probiert in dem ich direkt die zahl beim + übergeben habe aber war auch nicht so wie ich mir das vorgestellt habe.

plus drücken:

edit2.text:=edit2.text+' + '+edit1.text

aber ich meine das hat nicht das richtige ergebnis erzielt

und noch ein edit möchte ich eher weniger weil dann wird alles ziemlich unübersichtlich

mfg


24karatboy - Di 26.06.07 10:39

ich stelle euch mal meinen quellcode und die exe hier rein ich bitte um feedback


LowSkills - Di 26.06.07 10:47

Gibts da auch ein Handbuch zu?

Edit1 ist oben, nehm ich mal an. Da trage ich "1" ein, drücke Plus, Meldung: Sie müssen schon was eingeben"...
Edit2 ist readOnly?

Ich hab es also noch nicht mal bis 1 + 1 gebracht... :?:


24karatboy - Di 26.06.07 10:49

das obere edit ist edit2 und es ist nicht zur eingabe gedacht nur das edit1 und da ist atm nur ne eingabe über die buttons möglich


LowSkills - Di 26.06.07 10:57

achso *schäm* ;)

OK, das bringt schonmal klarheit.

Kannste hier nur mal den Auszug posten, der für Edit 2 zuständig ist? (+ varibalen)
Hab hier nähmlich weder rar noch delphi...

Dann kann ich dir u. U. helfen.

mfG


24karatboy - Di 26.06.07 11:03

ich weiss nicht ob ich das richtig verstanden habe aber ich poste dir mal alles was mit edit2 zutun hat ;) aber nur pseudocode bzw. schon delphi code aber einfach an einander gereiht ohne ordnung


Delphi-Quelltext
1:
2:
3:
hilfserg:=edit1.Text; // passiert wenn man auf plus drückt weiter bin ich noch nicht

edit2.Text:=edit2.text+hilfserg+' + '+edit1.text; // passiert wenn man auf gleich drückt


mfg


Tilo - Di 26.06.07 11:04

Den Wert aus dem Edit nicht in einmen string abspeichern, sondern in eine Zahl, z.B. Real

Delphi-Quelltext
1:
hilfzahl=strtofloat(edit.text)                    


Beim rechen so vorgehen:


Delphi-Quelltext
1:
2:
3:
hilfzahl2:=strtofloat(edit.text);
erg:=hilfzahl+hilfzahl2;
ausgabedit.text:=floattostr(erg);


24karatboy - Di 26.06.07 11:07

tilo danke das du dich bemüht hast mir zu helfen aber die rechnungen funzen wunderbar geh mal nach oben und les bitte einmal evtl. weisste dann besser wo das problem liegt. danke


mfg


LowSkills - Di 26.06.07 11:21


Delphi-Quelltext
1:
2:
//lass an dieser Stelle mal '+hilfserg+' raus
edit2.Text:=edit2.text+hilfserg+' + '+edit1.text;

also so:

Delphi-Quelltext
1:
edit2.Text:=edit2.text' + '+edit1.text;                    


Das hilfserg. Hat ja mit dem Rechenweg (den du ja wohl sehen willst) nichts zu tun.


24karatboy - Di 26.06.07 11:26

im hilfserg wird ja die zuerst eingegebene zahl gespeichert und in edit1.text steht ja die 2. zahl wenn man auf = drückt.

und ich will halt in edit2.text sehen was ich gerechnet habe und wenn ich das hilfserg weg lasse dann fehlt mir ja die erste zahl


LowSkills - Di 26.06.07 11:58

OK, nochmal ein schuss ins blaue:

Ich gebe 2 ein, drücke +, geb nochmal 2 ein, in ed1 steht das ergebnis, =4, das zugleich als hilfserg übergeben wird. In ed2 steht 2 + 2. Bis dahin ist ja alles soweit gut.

Dann drücke ich nochmal + und gebe 5 ein, das ergebnis wird richtigerweise als 9 ermittelt. in ed2 steht jetzt 2 + 24 + 5.

Das heist das das hilfsergebnis überflüssigerweise in deinem Rechenweg erscheint, oder nicht?

Wenn ich 2 + 2 rechne, ist hilfserg = 4, ed1=4, ed2 = 2 + 2.
Dann rechne ich + 5, im ed2 soll aber nicht das ergebnis, sondern der rechenweg stehen.

So wie ich das sehe, MUSST du das hilfserg. rausnehmen. Nur so kommst du zu ed2 = 2 + 2 + 5...


24karatboy - Di 26.06.07 12:09

schon ein bisschen näher aber noch nicht ganz

noch einmal das prinzip so wie du das gesagt hast habs gerade mal probiert steht wenn ich 2+5 rechne +5 im ed2 es soll ja 2 + 5 dort stehen

wenn ich ne zahl eingebe und auf + drücke dann wird das was in edit1 steht als string an hilfserg weitergegeben und dann gebe ich ne 2. zahl ein und drücke auf gleich und dann soll der die 2. zahl anhängen und vorher gucken welche operation gewählt wurde das heisst wenn vorher + gedrückt wurde sollte jetzt

hilferg:=2; edit1.text:=5

edit2.text:=hilferg+' + '+edit1.text;

edit2.text:='2'+' + '+'5';

evtl. ist es dir jetzt deutlicher geworden

mfg


ZeitGeist87 - Di 26.06.07 12:20

Was ist denn so kompliziert??


Delphi-Quelltext
1:
2:
 //Bei jeder gedrückten Taste fügst du den Wert in edit2 ein
 edit2.text:= edit2.text + {Wert gedrückte Taste (0..9,+,-,*,/)}


LG
Stefan


24karatboy - Di 26.06.07 12:25

aber echt ? wieso nicht so einfach ^^ und ich werkel hier rum und schaue wie ich das machen könnte ...


danke

mfg


LowSkills - Di 26.06.07 13:12

Danke Zeitgeist, jetzt hast du mir den Auftritt vermasselt ;)

BTW: Du hast bei dem Rechner so ne Uhr drin, jetzt frag ich mal was:
Wie geht das?

:mrgreen:

Ach ja: Schön, dass es jetzt funzt.

mfG


24karatboy - Di 26.06.07 13:22

du legste nen timer auf die form und nen label

und dann machste im OnTimer ereignis des timers time.caption:=FormatTime('hh:nn:ss', now);

dann bestimmt der die jetzige zeit und lässt denn dann laufen durch den timer

ja und das interval musste halt auf 1000ms setzen für eine sekunde


ZeitGeist87 - Di 26.06.07 13:32

Die Funktion heisst FormatDateTime()....

Ist dein Problem mit dem Rechenweg jetzt gelöst oder nicht?

Umanandaspinna kannst du im Off-Topic :P

LG
Stefan


24karatboy - Di 26.06.07 13:36

du hast recht zeitgeist und was kann ich im off topic ?

das problem mit dem rechenweg hab ich gelöst wo kann ich das prog denn am besten mal rein setzen um feedback zu bekommen ?