Autor Beitrag
der auenländer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

WIN XP
Delphi 6 PE
BeitragVerfasst: Sa 11.11.06 17:41 
hallo zusammen

auch wenns wahrscheinlich schon 500 mal durchgekaut wurde fänd ichs toll, wenn ich nich nur nen verweis auf die suchfunktion bekäme (aus den dortigen beiträgen wurd ich nämlich auch noich wirklich schlau)sonder ihr mir vll wirklich helfen könntet.

folgendes prblem: ich muss nen tschenrechner programmieren(ein editfeld, 10 zahlknöpfe, 4 rechenartsknöpfe und ein gleich, die üblichen also)jetzt wars keinproblem, das mit den zahlknöpfen hinzubekommen, und auch das der wenn man dierechenarten anklickt das feld erstmal wieder "reinigen" soll war nich das problem. aber wie sag ich dem jetzt, dass der sich die erste zahl merken soll, sich merken soll, welche rechenart er machen soll und dann bei gleich das ergebnis liefert. wie(wo muss ich dem da die variablen zahl1 und zahl2 festlegen??

ich häng einfach mal mein skript an, wäre cool, wenn mir einer von euch nen tipp gebbenkönnte, was ich tun muss, um weiter zu kommen. die ganzen sachen, die ich hinter nem '//' stehen hab sind übrigens alles so versuche, die ich mal nicht weggemacht hab, weil ich absolut nich weiss, was davon vll en bisschen richtigkeit besitzt (nur damits nicht verwirrt, von dem rest könnt aber auch noch ne menge falsch sein)

disp ist übrigens das editfeld

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:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    BtMinus: TButton;
    Bt9: TButton;
    Bt8: TButton;
    BtGeteilt: TButton;
    BtMal: TButton;
    Bt1: TButton;
    BtGleich: TButton;
    BtKomma: TButton;
    Bt5: TButton;
    Bt7: TButton;
    BtPlus: TButton;
    Bt6: TButton;
    Bt3: TButton;
    Bt2: TButton;
    Bt0: TButton;
    Bt4: TButton;
    Disp: TEdit;
    procedure Bt1Click(Sender: TObject);
    procedure Bt2Click(Sender: TObject);
    procedure Bt3Click(Sender: TObject);
    procedure Bt4Click(Sender: TObject);
    procedure Bt5Click(Sender: TObject);
    procedure Bt6Click(Sender: TObject);
    procedure Bt7Click(Sender: TObject);
    procedure Bt8Click(Sender: TObject);
    procedure Bt9Click(Sender: TObject);
    procedure Bt0Click(Sender: TObject);
    procedure BtKommaClick(Sender: TObject);
    procedure BtPlusClick(Sender: TObject);
    procedure DispChange(Sender: TObject);
    procedure BtGleichClick(Sender: TObject);
    procedure BtGeteiltClick(Sender: TObject);
    procedure BtMalClick(Sender: TObject);
    procedure BtMinusClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Bt1Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'1';
  end;

procedure TForm1.Bt2Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'2';
  end;

procedure TForm1.Bt3Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'3';
  end;

procedure TForm1.Bt4Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'4';
  end;

procedure TForm1.Bt5Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'5';
  end;

procedure TForm1.Bt6Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'6';
  end;

procedure TForm1.Bt7Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'7';
  end;

procedure TForm1.Bt8Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'8';
  end;

procedure TForm1.Bt9Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'9';
  end;

procedure TForm1.Bt0Click(Sender: TObject);
  begin
    Disp.Text:=disp.Text+'0';
  end;

procedure TForm1.BtKommaClick(Sender: TObject);
  begin
    Disp.Text:=disp.Text+',';
  end;

procedure TForm1.BtPlusClick(Sender: TObject);
var rechenart:string;
var Zahl1:double;
var Zahl2:double;
  begin
    disp.text:='';
    rechenart:=strTofloat (Disp.text);
     Zahl1:=strTOFloat (disp.Text);
    //Disp:=StrToFloat (Disp.Text);
    Zahl2:= StrToFloat (disp.text);
    //disp.Text:=Zahl1+Zahl2;
  end;

procedure TForm1.DispChange(Sender: TObject);
var Zahl1:double;
var Zahl2:double;
//var Rechenart:char;
//var summe:char;
  begin
    Zahl1:=StrToFloat (disp.Text);
  end;

procedure TForm1.BtGleichClick(Sender: TObject);
var Rechenart:char;
var Zahl1:double;
var Zahl2:double;
begin
//if rechenart ='plus'then Disp.text:=inttostr(zahl1+zahl2);
//if rechenart ='minus'then Disp.text:=inttostr(zahl1-zahl2);
//if rechenart ='geteilt'then Disp.text:=inttostr(zahl1/zahl2);
//if rechenart ='mal'then Disp.text:=inttostr(zahl1*zahl2);


end;

procedure TForm1.BtGeteiltClick(Sender: TObject);
  begin
    disp.text:='';
  end;

procedure TForm1.BtMalClick(Sender: TObject);
  begin
    disp.text:='';
  end;

procedure TForm1.BtMinusClick(Sender: TObject);
  begin
    disp.text:='';
  end;

end.


danke schonmal im vorraus,

jannik

Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 11.11.06 17:51 
Erstmal :welcome: hier im Forum!
Zunächst mal: Nimm bitte statt Zitat-Tags Delphi-Tags ;-), dann wird der Delphi-Code auch als solcher dargestellt und nicht als Zitat...

