Autor Beitrag
Hannoi
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.11.10 11:29 
Hallo Leute,

ich möchte meinem Taschenrechner beibringen mehrere Zahlen zusammen zu rechnen. Ich habe nun einen Teil nun schon programmiert und habe nun leider keine Idee mehr wie ich weiter vorgehen muss

ausblenden 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:
procedure TForm1.sbtn_plusClick(Sender: TObject);
var
zahl1, zahl2, ergebnis: real;
begin
if str_operator = '' then
   begin
    edt_2.Text := edt_1.Text;
    str_operator := '+';
    f_zahl1 := StrToFloat(edt_1.Text);
    edt_1.Text := '';
    btn_punkt.Enabled := true ;
    sbtn_plus.Font.Color := clRed;
    edt_1.SetFocus;
   end
   else
   begin
     str_operator := '+';
     ergebnis := f_zahl1 + zahl2;
     edt_1.Text := FloatToStr(ergebnis);
     sbtn_plus.Font.Color := clRed;

   end;
end;


Das ist der dazugehörige Quelltext. Freue mich über hilfreiche Antworten

Lg Hannoi

Moderiert von user profile iconMartok: Delphi-Tags gesetzt
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Di 09.11.10 12:00 
Hallo user profile iconHannoi,

zuerst möchte ich dich bitten, wenn du Quelltexte diese in Delphi-Tags ein zu schließen, damit sie übersichtlicher werden. Das sähe dann so aus:
ausblenden Quelltext
1:
2:
<div class="syntaxContainer">  <div class="syntaxSelect">    <a class="genmed" style="text-decoration: none" href="javascript:selectAll(62321410)">markieren</a>  </div>  <div class="syntaxTitle genmed">        <a style="text-decoration: none" href="javascript:toggleCode(62321410)">            <span  id="minusFor62321410"><img class="codecollapse crispscaling" align="top" src="./graphics/bbcode/code_hide.png" border="0" alt="ausblenden" title="ausblenden"/></span>            <span style="display: none;" id="plusFor62321410"><img class="codecollapse crispscaling" align="top" src="./graphics/bbcode/code_show.png" border="0" alt="anzeigen" title="anzeigen"/></span>        </a>                <b>Delphi-Quelltext</b>        <span class="copyright" style="display: none" id="hintFor62321410">                       </span>  </div>  <div id="code62321410" class="syntax" style=" ">    <table cellspacing="0" cellpadding="0">      <tr>        <td valign="top" style="text-align: right; padding-right: 3px; border: #DBE4EB solid; border-width: 0px 1px 0px 0px;">          <pre>1:
</pre>        </td>        <td valign="top" style="width: 100%; padding-left: 3px;">          <pre class="sourcecode"><span class="codecomment">{PROTECTTAGf7f6e6f790eb7fcff461fd8ac105a632}</span>          </pre>        </td>      </tr>    </table>  </div></div>


Aber jetzt zu deinem Problem. Ich schätze, du kommst am ehesten da hin wo du hin willst, wenn du das Design deines Taschenrechners änderst. Momentan hast du ja scheinbar zwei Edit Felder und eine Wahlmöglichkeit des Operators. Du solltest ihn eher wie einen echten Taschenrechner aufbauen (ähnlich dem Windows Taschenrechener). Denn das erlaubt es deinem Anwender fortlaufende eingaben zu machen, er muss also nicht das Eingabefeld wechseln und du hast schon mal das erste Problem gelöst, wie gibt der Benutzer seine mehreren Werte ein.

Selber musst du natürlich dann ein wenig aufpassen was eingegeben wird, denn jedes mal, wenn ein Operator eingegeben wird musst du entsprechend reagieren.
Soll beispielsweise diese Aufgabe gerechnet werden:

ausblenden Quelltext
1:
5 + 4 - 2 =					


So muss dein Programm in etwa so etwas machen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Eingabe: 5
Aktion: keine

Eingabe: +
Aktion: Feststellen, das 5 deine Zahl 1 ist (denn es gibt noch keine vorher Eingegebene) und das + der Operator sein soll

Eingabe: 4
Aktion: keine

Eingabe: -
Aktion: Erkennen, dass noch eine + Berechnung nicht beendet ist, daher Feststellen, dass 4 deine Zahl 2 ist. Die Aufgabe 5+9 Lösen und das Ergebnis als neue Zahl 1 speichern, und den Operator auf - Setzen (denn das soll ja deine nächste Rechnung werden).

Eingabe: 2
Aktion: Keine

Eingabe: =
Aktion: Erkennen das du schon eine Zahl 1 hast (9 = das Ergebnis von 5+4) und das die eingegebene 2 die Zahl 2 sein muss. Erkennen das dein Operator - ist 9-2 ausrechnen. Das Ergebnis in Ergebnis speichern.


Wie du siehst besteht der Trick darin, fest zu stellen, ob die Rechnung jetzt beendet ist oder ob sie weiter geht. Wenn sie weiter geht, dann bildest du ein Zwischenergebnis und speicherst es in Zahl 1. In einem zweiten Schritt kannst du dir dann überlegen, wie du das Verfahren erweitern musst damit auch "Punkt vor Strich" beachtet wird. Aber ich schätze, wenn du das hier vorgeschlagene Verfahren umsetzen willst ist das erst einmal genug Herausforderung für einen ersten Schritt.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)