Hallo liebe Leute,
Ich muss für die Schule, genauer gesagt für meine GFS in Mathe, ein Sierpinski Dreieck programmieren.
Ich habe mir dazu heute ein paar Gedanken gemacht und war eigentlich der Meinung einen guten Lösungsweg gefunden zu haben.
Ich habe euch unten mal den Code komplett auskommentiert und die Fehlerhafte Stelle markiert.
An dieser Stelle gibt Lazarus immer die Fehlermeldung "Got Double, Excpectet LongInt" aus.
Ich versteh die ganze Sache nicht weil die Variable den gleichen Wert enthält wie eine andere in der gleichen Rechnung auch und dort wird kein Fehler ausgegeben.
Kann mir jemand helfen??
Gruß
TP
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls;
type
{ TForm1 }
TForm1 =
class(TForm)
Button1: TButton;
Edit1: TEdit;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
E: Integer;
//Anzahl der Dreiecke pro Ebene
NH: Integer;
//Nenner des Bruchs der die Y Koordinate angibt
ZH: Integer;
//Zähler des Bruchs der die Y Koordinate angibt
NW: Integer;
//Nenner des Bruchs der die X Koordinate angibt
AW: Integer;
//gibt die Anzahl der Wiederholungen an
a: Integer;
//Wert für Grundseite des Dreiecks
h: Integer;
//Wert für Höhe des Dreiecks
Procedure Sierpinski;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
//Prozedur die aufgerufen wird wenn der Button geklickt wird
begin
Canvas.Polygon([Point(0, h), Point(a
div 2, 0), Point(a, h)]);
NH := 3;
//
ZH := 1;
//
NW := 4;
//
AW := StrToInt(Edit1.Text);
//
E := 1;
//Weißt den Variablen Startwerte zu
Sierpinski;
//Ruft die Prozedur "Sierpinski" auf, in der das gewünschte Sierpinski Dreieck erzeugt wird
end;
procedure TForm1.FormCreate(Sender: TObject);
//Prozedur die aufgerufen wird sobald das Fenster entsteht
begin
a := Image1.Width;
//Weißt "a" den Breiten Wert der Fläche "Image1" zu
h := Image1.Height;
//Weißt "h" den Höhen Wert der Fläche "Image1" zu
end;
procedure TForm1.Sierpinski;
var I, II: Integer;
begin
For I := 1
to AW
do //For-Schleife, die dafür sorgt, dass die gewünschte Zahl an Ebenen erzeugt wird
begin
For II := 1
to E
do
begin
Canvas.MoveTo(1/NW*a, (ZH/NH)*h);
//
Canvas.LineTo(2/NW*a, (ZH+1)/NH*h);
//
Canvas.LineTo(3/NW*a, (ZH/NH)*h);
//
Canvas.LineTo(1/NW*a, (ZH/NH)*h); [COLOR="Red"]
//In diesem Rechen Block wird immer bemängelt das "h" ein Double wäre, bei "a" das den gleichen Wert enthält jedoch nicht ??? [/COLOR]
end;
E := E*3;
NW := NW*2;
NH := NH*2;
ZH := ZH*2+1;
end;
end;
end.