Zu deinem Problem: Nun ja, was du grundsätzlich erstmal brauchst, ist eine Variable, in die die erste Zahl kommt. Da schreibst du die rein. Gleichzeitig brauchst du auch noch eine für die Operation.
Wenn man dann gleich dückt, dann hast du die Variable mt der ersten Zahl, die Operation in einer weiteren Variable, und den Wert, der aktuell angezeigt wird.

Die Variablen müssen global sein, denn sonst ist der aktuell zugewiesene Wert nur in der Funktion, in der die Variable deklariert ist, vorhanden. Schreib die am besten unter
ausblenden Delphi-Quelltext
1:
2:
private 
{ Private declarations }

hin.

Ansonsten: Stell halt eine direkte Frage dazu, was dir Probleme macht! Ich meine, sicherlich ist es für mich kein Problem, einen Taschenrechner zu programmieren, aber ich weß nicht, warum du nicht weiterkommst... Deshalb weiß ich nicht so recht, was ich jetzt dazu noch sagen soll...
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 11.11.06 17:55 
Hey,

ich hatte das damals so gelöst:

Drückt der Benutzer eine Operatortaste (+, -, *, /, usw.) so wird der erste Wert festleget, in dem ich sage: value1 := StrToFloat(edit.Text);.
Gleichzeitig lege ich nun auch den Operator fest: Bsp.: "operator := '+';".
(Operator vom Typ Char. value1 vom Typ Real)
Anschließend wird dafür gesorgt, dass ein zweiter Wert eingegeben werden kann.

Drückt der User nun auf das Gleichheitszeichen, schauste mit "case operator of" welche Operation durchgeführt werden soll.

Hoffe damit kannst du was anfangen,
grüße marc
Goolix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Sa 11.11.06 18:02 
das waren noch zeiten.

damals hatte uns noch keiner gesagt, dass es auch globale variablen gibt...
wir mussten ernüchternt feststellen, dass es mit prozedur-eigenen vars nicht klappt ;-)

wir hatten damals also noch weitere edits eingebaut mit visible=false; wie umständlich
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 11.11.06 18:04 
Ja, und es soll Leute geben, die ständig visuelle Komponenten zur internen Speicherung missbrauchen, zum Beispiel Memos statt StringLists... Ich kenn da so jemanden...
der auenländer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

