Citat:
Ursprungligen postat av
53280
Jättegamla basic kod som jag hittade på någonstans på nätet. Hur skulle ni skriva om denna kod i C , så den gick att kompilera med GCC och köra 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 lätt att förstå om man förstår lite om Mandelbrotmängden. Den ritar upp hela mängden på en skärm 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 skärm.
S1 och S2 är skalfaktorer för x resp y, så jag tycker att de istället borde ha hetat SX resp SY. Och Z1 och Z2 är realdel resp imaginärdel i det komplexa talet z som itereras enl definitionen av Mandelbrotmängden, så jag tycker att de borde ha hetat ZR resp ZI. Men ok, det kan man väl leva med.
Har undringar om rad 130.
PRINT-kommandot är ju det som skriver ut tecknet. Hur vet den var den är på skärmen? Verkar bara skriva direkt till höger om senaste utmatade tecknet. Bra att känna till om man vill få C att skriva i samma position.
Däremot verkar det ensamma PRINT-kommandot på rad 150 ge en radframmatning.
Och det som skrivs ut är CHR$(62-N) där 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 göra något liknande i C vill du nog snarare använda olika färger beroende på N -- hur man nu gör det i C.
----
En annan idé än att porta till C är att lägga in den här koden i en programmerbar räknare med någon Basic-dialekt, t ex TI84 etc. Kan behövas någon mindre ändring som bör vara rätt enkel.