Autor Beitrag
Informatiklady
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 21.01.11 13:27 
Wir haben ein Problem!
Unser Lehrer in der Schule hat uns dies nicht richtig erklärt.
Könnt ihr uns bei der Programmierung dieses AB helfen?

projekte.gymnasium-o...Grafiken%20-%202.pdf

Würden uns über Antworten freuen.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 21.01.11 13:39 
Dann zeig doch mal Deine Ansätze und wo es genau hakt. Wir helfen gern bei der Aufgabe - aber wir machen sie nicht für Dich.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 21.01.11 13:42 
Hi und :welcome:

user profile iconInformatiklady hat folgendes geschrieben Zum zitierten Posting springen:
Könnt ihr uns bei der Programmierung dieses AB helfen?

Können ja.

An sich musst du dir erstmal überlegen:

Wie zeichne ich ein einfaches Rechteck. Welche Parameter hat die dafür nötige Funktion.

Der Trick an Rekursion ist, dass du beim Rechteck zeichnen die Procedure fürs Rechteck zeichnen wieder aufrufst...die ruft dann wieder Rechteck zeichnen auf usw. Du hast dann eine endlose Folge. Stürzt dein Programm mit der Meldung "Stack overflow" ab, dann hast du es schon fast geschafft ;) Dann musst du nur noch eine Abbruchbedingung definieren.

Edit: Was ich nicht verstehe ist das "Fehler! Keine gültige Verknüpfung.". Besonders in der ersten Zeile ergibt das garkeinen Sinn für mich.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 21.01.11 13:56 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Edit: Was ich nicht verstehe ist das "Fehler! Keine gültige Verknüpfung.". Besonders in der ersten Zeile ergibt das garkeinen Sinn für mich.
Der Lehrer war zu dusslig, ein richtiges PDF zu erstellen :) Die Bilder stammen wohl aus externen Dateien im Ursprungsdokument, und die konnten dann nicht gefunden werden beim ver-pdf-en.

Ansonsten kann ich nur nochmal bekräftigen was die anderen hier auch schon gesagt haben: bei konkreten Fragestellungen helfen wir immer gern, aber ganze Aufgaben wirds hier nicht geben. Aber für die ersten 3 gibts ja jetzt den Ansatz von user profile iconXion :zustimm:

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 21.01.11 14:08 
Für die ersten 3 Figuren haben wir schon allein eine Lösung gefunden jetzt fehlt uns für die nächsten Figuren der Ansatz.

Das sind die Prozeduren für Figur 1-3:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
procedure Tform1.quadrat(x1,y1,l,ordnung1:integer);
begin
  if ordnung1 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else
  begin
    quadrat(x1,y1,l div 2, ordnung1-1);
     quadrat(x1+l div 2,y1,l div 2, ordnung1-1);
      quadrat(x1,y1+l div 2 ,l div 2,ordnung1-1);
       quadrat(x1+l div 2, y1+l div 2, l div 2, ordnung1-1);


      end;

  end;
 procedure TForm1.quadrat2(x1,y1,l,ordnung:integer);
        begin
  if ordnung = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else if ordnung=1 then
  begin
    quadrat2(x1,y1,l div 2, ordnung-1);
     quadrat2(x1+l div 2,y1,l div 2, ordnung-1);
      quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1);
       quadrat2(x1+l div 2, y1+l div 2, l div 2, ordnung-1);
       end
       else begin
         quadrat2(x1,y1,l div 2,0) ;
         quadrat2(x1+l div 2,y1,l div 2, ordnung-1);
         quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1);
         quadrat2(x1+l div 2, y1+l div 2, l div 20);
      end;
      end;

       procedure TForm1.quadrat3(x1,y1,l,ordnung2:integer);
         begin
  if ordnung2 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else if  odd(ordnung2)           then
  begin quadrat3(x1,y1,l div 2, ordnung2-1) ;
         quadrat3(x1+l div 2,y1,l div 20);
         quadrat3(x1,y1+l div 2 ,l div 2,0);
         quadrat3(x1+l div 2, y1+l div 2, l div 2,ordnung2-1);

       end
       else begin
   quadrat3(x1,y1,l div 20);
     quadrat3(x1+l div 2,y1,l div 2, ordnung2-1);
      quadrat3(x1,y1+l div 2 ,l div 2,ordnung2-1);
       quadrat3(x1+l div 2, y1+l div 2, l div 20);
      end;


