Citat:
Ursprungligen postat av
53280
Jttegamla basic kod som jag hittade p ngonstans p ntet. Hur skulle ni skriva om denna kod i C , s den gick att kompilera med GCC och kra p terminalen i Linux / Mac OS.
Kod:
5 REM Mandelbrot
10 X1=59:Y1=21
20 I1=-1:I2=1:R1=-2:R2=1
30 S1=(R2-R1)/X1:S2=(I2-I1)/Y1
40 FOR Y=0 TO Y1
50 I3=I1+S2*Y
60 FOR X=0 TO X1
70 R3=R1+S1*X:Z1=R3:Z2=I3
80 FOR N=0 TO 30
90 A=Z1*Z1:B=Z2*Z2
100 IF A+B>4 THEN GOTO 130
110 Z2=2*Z1*Z2+I3:Z1=A-B+R3
120 NEXT N
130 IF N=31 THEN PRINT " "; ELSE PRINT CHR$(62-N);
140 NEXT X
150 PRINT
160 NEXT Y
170 END
Ser ut som ABC80 eller liknande? Nostalgi!
Koden r iaf hyfsat ltt att frst om man frstr lite om Mandelbrotmngden. Den ritar upp hela mngden p en skrm som r 60 22 "pixlar" s det blir en ganska grovkornig Mandelbrot. Snarare en ganska liten "ASCII art". ndra X1 och Y1 till antalet kolumner och rader som funkar p din skrm.
S1 och S2 r skalfaktorer fr x resp y, s jag tycker att de istllet borde ha hetat SX resp SY. Och Z1 och Z2 r realdel resp imaginrdel i det komplexa talet z som itereras enl definitionen av Mandelbrotmngden, s jag tycker att de borde ha hetat ZR resp ZI. Men ok, det kan man vl leva med.
Har undringar om rad 130.
PRINT-kommandot r ju det som skriver ut tecknet. Hur vet den var den r p skrmen? Verkar bara skriva direkt till hger om senaste utmatade tecknet. Bra att knna till om man vill f C att skriva i samma position.
Dremot verkar det ensamma PRINT-kommandot p rad 150 ge en radframmatning.
Och det som skrivs ut r CHR$(62-N) dr N r antalet iterationer innan det avbryts av ett villkor p z, eller max 30. Antar att CHR$(62-N) ger det tecken som har 62-N som ASCII-kod. Med N mellan 1 och 30 blir nog inte det s snyggt, med t ex siffror och parenteser och punkter och grejer. Vill du gra ngot liknande i C vill du nog snarare anvnda olika frger beroende p N -- hur man nu gr det i C.
----
En annan id n att porta till C r att lgga in den hr koden i en programmerbar rknare med ngon Basic-dialekt, t ex TI84 etc. Kan behvas ngon mindre ndring som br vara rtt enkel.