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