Moderiert von user profile iconMartok: Delphi-Tags gesetzt
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 21.01.11 14:18 
Das sieht doch schomal gut aus (mal von der seltsamen Einrückung abgesehen).

Figur 6,7 funktionieren ähnlich. Die 6 ist im Endeffekt die 1, nur dass man um das Rechteck etwas Platz lässt. Der freigelassene Platz ist prozentual zu sehen...

Hmm, die 7 ist knifflig :D Da seh ich auf Anhieb nicht wie das System genau ist.


Bei der 4 musst du irgendwie die Rotation mit übergeben. Deine Funktion würde also noch einen zusätzlichen Parameter kriegen (rotiert=ja/nein), den schaltest du bei jedem Zeichnen um (not rotiert).
Ich glaub das gedrehte Rechteck müsst ihr mit 4 Linien zeichnen, weiß nicht ob das Canvas rotierte Rechtecke kann.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 21.01.11 14:24 
Geht das jetzt auch nochmal mit einfachem Deutsch weil wir haben das jetzt komplett nicht verstanden =(
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 21.01.11 14:32 
Hehe, klar :D Mal als Quellcode

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure Tform1.quadrat4(x1,y1,l,ordnung1:integer; rotiert: boolean);
begin
  if ordnung1 = 0 then 
    //stop
  else
  begin
    if rotiert then
    begin
      begin
        //hier die Rechtecke verdreht zeichnen
        //...
        quadrat4(neuX,neuY,neuL,ordnung-1not rotiert);
      end
    else
      begin
        //hier die Rechtecke gerade zeichnen        
        //...
        quadrat4(neuX,neuY,neuL,ordnung-1not rotiert);
      end;
  end;
end;


Edit:
Ich habe mal Aufgabe1 etwas umgestellt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure Tform1.quadrat(x1,y1,l,ordnung1:integer);
begin
  if ordnung1 <> 0 then
    begin
      Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l);
      quadrat(x1,y1,l div 2, ordnung1-1);
      quadrat(x1+l div 2,y1,l div 2, ordnung1-1);
      quadrat(x1,y1+l div 2 ,l div 2,ordnung1-1);
      quadrat(x1+l div 2, y1+l div 2, l div 2, ordnung1-1);
    end;
end;

Im Endeffekt habt ihr es effizienter gemacht (d.h. er muss weniger zeichnen). Aber das hier ist ein besserer Ausgangspunkt für die andren Aufgaben ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 21.01.11 14:56 
Ich habs geschafft:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure Tform1.quadrat4(x1,y1,l,ordnung:integer; rotiert: boolean);
begin
  if ordnung <> 0 then
    begin
      if rotiert then
        begin
          //Raute zeichnen
          Image1.Canvas.MoveTo( round(X1+0.5*l) , Y1);
          Image1.Canvas.LineTo( X1              , round(Y1+0.5*l));
          Image1.Canvas.LineTo( round(X1+0.5*l) , round(Y1+l));
          Image1.Canvas.LineTo( round(X1+l)     , round(Y1+0.5*l));
          Image1.Canvas.LineTo( round(X1+0.5*l) , round(Y1));
          Image1.Canvas.MoveTo( round(X1+0.25*l), round(Y1+0.25*l));
          Image1.Canvas.LineTo( round(X1+0.75*l), round(Y1+0.75*l));
          Image1.Canvas.MoveTo( round(X1+0.25*l), round(Y1+0.75*l));
          Image1.Canvas.LineTo( round(X1+0.75*l), round(Y1+0.25*l));

          quadrat4(round (x1+1/8*l),round (y1+3/8*l),l div 4, ordnung-1not rotiert);
          quadrat4(round (x1+3/8*l),round (y1+5/8*l),l div 4, ordnung-1not rotiert);
          quadrat4(round (x1+5/8*l),round (y1+3/8*l),l div 4, ordnung-1not rotiert);
          quadrat4(round (x1+3/8*l),round (y1+1/8*l),l div 4, ordnung-1not rotiert);
        end
      else
        begin
          Image1.Canvas.Rectangle( X1,Y1,X1+l ,Y1+l );
          Image1.Canvas.MoveTo( X1   , round(Y1+0.5*l));
          Image1.Canvas.LineTo( X1+l , round(Y1+0.5*l));
          Image1.Canvas.MoveTo( round(X1+0.5*l) , Y1);
          Image1.Canvas.LineTo( round(X1+0.5*l) , Y1+l);

          quadrat4(x1,y1,l div 2, ordnung-1not rotiert);
          quadrat4(x1+l div 2,y1,l div 2, ordnung-1not rotiert);
          quadrat4(x1,y1+l div 2 ,l div 2,ordnung-1not rotiert);
          quadrat4(x1+l div 2, y1+l div 2, l div 2, ordnung-1not rotiert);
        end;
    end;
