global: Make Makefile better and some small fixes
[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 CALL SSWTCH(1,I)
49 IF(I.NE.1) GO TO 150
50 C
51 WRITE(1,11)
52 READ (1,16) XIN1
53 WRITE(1,12)
54 READ (1,16) XIN2
55 WRITE(1,13)
56 READ (1,16) YIN1
57 WRITE(1,14)
58 READ (1,16) YIN2
59 WRITE(1,15)
60 READ (1,17) MAXI
61
62 C
63 11 FORMAT(9H X FROM: )
64 12 FORMAT(9H TO: )
65 13 FORMAT(9H Y FROM: )
66 14 FORMAT(9H TO: )
67 15 FORMAT(9H MAXIT: )
68 16 FORMAT(F12.0)
69 17 FORMAT(I6)
70 C
71 C
72 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
73 C STARTWERTE ENDGUELTIG FESTLEGEN
74 C
75 C EVENTUELL STARTWERTE TAUSCHEN
76 C
77 CCCCCC WENN XIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
78 150 I F(XIN2.GT.XIN1) GO TO 200
79 TEMP = XIN1
80 XIN1 = XIN2
81 XIN2 = TEMP
82 C
83 CCCCCC WENN YIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
84 200 IF(YIN2.GT.YIN1) GO TO 201
85 TEMP = YIN1
86 YIN1 = YIN2
87 YIN2 = TEMP
88 C
89 CCCCCC WERTE UEBERNEHMEN
90 201 LOWX = XIN1
91 HIGHX = XIN2
92 LOWY = YIN1
93 HIGHY = YIN2
94 C
95 CCCCCC SCHRITTWEITEN AUSRECHNEN
96 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
97 YSTEP = 2.0 * XSTEP
98 C
99 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
100 C STARTWERTE AUSGEBEN
101 C
102 CALL SSWTCH(2,I)
103 IF(I.EQ.1) GO TO 299
104 WRITE (1,20)
105 20 FORMAT (9HSETTINGS:)
106 WRITE (1,30) LOWX, HIGHX
107 30 FORMAT (12HX-WERTE VON ,1F8.5,5H BIS ,1F8.5)
108 WRITE (1,40) LOWY, HIGHY
109 40 FORMAT (12HY-WERTE VON ,F8.5,5H BIS ,F8.5)
110 WRITE (1,50) MAXI, MAXVAL, XSTEP, YSTEP, WIDTH
111 50 FORMAT ( 4HMAX:,I3,
112 + 8H MAXVAL:,F8.5,
113 + 7H XSTEP:,F8.5,
114 + 7H YSTEP:,F8.5,
115 + 7H WIDTH:,I2)
116 CCCCCC ZEILENVORSCHUB
117 WRITE (1,55)
118 55 FORMAT (1H0)
119 C
120 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
121 C EIGENTLICHE BERECHNUNG
122 C
123 CCCCCC EINSTIEG IN BERECHNUNG
124 299 X=LOWX
125 Y=HIGHY
126 C
127 CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT
128 300 C=CMPLX(X,Y)
129 COUNT=0
130 Z=(0.0,0.0)
131 C
132 CCCCCC HIER DER ITERIERTE TEIL
133 400 CTMP=Z*Z
134 Z=CTMP+C
135 IF ((CABS(Z)).GE.MAXVAL) GO TO 410
136 COUNT=COUNT+1
137 IF (COUNT.GE.MAXI) GO TO 420
138 GO TO 400
139 C
140 CCCCCC PUNKT DURCHGEFALLEN
141 410 CALL PCHAR(NEGA)
142 GO TO 500
143 C
144 CCCCCC PUNKT HAT MAXI ERREICHT
145 420 CALL PCHAR(POSI)
146 C
147 C
148 CCCCCC NEUEN PUNKT MACHEN
149 500 X = X + XSTEP
150 CCCCCC ZEILE NOCH NICHT VOLL?
151 IF (X.LT.HIGHX) GO TO 300
152 CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN
153 X = LOWX
154 CALL PCHAR(CR)
155 CALL PCHAR(LF)
156 CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN
157 Y=Y-YSTEP
158 IF (Y.GT.LOWY) GO TO 300
159 C
160 CCCCCC HIER IST DAS BILD FERTIG.
161 WRITE(1, 60)
162 60 FORMAT (6HFERTIG)
163 C
164 CCCCCC KURZE PAUSE, DANN NEUSTART
165 PAUSE 7
166 GO TO 100
167 END
168 $0