Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Brüche kürzen- wieder einmal (https://www.delphipraxis.net/82722-brueche-kuerzen-wieder-einmal.html)

Spynx 18. Dez 2006 18:58


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

Danke schonmal...

3_of_8 18. Dez 2006 19:02

Re: Brüche kürzen- wieder einmal
 
form1.edit1 ;)

Spynx 18. Dez 2006 19:20

Re: Brüche kürzen- wieder einmal
 
:wall: Dankeschön :)

Delphi-Quellcode:
...

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;
selbes Programm, anderes Problem:Inkompatible Typen (siehe Oben)- was muss ich tuen???

Goldesel 18. Dez 2006 19:42

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.

Spynx 18. Dez 2006 20:43

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;

GuenterS 18. Dez 2006 21:51

Re: Brüche kürzen- wieder einmal
 
Du musst die Deklaration logischerweise auch ändern, nicht nur den Implementierungsteil deiner Methode.

Spynx 18. Dez 2006 23:17

Re: Brüche kürzen- wieder einmal
 
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 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;
THX!

nu hab ich aber wieder einen Fehler -_-

Luckie 19. Dez 2006 00:19

Re: Brüche kürzen- wieder einmal
 
Zitat:

Zitat von Spynx
nu hab ich aber wieder einen Fehler -_-

Und?

PS: Du solltest deinen Code mal besser, lesvbarer formatieren.

Sunlight7 19. Dez 2006 01:14

Re: Brüche kürzen- wieder einmal
 
... und danach einfach das t entfernen.

Delphi-Quellcode:
form1.kuerze(z, n, z1, n1);
Ich wollt' jetzt die begins und ends net nachzählen, aber wenn das innerhalb von TForm1 aufgerufen wird, dann gings auch so
Delphi-Quellcode:
kuerze(z, n, z1, n1);

Spynx 19. Dez 2006 17:12

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:
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.
Wenn sich evtl. jemand die Zeit nehmen würde, und sich das mal anschaut, wäre ich sehr dankbar :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

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