Initial revision
[h316.git] / programs / mandelbrot / src / apfel.f
1 C APFELMAENNCHEN-PROGRAMM, 30.NOV.2004 PHILIPP HACHTMANN
2 C
3 C SENSE-SWITCH 1: WENN GESETZT, KONFIGURATION
4 C SENSE-SWITCH 2: WENN GESETZT, KEINE AUSGABE
5 C
6 C
7 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8 COMPLEX C,Z,CTMP
9 C
10 REAL
11 + XIN1,XIN2,YIN1,YIN2,LOWX,LOWY,HIGHX,HIGHY,
12 + XSTEP,YSTEP,MAXVAL,TEMP,
13 + X,Y
14 C
15 INTEGER
16 + MAXI,COUNT,WIDTH,
17 + CR,LF,POSI,NEGA, I, N
18 C
19 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
20 C KONSTANTE WERTE
21 C
22 C (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/
33 C
34 C
35 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
36 C
37 C
38 C
39 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
40 C STARTMELDUNG
41 100 WRITE(1,10)
42 10 FORMAT(39HMANDELBROT-DEMO, 01.DEC.2004 HACHTI :-) )
43 C
44 C
45 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
46 C EINGABEN ANNEHMEN
47 C
48 N=1
49 CALL SSWTCH(N,I)
50 IF(I.EQ.1) GO TO 150
51 C
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
63 C
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)
71 C
72 C
73 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
74 C STARTWERTE ENDGUELTIG FESTLEGEN
75 C
76 C EVENTUELL STARTWERTE TAUSCHEN
77 C
78 CCCCCC 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
83 C
84 CCCCCC 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
89 C
90 CCCCCC WERTE UEBERNEHMEN
91 201 LOWX = XIN1
92 HIGHX = XIN2
93 LOWY = YIN1
94 HIGHY = YIN2
95 C
96 CCCCCC SCHRITTWEITEN AUSRECHNEN
97 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
98 YSTEP = 2.0 * XSTEP
99 C
100 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
101 C STARTWERTE AUSGEBEN
102 C
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)
118 CCCCCC ZEILENVORSCHUB
119 WRITE (1,55)
120 55 FORMAT (1H0)
121 C
122 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
123 C EIGENTLICHE BERECHNUNG
124 C
125 CCCCCC EINSTIEG IN BERECHNUNG
126 299 X=LOWX
127 Y=HIGHY
128 C
129 CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT
130 300 C=CMPLX(X,Y)
131 COUNT=0
132 Z=(0.0,0.0)
133 C
134 CCCCCC 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
141 C
142 CCCCCC PUNKT DURCHGEFALLEN
143 410 CALL PCHAR(NEGA)
144 GO TO 500
145 C
146 CCCCCC PUNKT HAT MAXI ERREICHT
147 420 CALL PCHAR(POSI)
148 C
149 C
150 CCCCCC NEUEN PUNKT MACHEN
151 500 X = X + XSTEP
152 CCCCCC ZEILE NOCH NICHT VOLL?
153 IF (X.LT.HIGHX) GO TO 300
154 CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN
155 X = LOWX
156 CALL PCHAR(CR)
157 CALL PCHAR(LF)
158 CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN
159 Y=Y-YSTEP
160 IF (Y.GT.LOWY) GO TO 300
161 C
162 CCCCCC HIER IST DAS BILD FERTIG.
163 WRITE(1, 60)
164 60 FORMAT (6HFERTIG)
165 C
166 CCCCCC KURZE PAUSE, DANN NEUSTART
167 PAUSE 7
168 GO TO 100
169 END
170 $0