Autor Beitrag
Pinkywesen
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 27.10.10 10:00 
Guten Tag liebe delphi-forum.de Member,
Ich habe jetzt angefangen Delphi zu lerne. Habe mir jetzt die ersten Tutorials durchgelesen und bin bin schon ziemlich genervt von den "Hallo Welt!" Programmen. :'D
Zurzeit versuche ich einen Taschenrechner mit den 4 Rechnungsarten zu machen. Leider kriege ich das nicht so einfach hin mit der Auswahl der Rechnungsart. Der Taschenrechner besteht aus 4 RadioButtons für die Rechenarten. Und ein Button um die Rechnung zu lösen. Jetzt möchte ich das wenn einer der RadioButtons gedrückt wird das sich einfach nur eine Variable ändert:
ausblenden Quelltext
1:
2:
3:
procedure TForm1.RadioButtonAdditionClick(Sender: TObject);
begin
rechenoperator:=+;
und dann einfach beim klicken auf den "Gleich" Button benutzt wird:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Gleich1Click(Sender: TObject);
begin
a:=StrToInt(Zahlenfeld1a.Text);
b:=StrToInt(Zahlenfeld1b.Text);
int_ergebnis := a[VARIABLE]b;
Loesung1.Text := FloatToStr(int_ergebnis);

Leider bekomme ich immer ein Fehler. Wie füge ich die Variable korrekt ein?
MaxWurzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Mi 27.10.10 10:13 
Einen String mit dem Inhalt '+' interpretiert Delphi nicht als +-Operator. Du musst also vorher den Wert der Variable mit einer if-Abfrage bestimmen und dementsprechend das Ergebnis berechnen. Du kannst dir den Umweg über die Variable auch sparen und direkt prüfen (am Besten mit case) welcher Button aktiviert (checked) ist.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 27.10.10 10:15 
Hallo und :welcome: im DF!

Leider geht das nicht so wie du das vor hast. Delphi kann von einer Variablen nicht direkt in den Quellcode reinmanipulieren. Aber folgendes würde gehen:

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:
  private
    Rechenoperator: Char; // Ganz oben hinschreiben, das private müsste schon dort stehen

procedure TForm1.RadiobuttonAdditionClick(Sender: TObject);
begin
  rechenoperator := '+';
end;

procedure TForm1.Gleich1Click(Sender: TObject);
  var a, b: integer; // Variablen die du nur in der einen Procedure brauchts, lokal definieren
      int_ergebnis: Double; // das Int vor dem ergebnis ist hier irreführend. ;)
begin
  a := StrToInt(Zahlenfeld1a.Text);
  b := StrToInt(Zahlenfeld1b.Text);
  case Rechenoperator of  //Fallunterscheidung welche Rechenoperation gewählt wurde, kann auch mit if-abfragen realisiert werden
    '+': int_ergebnis := a + b;
    '-': int_ergebnis := a - b;
    '*': int_ergebnis := a * b;
    '/': int_ergebnis := a / b;
  end;
  Loesung1.Text := FloatToStr(int_ergebnis);
end;


So hab ich damals meinen rechner Realisiert, wobei ich keine radiobuttons verwendet habe sondern normale buttons wie beim Windowstaschenrechner. Das nur so nebenbei erwähnt als rechtfertigung warum ich den umweg über die variable genommen habe.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 27.10.10 10:20 
Hallo und :welcome: in der Entwickler-Ecke,

Das geht so nicht. Du kannst eine Integer-Variable setzen, und das z.B. so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.RadioButtonAdditionClick(Sender: TObject);
begin
  rechenoperator := 1;
end;

procedure TForm1.Gleich1Click(Sender: TObject);
begin
a:=StrToInt(Zahlenfeld1a.Text);
b:=StrToInt(Zahlenfeld1b.Text);

case rechenoperator of
  1: int_ergebnis := a + b;
  2: //...
end;
Loesung1.Text := FloatToStr(int_ergebnis);


Oder, für Fortgeschrittene: Du definierst dir eine Variable vom Typ "Funktion"

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:
type TRechenFunktion = function(a,b: Double): Double;
// ...
var rechenfunktion: TRechenFunktion;
// ..:

function Plus(a,b: Double): Double;
begin
  result := a + b;
end;

procedure TForm1.RadiobuttonAdditionClick(Sender: TObject);
begin
  Rechenfunktion := Plus;
end;

procedure TForm1.Gleich1Click(Sender: TObject);
begin
a:=StrToInt(Zahlenfeld1a.Text);
b:=StrToInt(Zahlenfeld1b.Text);

ergebnis := Rechenfunktion(a, b);

// ...

_________________
We are, we were and will not be.
Pinkywesen Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 27.10.10 11:01 
Meine Source sieht jetzt so aus:

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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    RadioAddition: TRadioButton;
    RadioSub: TRadioButton;
    RadioMulti: TRadioButton;
    RadioDiv: TRadioButton;
    Button1: TButton;
    Loesung1: TEdit;
    Zahlenfeld1b: TEdit;
    Zahlenfeld1a: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure RadioAdditionClick(Sender: TObject);
    procedure RadioSubClick(Sender: TObject);
    procedure RadioDivClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure RadioMultiClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  rechenoperator: Char;
  a, b: integer;
      int_ergebnis: Double;

implementation

{$R *.DFM}

procedure TForm1.RadioAdditionClick(Sender: TObject);
begin
rechenoperator := '+';
Label1.caption := '+';
end;

procedure TForm1.RadioSubClick(Sender: TObject);
begin
rechenoperator := '-';
Label1.caption := '-';
end;

procedure TForm1.RadioDivClick(Sender: TObject);
begin
rechenoperator := '/';
Label1.caption := '/';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  a := StrToInt(Zahlenfeld1a.Text);
  b := StrToInt(Zahlenfeld1b.Text);
  case Rechenoperator of  //Fallunterscheidung welche Rechenoperation gewählt wurde, kann auch mit if-abfragen realisiert werden
    '+': int_ergebnis := a + b;
    '-': int_ergebnis := a - b;
    '*': int_ergebnis := a * b;
    '/': int_ergebnis := a / b;
  end;
  Loesung1.Text := FloatToStr(int_ergebnis);
end;

procedure TForm1.RadioMultiClick(Sender: TObject);
begin
    rechenoperator := '*';
Label1.caption := '*';
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
rechenoperator := '+';
Label1.caption := '+';
end;

end.


Ist meiner Meinung für den Anfang ganz ok. Habt ihr noch weiter Vorschläge womit ich weiter machen könnte?

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 27.10.10 11:40 
Ja, so wie ich schon gesagt habe. a, b und int_ergebnis müssen nicht global sein und vor allem, wenn global dann bitte in den private bereich. Außerdem solltest du versuchen Gausis fortgeschrittenen-lösung nachzuvollziehen, da es eigentlich in der art und weise um einiges eleganter und besser ist.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.