c08e22bb |
1 | C APFELMAENNCHEN-PROGRAMM, 29.DEC.2004 PHILIPP HACHTMANN |
2 | C |
3 | C SENSE-SWITCH 1: WENN GESETZT, KONFIGURATION |
4 | C SENSE-SWITCH 2: WENN GESETZT, KEINE AUSGABE DER EINSTELLUNGEN |
5 | C SENSE-SWITCH 3: WENN GESETZT, STARTWERTE WIEDERHERSTELLEN |
6 | C |
7 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
8 | C COMMON BLOCK DEKLARATIONEN |
9 | C |
10 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
11 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
12 | C |
13 | REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
14 | COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
15 | C |
16 | C |
17 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
18 | C STARTMELDUNG |
19 | 100 WRITE (1,10) |
20 | WRITE (1,11) |
21 | 10 FORMAT (45HMANDELBROT-DEMO NO.2, 29.DEC.2004 HACHTI :-) ) |
22 | 11 FORMAT (26HSEE HTTP://H316.HACHTI.DE ) |
23 | C |
24 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
25 | C KONFIGURATION |
26 | CCCCCC RUECKSETZEN AUF DEFAULTWERTE? |
27 | CALL SSWTCH(3,I) |
28 | IF (I.EQ.1) CALL RST |
29 | C |
30 | C |
31 | CCCCCC BEIM ERSTEN START ODER WENN VERLANGT |
32 | IF(INIT.EQ.0) CALL STVAL |
33 | C |
34 | C |
35 | CCCCCC EINGABEN VERARBEITEN? |
36 | CALL SSWTCH(1,I) |
37 | IF (I.EQ.1) CALL GETCFG |
38 | C |
39 | C |
40 | CCCCCC AUSGABE? |
41 | CALL SSWTCH(2,I) |
42 | IF(I.EQ.2) CALL OUTCFG |
43 | C |
44 | WRITE (1,55) |
45 | 55 FORMAT (1H0) |
46 | C |
47 | CALL CALC |
48 | C |
49 | WRITE(1, 60) |
50 | 60 FORMAT (6HFERTIG) |
51 | C |
52 | CCCCCC KURZE PAUSE, DANN NEUSTART |
53 | PAUSE 7 |
54 | GO TO 100 |
55 | END |
56 | C |
57 | C |
58 | C |
59 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
60 | C EIGENTLICHE BERECHNUNG |
61 | SUBROUTINE CALC |
62 | C |
63 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
64 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
65 | REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
66 | COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
67 | C |
68 | COMPLEX C,Z |
69 | REAL X,Y |
70 | INTEGER COUNT |
71 | C |
72 | CCCCCC EINSTIEG IN BERECHNUNG |
73 | 299 X=LOWX |
74 | Y=HIGHY |
75 | C |
76 | CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT |
77 | 300 C=CMPLX(X,Y) |
78 | COUNT=0 |
79 | Z=(0.0,0.0) |
80 | C |
81 | CCCCCC HIER DER ITERIERTE TEIL |
82 | C |
83 | 400 Z=Z*Z+C |
84 | C |
85 | IF ((CABS(Z)).GE.MAXVAL) GO TO 410 |
86 | COUNT=COUNT+1 |
87 | IF (COUNT.GE.MAXI) GO TO 420 |
88 | GO TO 400 |
89 | C |
90 | CCCCCC PUNKT DURCHGEFALLEN |
91 | 410 CALL PCHAR(NEGA) |
92 | GO TO 500 |
93 | C |
94 | CCCCCC PUNKT HAT MAXI ERREICHT |
95 | 420 CALL PCHAR(POSI) |
96 | C |
97 | CCCCCC NEUEN PUNKT MACHEN |
98 | 500 X = X + XSTEP |
99 | CCCCCC ZEILE NOCH NICHT VOLL? |
100 | IF (X.LT.HIGHX) GO TO 300 |
101 | CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN |
102 | X = LOWX |
103 | CALL PCHAR(CR) |
104 | CALL PCHAR(LF) |
105 | CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN |
106 | Y=Y-YSTEP |
107 | IF (Y.GT.LOWY) GO TO 300 |
108 | C |
109 | CCCCCC HIER IST DAS BILD FERTIG. |
110 | RETURN |
111 | END |
112 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
113 | CCCCCC STARTWERTE AUSFUELLEN |
114 | SUBROUTINE STVAL |
115 | C |
116 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
117 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
118 | REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
119 | COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
120 | C |
121 | CR = 13 |
122 | LF = 10 |
123 | POSI = 79 |
124 | NEGA = 32 |
125 | WIDTH = 70 |
126 | MAXI = 60 |
127 | MAXVAL = 2.0 |
128 | LOWX =-1.45 |
129 | HIGHX = 0.45 |
130 | LOWY =-1.00 |
131 | HIGHY = 1.00 |
132 | INIT = 1 |
133 | C |
134 | CCCCCC SCHRITTWEITEN AUSRECHNEN |
135 | XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH) |
136 | YSTEP = 2.0 * XSTEP |
137 | C |
138 | WRITE (1,1500) |
139 | 1500 FORMAT (19HSTARTWERTE GESETZT.) |
140 | RETURN |
141 | END |
142 | C |
143 | C |
144 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
145 | CCCCCC EINSTELLUNGEN EINLESEN |
146 | SUBROUTINE GETCFG |
147 | C |
148 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
149 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
150 | REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
151 | COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
152 | C |
153 | REAL XIN1,XIN2,YIN1,YIN2 |
154 | C |
155 | WRITE(1,11) |
156 | READ (1,16) XIN1 |
157 | WRITE(1,12) |
158 | READ (1,16) XIN2 |
159 | WRITE(1,13) |
160 | READ (1,16) YIN1 |
161 | WRITE(1,14) |
162 | READ (1,16) YIN2 |
163 | WRITE(1,15) |
164 | READ (1,17) MAXI |
165 | C |
166 | 11 FORMAT(14H X FROM : ) |
167 | 12 FORMAT(14H TO : ) |
168 | 13 FORMAT(14H Y FROM : ) |
169 | 14 FORMAT(14H TO : ) |
170 | 15 FORMAT(14H MAXIT (I3): ) |
171 | 16 FORMAT(F12.0) |
172 | 17 FORMAT(I3) |
173 | C |
174 | CCCCCC EVENTUELL STARTWERTE TAUSCHEN: |
175 | CCCCCC WENN XIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN |
176 | 150 I F(XIN2.GT.XIN1) GO TO 200 |
177 | TEMP = XIN1 |
178 | XIN1 = XIN2 |
179 | XIN2 = TEMP |
180 | C |
181 | CCCCCC WENN YIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN |
182 | 200 IF(YIN2.GT.YIN1) GO TO 201 |
183 | TEMP = YIN1 |
184 | YIN1 = YIN2 |
185 | YIN2 = TEMP |
186 | C |
187 | CCCCCC WERTE UEBERNEHMEN |
188 | 201 LOWX = XIN1 |
189 | HIGHX = XIN2 |
190 | LOWY = YIN1 |
191 | HIGHY = YIN2 |
192 | C |
193 | CCCCCC SCHRITTWEITEN AUSRECHNEN |
194 | XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH) |
195 | YSTEP = 2.0 * XSTEP |
196 | C |
197 | RETURN |
198 | END |
199 | C |
200 | C |
201 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
202 | CCCCCC EINSTELLUNGEN AUSGEBEN |
203 | SUBROUTINE OUTCFG |
204 | C |
205 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
206 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
207 | REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
208 | COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP |
209 | C |
210 | WRITE (1,20) |
211 | 20 FORMAT (9HSETTINGS:) |
212 | WRITE (1,30) LOWX, HIGHX |
213 | 30 FORMAT (12HX-WERTE VON ,1F8.5,5H BIS ,1F8.5) |
214 | WRITE (1,40) LOWY, HIGHY |
215 | 40 FORMAT (12HY-WERTE VON ,F8.5,5H BIS ,F8.5) |
216 | WRITE (1,50) MAXI, MAXVAL, XSTEP, YSTEP, WIDTH |
217 | 50 FORMAT ( 4HMAX:,I3, |
218 | + 8H MAXVAL:,F8.5, |
219 | + 7H XSTEP:,F8.5, |
220 | + 7H YSTEP:,F8.5, |
221 | + 7H WIDTH:,I2) |
222 | RETURN |
223 | END |
224 | C |
225 | C |
226 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
227 | CCCCCC RUECKSETZEN |
228 | SUBROUTINE RST |
229 | C |
230 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
231 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
232 | C |
233 | WRITE(1,245) |
234 | 245 FORMAT(24HRUECKSETZUNG GEWUENSCHT ) |
235 | INIT=0 |
236 | RETURN |
237 | END |
238 | C |
239 | C |
240 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
241 | C KONSTANTE WERTE |
242 | BLOCK DATA |
243 | INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
244 | COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA,INIT |
245 | DATA INIT/0/ |
246 | END |
247 | CCCCCCCCCCCCCCCCCCCCCCCC |
248 | $0 |