Entwickler-Ecke

Sonstiges (Delphi) - Rechentrainer (HA 11 Klasse) Delphi


MCEber - Mo 08.03.10 18:10
Titel: Rechentrainer (HA 11 Klasse) Delphi
Hallo,
ich bin neu hier (und völliger Anfänger) und mir wurde das Forum hier empfohlen.
Vielleicht könnt ihr mir helfen?

Ich soll einen Rechentrainer für Addition erstellen und ich auch einen kleinen Ansatz:
(Ich hoffe es ist nicht falch den Quellcode einfach zu posten)

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

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label6: TLabel;
    Edit3: TEdit;
    Label7: TLabel;
    Button1: TButton;
    Button2: TButton;
    Edit4: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var x,y,z:double;
begin
if x+y=z then edi4.Text:='Richtig'
if x+y (nicht) z edit4.Text='Falch'



end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.Button3Click(Sender: TObject);
Var x,y,z:double;
begin
edit3.Clear;
edit4.Clear;
randomize;
x := random (100+1);
y := random (100+1);
x := StrtoFloat(edit1.Text);
y := StrtoFloat(edit2.Text);

end;

end.

Hier ist noch das Bild vom Interface Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Ich bedanke mich im Voraus :)

Gruß MCEber

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Mo 08.03.10 18:16

Hallo und :welcome: im Delphi-Forum!

Wobei sollen wir dir denn genau helfen? Wo stecken deine Probleme?

bitte markiere deine Quelltext mit den [Delphi]Dein Quelltext[/delphi]-Tags.

lg elundril


MCEber - Mo 08.03.10 18:32

Vielen Dank!
Mein Problem ist das ich einen Error im Momment bekomme wenn ich auf "Neu" drücke das im Edit1.Text Feld nichts (also " ") steht.
Die Beenden Funktion funktioniert, aber bei der Vergleichen Fuktion nicht fuktioniert und ich nicht weis nicht wie ich das anstellen soll.

Gruß MCEber

PS: Danke für den Tipp mit dem Tags.
Werde ich nächstes mal verwenden!


martin300 - Mo 08.03.10 18:38

Hallo,

Button Neu:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button3Click(Sender: TObject);
Var x,y,z:double; // <-- das ist komisch (2)
begin
edit3.Clear;
edit4.Clear;
randomize;
x := random (100+1);
y := random (100+1);
x := StrtoFloat(edit1.Text); // <--- das ist komisch (1)
y := StrtoFloat(edit2.Text);
end;


Bei (1) was willst du da machen?
Bei (2) wo sind die Variablen gültig? Werden sie noch an einer anderen Stelle benötigt? Was passiert mit denen jetzt?

Moderiert von user profile iconNarses: Hinweise im QT als Kommentar markiert.


MCEber - Mo 08.03.10 18:46

Hallo, :)

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:
Bei (1) was willst du da machen?
Hier dachte ich das dieser Befehl die Variable X in Edit1.Text ausgegeben wird (Also die Zufallszahl).

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:
Bei (2) wo sind die Variablen gültig? Werden sie noch an einer anderen Stelle benötigt? Was passiert mit denen jetzt?
Ich glaube ich hätte die Variablen in den Hauptteil schreiben müssen weil ich die Variablen noch an anderen Stellen brauche.

Gruß MCEber

Moderiert von user profile iconNarses: Zitate kenntlich gemacht.


Jakob_Ullmann - Mo 08.03.10 19:31

(2): richtig. Wenn du lokal eine Variable definierst, dann gilt si nur und genau in der Prozedur / Funktion. Aber dann hat sie auch vor allem anderen Vorrang. Wesentlich besser als die globale Definition ist jedoch diese hier:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TForm1 = class(TForm)
    private
      ...
    public
      ...
      x, y, z: Double;
  end;


(1) Bei einer Zuweisung mit := wird in Delphi (und auch in allen anderen Programmiersprachen, die ich kenne) der linken Seite die rechte zugewiesen, nicht anders herum! Beide Versionen sind nämlich nicht gleich:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var
  a, b, c: Integer;
begin
  { Version 1 }
  a := 1;
  b := 5;

  { Zuweisung }
  a := b; // jetzt ist a = b = 5;
  
  (********************************)

  { oder aber: }
  a := 1;
  b := 5;
  { Zuweisung }
  b := a; // jetzt ist b = a = 1;
end;


martin300 - Mo 08.03.10 19:35


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
Var x,y,z:double; <-- (3)
begin
if x+y=z then edi4.Text:='Richtig' <--(4)
if x+y (nicht) z edit4.Text='Falch'
end;


(3): müsstest du eigentlich schon gelöst haben.
(4): wäre mit einer if then else Schleife möglich. siehe:

http://www.delphi-treff.de/sprachen/object-pascal/verzweigungen/


elundril - Mo 08.03.10 19:37

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:

(4): wäre mit einer if then else Schleife möglich.


siehe: http://www.if-schleife.de/

lg elundril


Jakob_Ullmann - Mo 08.03.10 19:41

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:

(4): wäre mit einer if then else Schleife möglich.


Du bist jetzt schon über ein Jahr dabei? Autsch... Die Struktur if-then-else weist nicht die Merkmale einer Schleife auf, nämlich, dass ein bestimmter Code mehrfach ausgeführt wird! Die Tatsache, dass du mit Labels, Gotos und IF-THEN eine schleifenartige Konstruktion machen kannst, ändert daran nichts.


martin300 - Mo 08.03.10 19:49

Also war das doch nicht meine Eigenkreation und es gibt eine Lobby die sich dafür, öh dagegen stark macht. :(


MCEber - Do 11.03.10 01:15

Danke für eure Tipps,
ich werde dann morgen posten was ich eigentlich hätte erstellen wollen (was die HA war) :)

Gruß MCEber


MCEber - Do 11.03.10 15:23

Also,
hier der Quelltext des Rechentrainers:

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

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label6: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  
implementation

{$R *.dfm}
Var a,b,c,d,e:integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
d:=d+1;
label9.Caption:=(inttostr(d));

Button2.Enabled:=true;
edit1.clear;
label2.Caption:=' ';
label4.Caption:=' ';
a:=random(99)+1;
b:=random(99)+1;
label2.caption:=(IntToStr(a));
label4.caption:=(IntToStr(b));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Application.terminate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Button2.Enabled:=false;
     if edit1.text=(inttostr(a+b))
     then label8.Caption:='Die Antwort '+(inttostr(a+b))+' ist richtig!'
        else label8.Caption:='Falsch! Die richtige Antwort ist '+(inttostr(a+b));
end;

end.


Falls jemand interesse an der exe hat kann er mir eine Anfrage senden :)
Gruß MCEber

Edit: aus Dephli Delphi gemacht