Einzelnen Beitrag anzeigen

ThePhilosopher

Registriert seit: 22. Nov 2013
4 Beiträge
 
#1

Sierpinski Dreieck mit Lazarus

  Alt 22. Nov 2013, 16:31
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.
  Mit Zitat antworten Zitat