Initial revision
[h316.git] / programs / mandelbrot / src / apfel1.f
CommitLineData
c08e22bb 1C APFELMAENNCHEN-PROGRAMM, 30.NOV.2004 PHILIPP HACHTMANN
2C
3C
4 COMPLEX C,Z,CTMP
5C
6 REAL
7 + XIN1,XIN2,YIN1,YIN2,LOWX,LOWY,HIGHX,HIGHY,
8 + XSTEP,YSTEP,MAXVAL,TEMP,
9 + X,Y
10C
11 INTEGER
12 + MAXI,COUNT,WIDTH,
13 + CR,LF,POSI,NEGA
14C
15CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
16C KONSTANTE WERTE
17C
18C (32=LEERZEICHEN, 88=X)
19C
20 CR=13
21 LF=10
22 POSI=88
23 NEGA=46
24C
25CCCCCC SEITENBREITE:
26 WIDTH=70
27C
28CCCCCC MAXIMALE ITERATIONSTIEFE
29 MAXI=100
30C
31CCCCCC AUSSTIEGSWERT
32 MAXVAL=2.0
33C
34CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
35C BILDDATEN
36C
37 XIN1 = -1.50
38 XIN2 = 0.50
39C
40 YIN1 = -1.00
41 YIN2 = 1.00
42C
43C
44CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
45C STARTMELDUNG
46 100 WRITE(1,10)
47 10 FORMAT(40HMANDELBROT 30.NOV.2004 PHILIPP HACHTMANN )
48C
49CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
50C STARTWERTE ENDGUELTIG FESTLEGEN
51C
52C EVENTUELL STARTWERTE TAUSCHEN
53C
54CCCCCC WENN XIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
55 150 I F(XIN2.GT.XIN1) GO TO 200
56 TEMP = XIN1
57 XIN1 = XIN2
58 XIN2 = TEMP
59C
60CCCCCC WENN YIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
61 200 IF(YIN2.GT.YIN1) GO TO 201
62 TEMP = YIN1
63 YIN1 = YIN2
64 YIN2 = TEMP
65C
66CCCCCC WERTE UEBERNEHMEN
67 201 LOWX = XIN1
68 HIGHX = XIN2
69 LOWY = YIN1
70 HIGHY = YIN2
71C
72CCCCCC SCHRITTWEITEN AUSRECHNEN
73 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
74 YSTEP = 2.0 * XSTEP
75C
76CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
77C STARTWERTE AUSGEBEN
78C
79 WRITE (1,20)
80 20 FORMAT (9HSETTINGS:)
81 WRITE (1,30) LOWX, HIGHX
82 30 FORMAT (12HX-WERTE VON ,1F8.5,5H BIS ,1F8.5)
83 WRITE (1,40) LOWY, HIGHY
84 40 FORMAT (12HY-WERTE VON ,F8.5,5H BIS ,F8.5)
85 WRITE (1,50) MAXI, MAXVAL, XSTEP, YSTEP, WIDTH
86 50 FORMAT ( 4HMAX:,I3,
87 + 8H MAXVAL:,F8.5,
88 + 7H XSTEP:,F8.5,
89 + 7H YSTEP:,F8.5,
90 + 7H WIDTH:,I2)
91C
92 PAUSE 1
93C
94CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
95C EIGENTLICHE BERECHNUNG
96C
97CCCCCC EINSTIEG IN BERECHNUNG
98 X=LOWX
99 Y=HIGHY
100C
101CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT
102 300 C=CMPLX(X,Y)
103 COUNT=0
104 Z=(0.0,0.0)
105C
106CCCCCC HIER DER ITERIERTE TEIL
107 400 CTMP=Z*Z
108 Z=CTMP+C
109 IF ((CABS(Z)).GE.MAXVAL) GO TO 410
110 COUNT=COUNT+1
111 IF (COUNT.GE.MAXI) GO TO 420
112 GO TO 400
113C
114CCCCCC PUNKT DURCHGEFALLEN
115 410 CALL PCHAR(NEGA)
116 GO TO 500
117C
118CCCCCC PUNKT HAT MAXI ERREICHT
119 420 CALL PCHAR(POSI)
120C
121C
122CCCCCC NEUEN PUNKT MACHEN
123 500 X = X + XSTEP
124CCCCCC ZEILE NOCH NICHT VOLL?
125 IF (X.LT.HIGHX) GO TO 300
126CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN
127 X = LOWX
128 CALL PCHAR(CR)
129 CALL PCHAR(LF)
130CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN
131 Y=Y-YSTEP
132 IF (Y.GT.LOWY) GO TO 300
133C
134CCCCCC HIER IST DAS BILD FERTIG.
135 WRITE(1, 60)
136 60 FORMAT (6HFERTIG)
137C
138CCCCCC KURZE PAUSE, DANN NEUSTART
139 PAUSE 7
140 GO TO 100
141 END
142$0