end;


Die gibts gratis von mir :mrgreen:

Zur Erklärung:
Das Programm biegt bei jeder Rekursionsstufe (also "Aufruftiefe") abwechselnd in eine der beiten if-Zweige ab. Einmal werden Rauten gezeichnet, einmal Rechtecke. Um auf die Zahlenwerte zu kommen, guckt euch mal das Bild im Anhang an.
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 11.02.11 14:19 
Das Funktioniert aber irgendwie nicht so wirklich!!!
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 11.02.11 15:23 
user profile iconInformatiklady hat folgendes geschrieben Zum zitierten Posting springen:
Wir haben ein Problem!
Unser Lehrer in der Schule hat uns dies nicht richtig erklärt.


Ja, ja, immer die bösen Lehrer (manchmal auch als "Pauker" verunglimpft). Auf Dritte, die sich nicht wehren können, schimpfen. Es ist ja so leicht, anderen die Schuld zu geben.

Bevor Du Dich zu solchen Urteilen aufschwingst, was tatest Du, was tatet Ihr dazu, um das "Problem" anzugehen?

Konnte wirklich keiner der Schüler seinen Ausführungen folgen? Dann wäre es in der Tat ein ziemlich objektiver Gradmesser dafür, daß die Erklärungen defizitär waren. Falls es doch welche gab, die folgen konnten, dann sieht die Schuldfrage hingegen längst nicht so eindeutig aus.

Außerdem fehlt in Deinem Beitrag irgendein Hinweis, was konkret nicht verstanden wurde bzw. bei was wir hier helfen könn(t)en.

Einfach nur eine PDF über einen Verweis hier hingerotzt....Vergiß nicht (oder sei Dir hiermit erstmalig dessen bewußt), daß all' die, die hier helfen, das altruistisch und i.d.R. auch in ihrer Freizeit tun. Ein wenig mehr Entgegenkommen wäre mithin angebracht.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.02.11 19:21 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Einfach nur eine PDF über einen Verweis hier hingerotzt....Vergiß nicht (oder sei Dir hiermit erstmalig dessen bewußt), daß all' die, die hier helfen, das altruistisch und i.d.R. auch in ihrer Freizeit tun. Ein wenig mehr Entgegenkommen wäre mithin angebracht.

Nee, das ist schon ein altes Thema ;) Und sie haben sich ja Tatsache mit beschäftigt, das ist schon ok.


user profile iconInformatiklady hat folgendes geschrieben Zum zitierten Posting springen:
Das Funktioniert aber irgendwie nicht so wirklich!!!

Das ist allerdings ne schlechte Fehlerbeschreibung. Man muss ja schon interpretieren, um rauszukriegen, dass es nicht geht :D

Also am besten du zeigst mal deinen Code, denn der Code von mir funktionierte so bei mir ;) Notfalls mal euer ganzes Projekt hochladen, dann kann man mal dort reingucken.

PS: ihr habt aber viel Zeit für die Aufgaben :D

