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