Benutzer:Arbol01/Listings
Erscheinungsbild
Grafik
[Bearbeiten]/* Kreis */ pi = 3.141593 xn = 320 yn = 200 radius = 160 SCREEN 12 FOR index = 1 TO 360 STEP .1 x = SIN((pi / 180) * index) y = COS((pi / 180) * index) xr = x * radius + xn yr = y * radius + yn LINE (xr, yr)-(xr + 1, yr + 1), 1, BF NEXT index
/* P-Orbital */ pi = 3.141593 xn = 320 yn = 200 nradius = 160 SCREEN 12 FOR index = 0 TO 3600 STEP .1 x = SIN((pi / 180) * index) y = COS((pi / 180) * index) r = sin((pi/180)*index) xr = x * r + xn yr = y * r + yn LINE (xr, yr)-(xr + 1, yr + 1), 1, BF NEXT index
/* Propeller */ pi = 3.141593 xn = 320 yn = 200 nradius = 160 SCREEN 12 FOR index = 0 TO 720 STEP .1 x = SIN((pi / 180) * index) y = COS((pi / 180) * index) r = SIN((pi / 60) * index) xr = x * nradius * r + xn yr = y * nradius * r + yn LINE (xr, yr)-(xr + 1, yr + 1), 1, BF NEXT index
/* Kleeblatt */ pi = 3.141593 xn = 320 yn = 200 nradius = 160 SCREEN 12 FOR index = 0 TO 360 STEP .1 x = SIN((pi / 180) * index) y = COS((pi / 180) * index) r = SIN((pi / 90) * index) xr = x * nradius * r + xn yr = y * nradius * r + yn LINE (xr, yr)-(xr + 1, yr + 1), 1, BF NEXT index
/* Spirale */ pi = 3.141593 xn = 320 yn = 200 nradius = 160 SCREEN 12 FOR index = 0 TO 3600 STEP .1 x = SIN((pi / 180) * index) y = COS((pi / 180) * index) r = index / 10 xr = x * r + xn yr = y * r + yn LINE (xr, yr)-(xr + 1, yr + 1), 1, BF NEXT index
/* Apfelmännchen */
DECLARE FUNCTION box! (xpos!, ypos!, xlen!, ylen!, farbe!)
DECLARE FUNCTION complex! (ix!, iy!, r!, i!, m!, gk!)
SCREEN 12
m = 4
gk = 200
maxh = 640
maxv = 480
INPUT "minr: ", minr
INPUT "maxr: ", maxr
INPUT "mini: ", mini
INPUT "maxi: ", maxi
dr = (maxr - minr) / (maxh - 1)
di = (maxi - mini) / (maxv - 1)
FOR iy = 0 TO maxv - 1
FOR ix = 0 TO maxh - 1
r = minr + ix * dr
i = mini + iy * di
k = complex(ix, iy, r, i, m, gk)
IF k = gk THEN
k = 0
ELSE
k = k MOD 9
IF k = 0 THEN k = 9
END IF
empty = box(ix, iy, 1, 1, k)
NEXT ix
NEXT iy
FUNCTION box (xpos, ypos, xlen, ylen, farbe) LINE (xpos, ypos)-(xpos + xlen, ypos + ylen), farbe, BF box = 0 END FUNCTION
FUNCTION complex (ix, iy, r, i, m, gk)
counter = 0
x = 0
y = 0
t = 0
WHILE (t <= m) AND (k < gk)
xt = x * x - y * y + r
yt = 2 * x * y + i
counter = counter + 1
t = xt * xt + yt * yt
x = xt
y = yt
WEND
complex = counter
END FUNCTION
/* Apfelmännchen-Orbitale */
DECLARE FUNCTION box! (xpos!, ypos!, xlen!, ylen!, farbe!)
OPEN "orbit1.txt" FOR OUTPUT AS #1
SCREEN 12
m = 4
gk = 250
dx = 320
dy = 240
r = -.5
i = -.5
FOR i = -1 TO 0 STEP .02
FOR r = -1 TO 0 STEP .02
k = 0
x = 0
y = 0
t = 0
ox = 1
oy = 1
CLS
WHILE (t <= m) AND (k < gk)
xt = x * x - y * y + r
yt = 2 * x * y + i
k = k + 1
t = xt * xt + yt * yt
x = xt
y = yt
lx = (x + 1) * 640
ly = (y + 1) * 480
empty = box(lx, ly, lx, ly, 2)
ox = lx
oy = ly
WEND
IF k = 250 THEN PRINT #1, r, i
NEXT r
NEXT i
FUNCTION box (xpos, ypos, xlen, ylen, farbe) LINE (xpos, ypos)-(xpos + xlen, ypos + ylen), farbe, BF box = 0 END FUNCTION
/* Interferenz */
SCREEN 12
DIM st(8)
st(0) = 160
st(1) = 80
st(2) = 40
st(3) = 20
st(4) = 10
st(5) = 5
st(6) = 2
st(7) = 1
INPUT "zoomfaktor:", zf
INPUT "farbtiefe:", cd
INPUT "farbzahl:", cn
pi = 3.1415926535#
fk = (zf * pi)
FOR s = 0 TO 7
FOR y = 0 TO 479 STEP st(s)
FOR x = 0 TO 639 STEP st(s)
col = SIN((-1 * (zf / 2) * pi) + x * (fk / 640)) - SIN((-1 * (zf / 2) * pi) + y * (fk / 480))
col = (col + 1) * cd
col = col MOD cn
IF col <> 0 THEN col = 11
LINE (x, y)-(x + (st(s) - 1), y + (st(s) - 1)), col, BF
NEXT x
NEXT y
NEXT s
/* Farbtabelle */
to line make "ll1 [] make "ll2 [] make "x1 ((random 400) - 200) make "y1 ((random 400) - 200) make "x2 ((random 400) - 200) make "y2 ((random 400) - 200) make "ll1 lput :x1 :ll1 make "ll1 lput :y1 :ll1 make "ll2 lput :x2 :ll2 make "ll2 lput :y2 :ll2 make "colr random 8 setpc :colr pu setpos :ll1 pd setpos :ll2 end
to lines repeat 512 [line] end
Mathe-Spiele
[Bearbeiten] /* RAO (BASIC)
CLS
DIM e(6)
e(0) = 10
e(1) = 100
e(2) = 1000
e(3) = 10000
xs1 = 10
xs2 = 1
xs3 = 5
xs4 = 6
ys = 0
yad = 50
FOR x = 0 TO 10000 STEP 10
FOR y = 0 TO 10000 STEP 10
z1 = (xs1 + x) ^ 2 + (ys + y) ^ 2
z2 = (xs2 + x) ^ 2 + (ys + y) ^ 2
z3 = (xs3 + x) ^ 2 + (ys + y) ^ 2
z4 = (xs4 + x) ^ 2 + (ys + y) ^ 2
f1 = e(FIX(LOG(xs1 + x) / LOG(10)))
f2 = e(FIX(LOG(xs2 + x) / LOG(10)))
f3 = e(FIX(LOG(xs3 + x) / LOG(10)))
f4 = e(FIX(LOG(xs4 + x) / LOG(10)))
c1 = ((ys + y) * f1 + (xs1 + x))
c2 = ((ys + y) * f2 + (xs2 + x))
c3 = ((ys + y) * f1 + (xs3 + x))
c4 = ((ys + y) * f2 + (xs4 + x))
IF c1 = z1 THEN PRINT (ys1 + y), (xs1 + x), z1, c1
IF c2 = z2 THEN PRINT (ys1 + y), (xs2 + x), z2, c2
IF c3 = z3 THEN PRINT (ys2 + y), (xs1 + x), z3, c3
IF c4 = z4 THEN PRINT (ys2 + y), (xs2 + x), z4, c4
NEXT y
NEXT x
/* Binomialkoeffizient - 4GL */
MAIN
DEFINE ergebnis INTEGER,
wert1 INTEGER,
wert2 INTEGER
PROMPT "n : " FOR wert1
PROMPT "k : " FOR wert2
CALL binomial_koeffizient(wert1,wert2) RETURNING ergebnis
DISPLAY ergebnis
END MAIN
FUNCTION binomial_koeffizient(n,k)
DEFINE ergebnis1 INTEGER,
ergebnis2 INTEGER,
n INTEGER,
k INTEGER
IF ((k = 0) AND (n >= 0)) OR ((k = n) AND (k >= 0)) THEN
LET ergebnis1 = 1
RETURN ergebnis1
END IF
IF (n > k) AND (k > 0) THEN
CALL binomial_koeffizient(n-1,k-1) RETURNING ergebnis1
CALL binomial_koeffizient(n-1,k) RETURNING ergebnis2
LET ergebnis1 = ergebnis1 + ergebnis2
RETURN ergebnis1
END IF
END FUNCTION
Zeiger
[Bearbeiten]/* Abstrakter Stack - ADA */
WITH integer_text_io, text_io;
USE integer_text_io, text_io;
PROCEDURE abstrackter_stack IS
PACKAGE stackpack IS
TYPE stack;
TYPE zeiger IS ACCESS stack;
TYPE stack IS RECORD
inhalt : integer;
vorgaenger : zeiger ;
nachfolger : zeiger ;
END RECORD;
PROCEDURE push(wert : integer);
PROCEDURE rotate;
FUNCTION pop RETURN integer;
FUNCTION empty RETURN boolean;
END stackpack;
stack_counter : integer;
zahl : integer;
number : integer;
PACKAGE BODY IS
top:zeiger:=null;
PROCEDURE push(wert:integer) IS
feld : zeiger;
s1 : zeiger;
s2 : zeiger;
index : integer;
BEGIN
feld := NEW stack;
IF stack_counter = 0 THEN
top := feld; -- Wenn noch kein Feld vorhanden ist
feld.vorgaenger := feld; -- muss erstmal eines eingerichtet
feld.nachfolger := feld; -- werden.
feld.inhalt := wert;
END IF;
IF stack_counter = 1 THEN
feld.vorgaenger := top; -- Da bei zwei Feldern beide aneinander
feld.nachfolger := top; -- haengen, braucht das zweite nur auf
top.vorgaenger := feld; -- das erste und das erste nur auf das
top.nachfolger := feld; -- zweite zu zeigen.
feld.inhalt := wert;
IF top.inhalt < wert THEN
top := top.nachfolger;
END IF;
END IF;
IF stack_counter > 1 THEN
IF top.nachfolger.inhalt > wert or top.inhalt < wert THEN
-- Hier wird nach einem kleinsten und groessten Element gesucht
feld.vorgaenger := top;
feld.nachfolger := top.nachfolger;
top.nachfolger.vorgaenger := feld;
top.nachfolger := feld;
feld.inhalt := wert;
IF top.inhalt < wert THEN
top := top.nachfolger;
END IF;
ELSE -- ansonsten wird normal eingefuegt
s1 := top.nachfolger;
s2 := top.nachfolger.nachfolger;
index := 0;
WHILE index <= stack_counter-1 LOOP
IF wert >= s1.inhalt and wert <= s2.inhalt THEN
feld.vorgaenger := s1;
feld.nachfolger := s2;
s1.nachfolger := feld;
s2.vorgaenger := feld;
feld.inhalt := wert;
ELSE
s1 := s1.nachfolger;
s2 := s2.nachfolger;
END IF
index := index + 1;
END LOOP;
END IF;
END IF;
stack_counter := stack_counter + 1;
END push;
PROCEDURE rotate IS -- Diese Prozedur zeigt alle
index : integer; -- Elemente des Stacks an
BEGIN
FOR index IN 1..stack_counter LOOP
PUT(top.inhalt);
PUT_LINE("");
top := top.vorgaenger;
END LOOP;
END ROTATE;
FUNCTION pop RETURN integer IS
s1 : zeiger;
s2 : zeiger;
wert : integer;
BEGIN
IF stack_counter = 1 THEN
wert := top.inhalt;
top := null;
END IF;
IF stack_counter > 1 THEN
wert := top.inhalt;
s1 := top.vorgaenger;
s2 := top.nachfolger;
top := s1;
s1.nachfolger := s2;
s2.vorgaenger := s1;
END IF;
IF stack_counter = 0 THEN
PUT_LINE("ausgegebener Wert ist Falsch, da der Stack leer ist!");
-- wo nichts ist, kann auch nichts ausgegeben werden
END IF;
stack_counter := stack_counter - 1;
RETURN wert;
END;
FUNCTION empty RETURN boolean IS -- Ist der Stack leer?
BEGIN
RETURN top = null;
END empty;