Moderiert von user profile iconNarses: Zitat repariert.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 18.02.11 13:10 
Hier ist unsere Projektarbeit die wir bis jetzt haben!!
Einloggen, um Attachments anzusehen!
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 18.02.11 18:43 
Du musst das ganze Projekt anhängen, nicht nur die DPR. Am besten als Zip-Datei packen. Vor allem die Unit ist wichtig (Unit1.pas), denn dort steht euer Quellcode drin.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Fr 18.02.11 19:44 
Wie wäre es hier mit: www.delphi-treff.de/tutorials/grundlagen/ ?

So Fehlermeldungen wie: "Das funktioniert nicht!!!!!", sind ja schrecklich! :roll:

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 28.02.11 14:59 
Das ist das Programm was wir bis jetzt erstellt haben bwz. die Unit
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Figur1: TButton;
    Figur2: TButton;
    Figur8: TButton;
    Figur3: TButton;
    Figur4: TButton;
    Figur5: TButton;
    Figur6: TButton;
    Figur7: TButton;
    Image1: TImage;
    FigurLoeschen: TButton;
    Abbrechen: TButton;
    Eingabe: TEdit;
    procedure FigurLoeschenClick(Sender: TObject);
    procedure AbbrechenClick(Sender: TObject);
    procedure Figur1Click(Sender: TObject);
    procedure Figur2Click(Sender: TObject);
    procedure Figur4Click(Sender: TObject);
    procedure Figur3Click(Sender: TObject);



  private

    procedure quadrat(x1,y1,l,ordnung1:integer);
    procedure quadrat2(x1,y1,l,ordnung:integer);
    procedure quadrat3(x1,y1,l,ordnung2:integer);
    procedure pv(r,th: real);
    procedure fraktaleLinie(ordnung: integer; l, th:real);
    procedure quadrat4(x1,y1,l,ordnung3:integer);

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
procedure Tform1.quadrat(x1,y1,l,ordnung1:integer);
begin
  if ordnung1 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else
  begin
    quadrat(x1,y1,l div 2, ordnung1-1);
     quadrat(x1+l div 2,y1,l div 2, ordnung1-1);
      quadrat(x1,y1+l div 2 ,l div 2,ordnung1-1);
       quadrat(x1+l div 2, y1+l div 2, l div 2, ordnung1-1);


      end;

  end;
 procedure TForm1.quadrat2(x1,y1,l,ordnung:integer);
        begin
  if ordnung = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else if ordnung=1 then
  begin
    quadrat2(x1,y1,l div 2, ordnung-1);
     quadrat2(x1+l div 2,y1,l div 2, ordnung-1);
      quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1);
       quadrat2(x1+l div 2, y1+l div 2, l div 2, ordnung-1);
       end
       else begin
         quadrat2(x1,y1,l div 2,0) ;
         quadrat2(x1+l div 2,y1,l div 2, ordnung-1);
         quadrat2(x1,y1+l div 2 ,l div 2,ordnung-1);
         quadrat2(x1+l div 2, y1+l div 2, l div 20);
      end;
      end;

       procedure TForm1.quadrat3(x1,y1,l,ordnung2:integer);
         begin
  if ordnung2 = 0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else if  odd(ordnung2)           then
  begin quadrat3(x1,y1,l div 2, ordnung2-1) ;
         quadrat3(x1+l div 2,y1,l div 20);
         quadrat3(x1,y1+l div 2 ,l div 2,0);
         quadrat3(x1+l div 2, y1+l div 2, l div 2,ordnung2-1);

       end
       else begin
   quadrat3(x1,y1,l div 20);
     quadrat3(x1+l div 2,y1,l div 2, ordnung2-1);
      quadrat3(x1,y1+l div 2 ,l div 2,ordnung2-1);
       quadrat3(x1+l div 2, y1+l div 2, l div 20);
      end;
      end;

   procedure Tform1.pv(r,th: real); {polarvektor}
  var rad: real;
begin
  rad := th*pi/180;
  with Image1.Canvas do
    lineTo(round(penpos.x + r*cos(rad)),
           round(penpos.y + r*sin(rad)));
end;

procedure TForm1.fraktaleLinie(ordnung: integer; l, th:real);
begin
  if ordnung = 0 then pv(l,th) else Begin
    fraktaleLinie(ordnung - 1, l,th);
    end;
    end;

