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



BeitragVerfasst: Mo 08.05.06 09:12 
HI

ich hab den Quellcode von einen Bruchrechen Programm im Netz gefunden und wollte den jetzt ein bisschen umbauen. Zum Beispiel stürzt das Programm ab wenn zwei edit Felder (da werden sonst die Lösungen von Aufgaben rein geschrieben) leer sind. Jetzt wollte ich diesen Fehler beheben indem ich schreib :
Wenn Edit.text leer dann tu nichts ansonsten Rechne :wink:

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

interface

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

type
TfrmBruchrechnen = class(TForm)
lblZ1: TLabel;
lblN1: TLabel;
lblN2: TLabel;
lblZ2: TLabel;
Label5: TLabel;
Label6: TLabel;
edtZ: TEdit;
edtN: TEdit;
btnAufgabe: TButton;
btnPruefen: TButton;
btnAnzeige: TButton;
    Label1: TLabel;
    Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure btnAufgabeClick(Sender: TObject);
procedure btnPruefenClick(Sender: TObject);
procedure btnAnzeigeClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
private
procedure SummeBerechnen(z1,n1,z2,n2: Integer; var zerg,nerg,q: integer);
function ggT(a,b: integer):integer;
function Maximum(z1,z2: integer):integer;
function Minimum(z1,z2: integer):integer;
public
{ Public-Deklarationen }
end;

var
frmBruchrechnen: TfrmBruchrechnen;
z1,z2,zerg,n1,n2,nerg,q,gg: integer;
implementation

{$R *.DFM}

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

procedure TfrmBruchrechnen.btnAufgabeClick(Sender: TObject);
begin
z1:=random(10)+1;
z2:=random(10)+1;
n1:=random(10)+1;
n2:=random(10)+1;

lblZ1.caption:=IntToStr(z1);
lblZ2.caption:=IntToStr(z2);
lblN1.caption:=IntToStr(n1);
lblN2.caption:=IntToStr(n2);
end;

procedure TfrmBruchrechnen.SummeBerechnen(z1,n1,z2,n2: Integer; var zerg,nerg,q: integer);
begin
If NOT (edtN.Text = '')and  (edtz.Text = ''then
zerg:=z1*n2+z2*n1;
nerg:=n1*n2;
q:=ggT(zerg,nerg);
 zerg:=zerg div q;
 nerg:=nerg div q;
end;

function TfrmBruchrechnen.Maximum(z1,z2: integer):integer;
begin
if z1>z2 then result:=z1 else result:=z2;
end;

function TfrmBruchrechnen.Minimum(z1,z2: integer):integer;
begin
if z1<z2 then result:=z1 else result:=z2;
end;

function TfrmBruchrechnen.ggT(a,b: integer):integer;
var
c,max,min: integer;
begin
if a<=b then begin
c:=a;
a:=b;
b:=c;
end;
while b<>0 do begin
max:=Maximum(a,b);
min:=Minimum(a,b);
a:=max - min;
b:=min;
end;
result:=a;
//gg := result;
end;



procedure TfrmBruchrechnen.btnPruefenClick(Sender: TObject);
var
zu, nu: integer;
begin
zerg:=0;
nerg:=0;
q:=0;
SummeBerechnen(z1,n1,z2,n2,zerg,nerg,q);
zu:=StrtoInt(edtZ.text);
nu:=StrtoInt(edtN.text);
if (zerg=zu) and (nerg=nu) then Showmessage('Ergebnis richtig!')
else if (zerg <> zu) and (nerg  <> nu) then Showmessage ('Leider falsch') ;
//else showmessage ('Bitte Ergebnis eintragen');
end;

procedure TfrmBruchrechnen.btnAnzeigeClick(Sender: TObject);
begin
zerg:=0;
nerg:=0;
q:=0;
SummeBerechnen(z1,n1,z2,n2,zerg,nerg,q);
edtZ.text:=IntToStr(zerg);
edtN.text:=IntToStr(nerg);
end;

procedure TfrmBruchrechnen.Button1Click(Sender: TObject);
begin
label1.Caption := InttOSTR(ggT(zerg,nerg));//IntToStr(gg); //ggt(zerg,erg
end;

end.



Der genau Bereich um den es geht ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TfrmBruchrechnen.SummeBerechnen(z1,n1,z2,n2: Integer; var zerg,nerg,q: integer);
begin
If NOT (edtN.Text = '')and  (edtz.Text = ''then
zerg:=z1*n2+z2*n1;
nerg:=n1*n2;
q:=ggT(zerg,nerg);
 zerg:=zerg div q;
 nerg:=nerg div q;
end;


Woran kann das liegen das das Programm trozdem abstürzt?

Danke schon mal im vorraus
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 08.05.06 09:25 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TfrmBruchrechnen.SummeBerechnen(z1,n1,z2,n2: Integer; var zerg,nerg,q: integer);
begin
  If NOT ((edtN.Text = ''or (edtz.Text = '')) then
  begin
    zerg:=z1*n2+z2*n1;
    nerg:=n1*n2;
    q:=ggT(zerg,nerg);
    zerg:=zerg div q;
    nerg:=nerg div q;
  end;
end;
Jetstream
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222



BeitragVerfasst: Mo 08.05.06 10:31 
jasucul hat recht.
so wie du est geschrieben hattest, bezieht sich das 'NOT' nur auf die erste Klammer.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 08.05.06 10:43 
Wenn wir dann schon Erläuterungen geben:
Das "and" war auch falsch und der Bedingungsblock hatte kein "begin..end".
Außerdem ist nicht klar, was mit den Rückgabewerten passieren soll, wenn die Bedingung nicht erfüllt ist. Es fehlt theoretisch das "else".

Und überhaupt werde ich in der Mitte mit einem "o" geschrieben. :motz: :zwinker:
Leftout Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 08.05.06 17:36 
danke

läuft prima... ich hab wohl noch was geändert weil sonst wenn man zwei mal klickt q gleich null ist und man bekanntlich nicht durch Null teilen darf.