WIN XP
Delphi 6 PE
BeitragVerfasst: Sa 11.11.06 21:07 
Danke!!!werd das gleich erstmal ausprobieren!!

und die delphi-tags kommen dann beim nächsten mal auch ;-)

jannik
der auenländer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

WIN XP
Delphi 6 PE
BeitragVerfasst: Sa 11.11.06 21:30 
mir stellt sich grad noch ne andere frage:
Zitat:
Nun ja, was du grundsätzlich erstmal brauchst, ist eine Variable, in die die erste Zahl kommt. Da schreibst du die rein.


wo muss ich die denn festhalten? bei den operatoren? oder im editfeld? oder beim gleich? oder muss ich die immer wieder bei allen neui definieren?
BerTeL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 45

Windowx XP
Delphi 7 Enterprise
BeitragVerfasst: Sa 11.11.06 21:39 
in eine globale variable (oben beschrieben) ...
einfach globzahl := strtoint(edit1.text);


Auf globzahl kannst du dann von überall aus zugreifen. Es reicht wenn es einmal definiert wird (siehe oben).
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1257

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 11.11.06 23:19 
Moin!

Ich verweise mal auf meinen Demo-Taschenrechner mit Quelltext. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
der auenländer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

WIN XP
Delphi 6 PE
BeitragVerfasst: Sa 18.11.06 18:19 
n'abend zusammen, ich bins nochmal
zuersteinmal wollt ich mich nochmal für die vielen tollen hilfen bedanken, der rechner funktioniert!! jetzt steh ich aber vor nem anderen problem...wie krieg ichs hin, das der rechner nur einmal das komma zuläst?

ich hab jetzt ne boolsche variable genommen und diese im formcraete auf false geetzt. in dem befelh für den Kommabutton hab ich dann zuert gesagt, wenn kein komma drin ist soll er das komma setzen, und hab dann abschliessend die boolsche variable auf true gesetz. jetzt lässt der aber insgesamt nur noch ein komma zu, also auch nachdem ich auf einen operator gedrückt habe. kann mir vll einer von euch sagen, wie ichs hinkriege, das er nach einer neuen rechenart auch wieder ein komma zulässt?

hier nochmal kurz der quelltextausschnitt, dann isset vll deutlicher als in der beschreibung jetzt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormCreate(Sender: TObject);
begin
  kommaSchonDrin:=false;  //boolsche variable
end;

procedure TForm1.BtKommaClick(Sender: TObject);
begin
  if not KommaSchonDrin
    then Disp.Text:=Disp.Text + ',';
  kommaschondrin:=true;
end;


danke schonmal,
bis dann,
jannik
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 18.11.06 18:27 
Das ist mit der globalen boolschen Variable ist stuss.
Suche mal hier im Forum nach Suche in der Entwickler-Ecke POS und Suche in der Entwickler-Ecke DELETE ;)
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 18.11.06 18:28 
berechne doch deine variable "kommaSchonDrin" dynamisch :-) z.b.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.BtKommaClick(Sender: TObject);
begin
 if pos(',', disp.text)= 0 then 
  Disp.Text:=Disp.Text + ',';
end;


<HTH>
der auenländer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

WIN XP
Delphi 6 PE
BeitragVerfasst: So 19.11.06 17:41 
@ marc: hm, das mag sein, weiss ich nich, aber das is aufjedenfall vorgabe vom lehrer :(

@ grenzgaenger: wie berechnet man denn etwas dynamisch??

danke,
jannik
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.11.06 18:16 
ganz einfach, schau meinen vorherigen post an...
der auenländer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

WIN XP
Delphi 6 PE
BeitragVerfasst: So 19.11.06 18:39 
ach so, das ist schon alles^^ das sah mir so wenig aus dass ich dachte, dass wäre nur irgendwie en minimaler teil davon :P

also dann nochmal danke!