procedure TForm1.quadrat4(x1,y1,l,ordnung3:integer);
var l1,l2:integer;
begin
 if ordnung3=0 then Image1.Canvas.Rectangle(x1,y1,x1+l,y1+l)
  else if odd(ordnung3) then
         begin
            quadrat4(x1,y1,l div 2, ordnung3-1) ;
            quadrat4(x1+l div 2,y1,l div 20);
            quadrat4(x1,y1+l div 2 ,l div 2,0);
            quadrat4(x1+l div 2, y1+l div 2, l div 2,ordnung3-1)
      

            end;
            end;

{$R *.dfm}

procedure TForm1.FigurLoeschenClick(Sender: TObject);
begin
Image1.canvas.Brush.Color:=clwhite;
Image1.Canvas.Rectangle(-1,-1,image1.Width+1,image1.Height+1);
end;

procedure TForm1.AbbrechenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.Figur1Click(Sender: TObject);
  VAR x,y,o:INTEGER;
  BEGIN
   Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1);
   Image1.Canvas.brush.Color:=clwhite;
   o:=Strtoint(Eingabe.text);
   x:=image1.Width; y:=image1.Height;
   IF image1.Height>Image1.Width THEN
            y:=image1.Width ELSE x:=image1.Height;
            image1.canvas.rectangle(0,0,0+x,0+x);
    quadrat(0,0,x,o);

end;

procedure TForm1.Figur2Click(Sender: TObject);
 VAR x,y,o:INTEGER;
  BEGIN
   Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1);
   Image1.Canvas.brush.Color:=clwhite;
   o:=Strtoint(Eingabe.text);
   x:=image1.Width; y:=image1.Height;
   IF image1.Height>Image1.Width THEN
            y:=image1.Width ELSE x:=image1.Height;
            image1.canvas.rectangle(0,0,0+x,0+x);
    quadrat2(0,0,x,o);

end;


procedure TForm1.Figur4Click(Sender: TObject);
         VAR x,y,o,ordnung,l,l1,l2:INTEGER;
                 r:boolean;
  BEGIN
   Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1);
   Image1.Canvas.brush.Color:=clwhite;
   o:=Strtoint(Eingabe.text);
   x:=image1.Width; y:=image1.Height;
   IF image1.Height>Image1.Width THEN
            y:=image1.Width ELSE x:=image1.Height;
            image1.canvas.rectangle(0,0,0+x,0+x);
  
  ordnung:=4;
l:=625;
Image1.Canvas.moveTo(625150);
Image1.canvas.pen.color:=clblack;
fraktaleLinie(ordnung,L,0);
fraktaleLinie(ordnung,L,90);
fraktaleLinie(ordnung,L,180);
fraktaleLinie(ordnung,L,270);
Image1.Canvas.moveTo(625,250 );
l1:=round(sqrt(sqr(l/2)+sqr(l/2)));
fraktaleLinie(ordnung,L1,-45);
fraktaleLinie(ordnung,L1,45);
fraktaleLinie(ordnung,L1,135);
fraktaleLinie(ordnung,L1,-135);
Image1.Canvas.moveTo(625 +l div 4250 - l div 4);
l2:=round(sqrt(sqr(l1/2)+sqr(l1/2)));
fraktaleLinie(ordnung,l1,45);
Image1.Canvas.moveTo(625 +l div 4250 + l div 4);
fraktaleLinie(ordnung,l1,-45);

end;

procedure TForm1.Figur3Click(Sender: TObject);
          VAR x,y,o:INTEGER;
                 r:boolean;
  BEGIN
   Image1.Canvas.Rectangle(-1,-1,Image1.Width+1,image1.Height+1);
   Image1.Canvas.brush.Color:=clwhite;
   o:=Strtoint(Eingabe.text);
   x:=image1.Width; y:=image1.Height;
   IF image1.Height>Image1.Width THEN
            y:=image1.Width ELSE x:=image1.Height;
            image1.canvas.rectangle(0,0,0+x,0+x);
    quadrat3(0,0,x,o);
end;

end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 28.02.11 15:41 
Zu Aufg 1,2 und 3:

