Schaftrift 1
21244 Buchholz i.d.N.
Tel.: 04181 / 300 98-0
Fax: 04181 / 300 98-90
sekretariat@aeg-buchholz.de
In den Ferien ist nur die Schulleitung jeweils am Dienstag und am Donnerstag in der Zeit von 10:00 bis 12:00 ereichbar.
Apfelmännchen
program apfel;{Ha 12/99}
uses crt,graph;
var itermax:integer;
l,r,u,o:extended;
treiber,modus:integer;
wunsch,neu:char;
function mandelbrot(cr,ci:extended;itermax:integer;wunsch:char;var iter:integer):boolean;
var x,y,xn,yn:extended;
abstandhoch2:extended;
fertig:boolean;
begin
fertig:=false; {Initialisierung}
iter:=0;
x:=0;y:=0;
repeat {Berechnen u. prüfen}
iter:=iter+1;
case wunsch of
'1':Begin xn:=x*x-y*y-cr;yn:=x*y+x*y-ci end; {Algorithmus für Rückkopplung bei x^2-c}
'2':Begin xn:=x*x*x-3*x*y*y-cr;yn:=3*x*x*y-y*y*y-ci end; {x^3-c}
'3':Begin xn:=x*x*x*x-6*x*x*y*y+y*y*y*y-cr;yn:=4*x*x*x*y-4*y*y*y*x-ci end; {x^4-c}
'4':Begin xn:=exp(x)*cos(y)-cr;yn:=exp(x)*sin(y)-ci end; {e^x-c}
end;
x:=xn;
y:=yn;
fertig:=(sqr(x)+sqr(y)>4); {Abstandsgrenze überschritten}
mandelbrot:=(iter=itermax);
until (iter=itermax) or fertig;
end;
procedure mapping(l,r,u,o:extended;itermax:integer);
var xbereich,ybereich,iter:integer;
x,y,deltax,deltay:extended;
begin
deltax:=(r-l)/getmaxX; {Schrittweiten}
deltay:=(o-u)/getmaxY;
y:=u;
for ybereich:=0 to getmaxY do
begin
x:=l;
for xbereich:=0 to getmaxX do
begin
if mandelbrot(x,y,itermax,wunsch,iter) then putpixel(xbereich,getmaxy-ybereich,2)
else if iter>75 then putpixel(xbereich,getmaxy-ybereich,8)
else if iter>50 then putpixel(xbereich,getmaxy-ybereich,4)
else if iter>35 then putpixel(xbereich,getmaxy-ybereich,4)
else if iter>25 then putpixel(xbereich,getmaxy-ybereich,7)
else if odd(iter) then putpixel(xbereich,getmaxy-ybereich,9)
else putpixel(xbereich,getmaxy-ybereich,1);
x:=x+deltax;
end;
y:=y+deltay;
end;
end;
procedure eingeben(var l,r,u,o:extended;var itermax:integer;var wunsch:char);
var option:char;
begin
gotoxy(3,4);writeln('Apfelmännchen oder Mandelbrotmenge in gewünschtem Ausschnitt');
gotoxy(3,5);writeln('Auswahl des Iterationstyps: ');
gotoxy(5,7);writeln('x^2-c (2.Grades sog. Apfelmännchen) wähle<1>');
gotoxy(5,8);writeln('x^3-c (3.Grades wähle<2>');
gotoxy(5,9);writeln('x^4-c (4.Grades wähle<3>');
gotoxy(5,10);writeln('e^x-c (Exponentiell wähle<4>');
gotoxy(30,5);readln(wunsch);
gotoxy(7,12);write('links:(>-1) ');readln(l);
gotoxy(7,13);write('rechts:(<2 ) ');readln(r);
gotoxy(7,14);write('unten:(>-1) ');readln(u);
gotoxy(7,15);write('oben:(<1) ');readln(o);
gotoxy(7,16);write('Iterationen:(>10) ');readln(itermax);
gotoxy(7,18);write('Einstellung der Höhenlinien und des Übergangsbereichs nur im Quelltext möglich.');
end;
begin {Hauptprogramm}
clrscr;
repeat
eingeben(l,r,u,o,itermax,wunsch);
treiber:=detect;
initgraph(treiber,modus,'c:\tp\bgi');
mapping(l,r,u,o,itermax);
readln;
closegraph;
writeln('noch einmal?');
writeln('alte werte:',l:12:8, r:12:8, u:12:8, o:12:8, itermax:6);
readln(neu);
until neu in ['N','n'];
end.
