Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Typenkompatibilität (https://www.delphipraxis.net/173014-problem-mit-typenkompatibilitaet.html)

YXCVBNM1 2. Feb 2013 21:05

Problem mit Typenkompatibilität
 
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.

:)

lbccaleb 2. Feb 2013 21:11

AW: Problem mit Typenkompatibilität
 
So sollte es gehen:

Delphi-Quellcode:
  z := z div p; // "/" kann auch Kommazahlen handeln... und z sowohl p sind keine...

DeddyH 2. Feb 2013 21:13

AW: Problem mit Typenkompatibilität
 
Etwas genauer: "/" kann nur auf Kommazahlen angewendet werden, für ganze Zahlen muss man div verwenden ;)

[edit]
Zitat:

Delphi-Quellcode:
Until prim=true ;

Bitte nie auf Booleanwerte prüfen, das kann ins Auge gehen, siehe z.B. hier oder hier [/edit]

YXCVBNM1 2. Feb 2013 21:16

AW: Problem mit Typenkompatibilität
 
danke! jetzt funktioniert es :)

und was dazugelernt habe ich auch wieder :) Der Unterschied zwischen "/" und div war mir bisher nicht bekannt :(

DeddyH 2. Feb 2013 21:25

AW: Problem mit Typenkompatibilität
 
Ich hoffe, Du hast mein Edit noch gelesen?

YXCVBNM1 2. Feb 2013 21:34

AW: Problem mit Typenkompatibilität
 
jetzt grade habe ich deinen Edit gelesen. Werde ich ändern!

Habe ich wieder was gelernt. Danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 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