Das sieht doch sehr gut aus, solange die Rekursionstiefe nicht zu tief ist...dann machen sich die Rundungsfehler von div bemerkbar
Deshalb am besten 2^Rekursionstiefe als Größe nehmen, mal einen beliebigen Faktor:
ausblenden Delphi-Quelltext
1:
2:
MaxRekursionstiefe:=6;
quadrat(0,0,8*round(power(2,MaxRekursionstiefe){=8*2^6},6);

(Edit: noch math oben bei den uses einbinden)

Aufg 4 könnt ihr von mir oben übernehmen.
Aufg 5 ist dazu ganz ähnlich.

Aufg 6 ist wieder einfacher. Ihr müsst dort nur in jedem Schritt Rechtecke zeichnen, nicht erst in der untersten Ebene.

Aufg 7 ist etwas schwierig...da müsste man sich mal reindenken. Die Quadrate werden jeweils in 4 Teile geteilt, während die Rechtecke entsprechend anders aufgeteilt werden.

Aufg 8 ist wieder wie 4, nur dass ihr dort nicht um 90 Grad dreht, sondern um 45. Es geht also nichtmehr mit einem Boolean wie in Aufg 4

Edit:
Was ihr also bereits habt, sieht doch gut aus. Wenn ihr Probleme habt, dann müsst ihr die genauer schildern. "Funktioniert nicht"...da kann ich keine kompetente Antwort drauf geben :D

Edit2:
Zu eurer Lösung zu 4 (mit der Fraktalen Linie) kann ich garnichts sagen...das ist mir zu kompliziert...polarvektor? :shock:
Ich glaub ihr denkt nach wie vor zu kompliziert. Ihr müsst nicht alles bei Ordnung=0 zeichnen. Ihr könnt bereits vorher zeichnen. Bsp:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.quadrat42(x,y,l,ordnung: integer);
begin
 Image1.Canvas.Rectangle(x,y,x+l,y+l);
 if ordnung>=0 then
    quadrat42(x+2,y+2,l-4,ordnung-1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
quadrat42(50,50,100,20);
end;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 04.03.11 13:43 
Also wir haben es jetzt geschafft die Figur 4 zu programmieren jetzt bin ich dabei die nummer 5 zu programmieren nur der ansatz fehlt mir.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 04.03.11 15:27 
Ok, als Ansatz würd ich da so vorgehen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
Procedure Quadrat5_1( X,Y: integer; Width: integer; rekursionstiefe: integer);
begin
 // 1. Teilen der Breite und der Höhe durch 2
 Width:=Width div 2;
 // 2. Für jedes entstehende Quadrat eine Raute reinmalen
 RauteZeichnen(X,Y,Width); //oben links
 RauteZeichnen(X+Width,Y,Width);  //oben rechts
 RauteZeichnen(X+Width,Y+Width,Width); //unten rechts
 RauteZeichnen(X,Y+Width,Width); //unten links

 //< an dieser Stelle haben wir Bild 1

 //3. Rekursion starten. Also 4x Proc2 aufrufen (für jedes Quadrat einmal)
 Quadrat5_2(X,Y,Width,rekursionstiefe-1);
 Quadrat5_2(X+Width,Y,Width,rekursionstiefe-1);
 ...
end

procedure Quadrat5_2( X,Y: integer; Width: integer; rekursionstiefe: integer);
begin
  //1. Zerlegung der Raute in die 4 Quadrate
  //Quadrat1_X := X+1/8*Width;
  //Quadrat1_y := Y+3/8*Width;
  //Quadrat1_Size := 2/8*Width; 
  Image1.Canvas.Rectangle( X+1/8*Width,Y+3/8*Width,2/8*Width ,2/8*Width );
  [...]

  //2. Für jedes Quadrat Proc1 aufrufen
  Quadrat5_1( X+1/8*Width,Y+3/8*Width,2/8*Width ,2/8*Width, rekursionstiefe-1 );
  [...]
end;


Im Anhang eine Illustration für die Werte in procedure Quadrat5_2
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Informatiklady Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 18.03.11 13:33 
Hallöchen !!
Kann das vllt sein , dass du da statt der Figur 4 die 5 gemacht hast .... hab mir das mal angeschaut ... sieht mit den 8teln und der raute eher nach 4 aus !!
lg