Hi Gonzo, hi Martin,
so habe ich's mit Turbo Pascal 5.0 gemacht:
program binko; {Pascal-Dreieck mit farbigen Punkten}
uses crt, graph;
var fa,t,x,y:integer;
m,n:longint;
b: array[0..60,0..60] of longint;
ch:char;
s:string;
procedure graphinit;
var graphdriver, graphmode: integer;
begin
graphdriver:= detect;
initgraph(graphdriver,graphmode,'');
setgraphmode(graphmode);
setbkcolor(15);
end;
procedure dreieck;
begin
for t:=2 to 31 do
begin
str(t,s);
setcolor(9);
outtextxy(10,20,'Pascal-Dreieck:');
outtextxy(10,30,'Durch t teilbare');
outtextxy(10,40,'Binomialkoeffizienten');
outtextxy(10,50,'rot gef„rbt. (t=1...31)');
outtextxy(10,60,'Weiter mit der Leertaste.');
outtextxy(10,70,'Aufh”ren mit A.');
outtextxy(60,120,'t=');outtextxy(76,120,s);
for y:=60 downto 26 do
begin
for x:=0 to 59-y do
begin
n:=60-y;m:=x+1;
if (m=1) or (m=n) then
b[n,m]:=1
else
b[n,m]:=b[n-1,m-1]+b[n-1,m];
if b[n,m] mod t=0 then fa:=12 else fa:=9;
setcolor(fa);setfillstyle(1,fa);
fillellipse(16*x+8*y-150,650-10*y,5,5);
end;
end;
repeat ch:=readkey until (ch=' ') or (ch='a');
if ch=' ' then cleardevice;
if ch='a' then closegraph;
end;
closegraph;
end;
begin
graphinit;
dreieck;
end.
- jedenfalls zunächst. Weil ich mangels ausreichender
Rechengenauigkeit mit den Teilerzahlen t nicht so hoch kam,
wie ich wollte (was an meinen Programmierkünsten liegen
kann), griff ich auf eine alte Programmiersprache namens
Comal zurück. Die kennt kaum jemand, außer in Schleswig-
Holstein, wo sie viele Jahre lang an Gymnasien unterrichtet
wurde, und evtl. noch in ein, zwei süddeutschen Bundesländern.
Mit ihr kam ich bis t=100, und das Programm sieht so aus:
0010 // PASDR.CML
0020 USE system
0030 showkeys(0)
0040 USE turtle
0050 graphicscreen(7)
0060 hideturtle
0070 DIM b(0:60,0:60)
0080 b(1,1):=1
0090 window(-40,40,-30,30)
0100 PRINT AT 1,3: "Pascal-Dreieck:"
0110 PRINT AT 2,3: "Durch t teilbare"
0120 PRINT AT 3,3: "Binomialkoeffizienten"
0130 PRINT AT 4,3: "rot gefärbt. (tmax=100)"
0140 PRINT AT 8,3: "Weiter : Leertaste"
0150 PRINT AT 9,3: "Aufhören: Taste A"
0160 t:=1
0170 FOR t:=2 TO 100 DO
0180 PRINT AT 6,9: "t = ",t
0190 FOR y:=58 TO 1 STEP -1 DO
0200 FOR x:=0 TO 57-y DO
0210 n:=58-y; m:=x+1
0220 IF m=1 OR m=n THEN
0230 b(n,m):=1
0240 ELSE
0250 b(n,m):=b(n-1,m-1)+b(n-1,m)
0260 ENDIF
0270 IF b(n,m) MOD t=0 THEN
0280 fa:=4
0290 ELSE
0300 fa:=10
0310 ENDIF
0320 pc(fa); circle(x+0.5*y-30,y-30,0.3)
0330 fill(x+0.5*y-30,y-30)
0340 ENDFOR x
0350 ENDFOR y
0360 REPEAT ta$:=KEY$ UNTIL ta$ IN " aA"
0370 IF ta$ IN "aA" OR t=100 THEN
0380 clearscreen
0390 END
0400 ENDIF
0410 ENDFOR t
Ich hoffe, Ihr könnt damit etwas anfangen.
Vielleicht macht jemand das Ganze einmal in
C++ oder einer anderen modernen Sprache.
Herzliche Grüße,
Hans-Jürgen
|