Hallo zusammen,
ich bin Programmieranfänger und habe eben versucht ein Programm zu schreiben, welches eine bliebige Zahl in ihre Primfaktoren zerlegt. Allerdings verstehe ich die Fehlermeldung nicht bzw. kann sie nicht nachvollziehen. Ich habe die Fehlermeldung im Quelltext grün makiert.
hier ist der quelltext (TurboDelphi):
Delphi-Quellcode:
unit UGUI;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 =
class(TForm)
LFrage: TLabel;
BZerlegung: TButton;
EZahl: TEdit;
PFaktoren: TPanel;
function NeuePrimzahl:integer;
procedure BZerlegungClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
a:real;
p,z:integer;
Primfaktoren:
array of integer;
implementation
{$R *.dfm}
procedure TForm1.BZerlegungClick(Sender: TObject);
VAR nummer,m:integer;
begin
nummer:=1;
a:=strtofloat(EZahl.Text);
z:=round(a);
p:=Form1.NeuePrimzahl;
Repeat
If ((z
mod p) =0)
then
begin
z:=z/p; [COLOR="Red"]
// HIER KOMMT DIE FEHLERMELDUNG [Pascal Fehler] UGUI.pas(44): E2010 Inkompatible Typen: 'Integer' und 'Extended'[/COLOR]
Primfaktoren[nummer]:=p;
inc(nummer);
end
else p:=Form1.NeuePrimzahl;
Until z=1 ;
For m:=2
to length(Primfaktoren)
do
begin
PFaktoren.Caption:=PFaktoren.Caption+'
*'+inttostr(Primfaktoren[m]);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
p:=2;
end;
function TForm1.NeuePrimzahl:integer;
Var prim:boolean; n,p2:integer;
begin
p2:=p;
prim:=true;
Repeat
p2:=p2+1;
prim:=true;
For n:=2
to (p2-1)
do
begin
If (p2
mod n) = 0
then prim:=false;
end;
Until prim=true ;
result:=p2;
end;
end.
Meiner Meinung nach haben beide Variablen den Typ integer. Ich verstehe daher die Fehlermeldung nicht. Wäre schön, wenn mir jemand helfen könnte.