![]() |
Brüche kürzen- wieder einmal
Hallo, ich bin hier gerade am verzweifeln...
Ich habe einen P-Q Formel Rechner geschrieben, der auch automatisch die eingegebenen Brüche mitkürzen soll.
Delphi-Quellcode:
ich schätze mal, das müsste soweit richtig sein, allerding markiert er mir die erste Zeile, nach dem "edit1." und sagt "undefinierter Bezeichner "edit1"". Ich schätze mal das ist ein ganz banaler Fehler, aber ich komme gerade echt net drauf -_- :wall:
procedure TForm1.Button1Click(Sender: TObject);
var z,n,x1,x2,a,p,px,p2,q,disk,p5,e: real; begin a:= strtofloat(edit1.text) / strtofloat(edit2.text); px:= strtofloat(edit3.text) / strtofloat(edit4.text); p:=px / a; q:= (strtofloat(edit5.text) / strtofloat(edit6.text))/a; p2:=p / 2; disk:=sqr(p2) -q; if disk<0 then begin edit7.text:=''; edit8.text:=''; edit9.text:='Keine Lösung' end else if disk>0 then begin edit9.text:='Zwei Lösungen'; x1:=-p/2+sqrt(disk); x1:=round(x1 * 100) / 100 ; x2:=p/2+sqrt(disk); x2:=round(x2 * 100) / 100 ; edit7.text:=''+floattostr(x1); edit8.text:=''+floattostr(x2); end else if disk=0 then begin edit9.text:='Eine Lösungen'; e:=-p/2; x1:=e; x1:=round(x1 * 100) / 100; edit7.text:=''+floattostr (x1); edit8.text:=''; end; end; var z,n:real; begin z:=strtoint(edit1.text); //hier ist der Fehler- nur wo? n:=strtoint(edit2.text); kuerze(z,n,z1,n1); edit1.text:=inttostr(z1); edit2.text:=inttostr(n1); end; end; end; Procedure kuerze(a,b:integer;var c,d:integer); var teiler:integer; begin teiler:=a; while (a mod teiler <> 0) or (b mod teiler <>0) do teiler:=teiler-1; c:=a div teiler; d:=b div teiler; end; Danke schonmal... |
Re: Brüche kürzen- wieder einmal
form1.edit1 ;)
|
Re: Brüche kürzen- wieder einmal
:wall: Dankeschön :)
Delphi-Quellcode:
selbes Programm, anderes Problem:Inkompatible Typen (siehe Oben)- was muss ich tuen???
...
else if disk=0 then begin edit9.text:='Eine Lösungen'; e:=-p/2; x1:=e; x1:=round(x1 * 100) / 100; edit7.text:=''+floattostr (x1); edit8.text:=''; end; end; var z,n:real; begin z:=strtofloat (form1.edit1.text); n:=strtofloat(form1.edit2.text); tform1.kuerze (z,n,z1,n1); // inkompatible Typen: Integer und real edit1.text:=inttostr(z1); edit2.text:=inttostr(n1); end; end; end; Procedure TForm1.kuerze(a,b:integer;var c,d:integer); var teiler:real; begin teiler:=a; while (a mod teiler <> 0) or (b mod teiler <>0) do teiler:=teiler-1; c:=a div teiler; d:=b div teiler; |
Re: Brüche kürzen- wieder einmal
Du hast die Variable z als Real deklariert, allerdings werden in der Procedure TForm1.Kuerze Integer-Werte verlangt. Ich denke, dass hier dein Fehler liegt.
|
Re: Brüche kürzen- wieder einmal
so siets momentan aus- aber immernoch das selbe Prob!?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit7: TEdit; Edit8: TEdit; Label5: TLabel; Label6: TLabel; Button1: TButton; Edit9: TEdit; Label7: TLabel; Label8: TLabel; Label9: TLabel; CheckBox1: TCheckBox; procedure Button1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); Procedure kuerze(a,b:integer;var c,d:integer); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var z,n,x1,x2,a,p,px,p2,q,disk,p5,e: real; begin a:= strtofloat(edit1.text) / strtofloat(edit2.text); px:= strtofloat(edit3.text) / strtofloat(edit4.text); p:=px / a; q:= (strtofloat(edit5.text) / strtofloat(edit6.text))/a; p2:=p / 2; disk:=sqr(p2) -q; if disk<0 then begin edit7.text:=''; edit8.text:=''; edit9.text:='Keine Lösung' end else if disk>0 then begin edit9.text:='Zwei Lösungen'; x1:=-p/2+sqrt(disk); x1:=round(x1 * 100) / 100 ; x2:=p/2+sqrt(disk); x2:=round(x2 * 100) / 100 ; edit7.text:=''+floattostr(x1); edit8.text:=''+floattostr(x2); end else if disk=0 then begin edit9.text:='Eine Lösungen'; e:=-p/2; x1:=e; x1:=round(x1 * 100) / 100; edit7.text:=''+floattostr (x1); edit8.text:=''; end; end; var z,n:real; begin z:=strtofloat (form1.edit1.text); n:=strtofloat(form1.edit2.text); tform1.kuerze (z,n,z1,n1); edit1.text:=inttostr(z1); edit2.text:=inttostr(n1); end; end; end; Procedure TForm1.kuerze(a,b:real;var c,d:real); var teiler:real; begin teiler:=a; while (a mod teiler <> 0) or (b mod teiler <>0) do teiler:=teiler-1; c:=a div teiler; d:=b div teiler; end; |
Re: Brüche kürzen- wieder einmal
Du musst die Deklaration logischerweise auch ändern, nicht nur den Implementierungsteil deiner Methode.
|
Re: Brüche kürzen- wieder einmal
Delphi-Quellcode:
THX!
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit7: TEdit; Edit8: TEdit; Label5: TLabel; Label6: TLabel; Button1: TButton; Edit9: TEdit; Label7: TLabel; Label8: TLabel; Label9: TLabel; CheckBox1: TCheckBox; procedure Button1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure FormCreate(Sender: TObject); Procedure kuerze(a,b:real;var c,d:real); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var z,n,x1,x2,a,p,px,p2,q,disk,p5,e: real; begin a:= strtofloat(edit1.text) / strtofloat(edit2.text); px:= strtofloat(edit3.text) / strtofloat(edit4.text); p:=px / a; q:= (strtofloat(edit5.text) / strtofloat(edit6.text))/a; p2:=p / 2; disk:=sqr(p2) -q; if disk<0 then begin edit7.text:=''; edit8.text:=''; edit9.text:='Keine Lösung' end else if disk>0 then begin edit9.text:='Zwei Lösungen'; x1:=-p/2+sqrt(disk); x1:=round(x1 * 100) / 100 ; x2:=p/2+sqrt(disk); x2:=round(x2 * 100) / 100 ; edit7.text:=''+floattostr(x1); edit8.text:=''+floattostr(x2); end else if disk=0 then begin edit9.text:='Eine Lösungen'; e:=-p/2; x1:=e; x1:=round(x1 * 100) / 100; edit7.text:=''+floattostr (x1); edit8.text:=''; end; end; var z,z1,n,n1:real; begin z:=strtofloat (form1.edit1.text); n:=strtofloat(form1.edit2.text); tform1.kuerze (z,n,z1,n1); //[Fehler] Unit1.pas(88): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt edit1.text:=inttostr(z1); edit2.text:=inttostr(n1); end; end; end; Procedure TForm1.kuerze(a,b:real;var c,d:real); var teiler:real; begin teiler:=a; while (a mod teiler <> 0) or (b mod teiler <>0) do teiler:=teiler-1; c:=a div teiler; d:=b div teiler;} end; nu hab ich aber wieder einen Fehler -_- |
Re: Brüche kürzen- wieder einmal
Zitat:
PS: Du solltest deinen Code mal besser, lesvbarer formatieren. |
Re: Brüche kürzen- wieder einmal
... und danach einfach das t entfernen.
Delphi-Quellcode:
Ich wollt' jetzt die begins und ends net nachzählen, aber wenn das innerhalb von TForm1 aufgerufen wird, dann gings auch so
form1.kuerze(z, n, z1, n1);
Delphi-Quellcode:
kuerze(z, n, z1, n1);
|
Re: Brüche kürzen- wieder einmal
Liste der Anhänge anzeigen (Anzahl: 1)
habs mal passen formatiert und editiert...
aber es funktioniert immernoch nicht...
Delphi-Quellcode:
Wenn sich evtl. jemand die Zeit nehmen würde, und sich das mal anschaut, wäre ich sehr dankbar :roll:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit7: TEdit; Edit8: TEdit; Label5: TLabel; Label6: TLabel; Button1: TButton; Edit9: TEdit; Label7: TLabel; Label8: TLabel; Label9: TLabel; CheckBox1: TCheckBox; procedure Button1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure FormCreate(Sender: TObject); Procedure kuerze(a,b:real;var c,d:real); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var z,n,x1,x2,a,p,px,p2,q,disk,p5,e,z1,n1:real; begin a:= strtofloat(edit1.text) / strtofloat(edit2.text); px:= strtofloat(edit3.text) / strtofloat(edit4.text); p:=px / a; q:= (strtofloat(edit5.text) / strtofloat(edit6.text))/a; p2:=p / 2; disk:=sqr(p2) -q; if disk<0 then begin edit7.text:=''; edit8.text:=''; edit9.text:='Keine Lösung' end else if disk>0 then begin edit9.text:='Zwei Lösungen'; x1:=-p/2+sqrt(disk); x1:=round(x1 * 100) / 100 ; x2:=p/2+sqrt(disk); x2:=round(x2 * 100) / 100 ; edit7.text:=''+floattostr(x1); edit8.text:=''+floattostr(x2); end else if disk=0 then begin edit9.text:='Eine Lösungen'; e:=-p/2; x1:=e; x1:=round(x1 * 100) / 100; edit7.text:=''+floattostr (x1); edit8.text:=''; end; z:=strtofloat (form1.edit1.text); n:=strtofloat(form1.edit2.text); form1.kuerze (z,n,z1,n1); form1.edit1.text:=floattostr(z1); form1.edit2.text:=floattostr(n1); end; Procedure TForm1.kuerze(a,b:real;var c,d:real); var teiler:real; begin teiler:=a; while (a mod teiler <>{!!!Operator ist auf diesen Operandentyp nicht anwendbar!!!} 0) or (b mod teiler <>0) do teiler:=teiler-1; c:=a div teiler; d:=b div teiler;} end; procedure TForm1.CheckBox1Click(Sender: TObject); begin if checkbox1.checked=false then begin edit2.visible:=false; edit4.visible:=false; edit6.visible:=false; edit2.text:='1'; edit4.text:='1'; edit6.text:='1'; label7.visible:=false; label8.visible:=false; label9.visible:=false; edit1.top:=77; edit3.top:=77; edit5.top:=77; end else begin edit2.visible:=true; edit4.visible:=true; edit6.visible:=true; label7.visible:=true; label8.visible:=true; label9.visible:=true; edit1.top:=64; edit3.top:=64; edit5.top:=64; end; end; procedure TForm1.FormCreate(Sender: TObject); begin edit2.visible:=false; edit4.visible:=false; edit6.visible:=false; edit2.text:='1'; edit4.text:='1'; edit6.text:='1'; label7.visible:=false; label8.visible:=false; label9.visible:=false; edit1.top:=77; edit3.top:=77; edit5.top:=77; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz