Problemstellung
Mithilfe eines Simulationsprogrammes soll die Häufigkeit der Augensummen von zwei Würfeln ermittelt werden. Mit dem Zufallsgenerator lassen sich leicht zwei Würfelzahlen und daraus die Augensumme bestimmen.
ARRAY
Unter einem Feld (ARRAY) versteht man die Zusammenfassung mehrer Variablen gleichen Typs integer; byte; word; char; string) unter einem Namen. Ein einzelnes Feldelement kann über seinen Index aufgerufen werden, der den Platz des Elements im Feld angibt.
Die Definition des Feldes erfolgt hinter dem Schlüsselwort VAR, kann aber auch im Deklarationsteil hinter TYPE erfolgen. Sollen Felder an Prozeduren übergeben werden so müssen sie hinter TYPE definiert werden, damit der Typ bei der aufgerufenen Prozedur angegeben werden kann.
Hinter dem Syntax ARRAY muss in eckigen Klammern der Bereich für den Index, hinter dem Wort OF der Typ der einzelnen Feldnamen stehen.
Beim Aufruf eines Feldnamens muss hinter dem Feldnamen in eckigen Klammern der Index angegeben werden. Dieser kann ein Zahlenwert sein.
Felder können an Prozeduren sowohl als Variablen - als auch Werteparameter übergeben werden.
In READ bzw. WRITE- Anweisungen können Felder nur elementweise über eine FOR - Schleife ein- bzw. ausgegeben werden.
(**************************************************************************) (* *) (* Simulation mit ZWEI Wuerfeln *) (* *) (**************************************************************************)
program Wuerfel;
uses crt; type pw = array[2..12] of real; ausgabe = array[2..12] of integer; haeufig_keit= array[1..1000] of word;
var i,n : integer;
haeufigkeit : haeufig_keit;
prozent : pw;
strecke : ausgabe;
max : real; augenzahl_1,augenzahl_2,augenzahl_summe : integer;
{ooooooooooooooooooooooooo BEGINN O O P oooooooooooooooooooooooooo}type balken = object
xl,xr,yo,yu : byte; {+++Koordinaten des balkens+++}
farbe : integer;
constructor ini(pxl,pyo,pxr,pyu,pfarbe : byte);
procedure oeffnen; procedure schliessen;
end; titelbalken = Object (balken)
ziffer : byte;
xa,ya : byte;
constructor ini(pxl,pyo,pxr,pyu,pfarbe : byte;
p_ziffer : byte;
pxa,pya : byte);
procedure oeffnen; procedure schliessen;
end;
constructor balken.ini(pxl,pyo,pxr,pyu,pfarbe : byte);
begin
xl := pxl; yo := pyo; xr := pxr; yu := pyu; farbe := pfarbe;
end;procedure balken.oeffnen;
var i,j : integer;
begin
window(xl+1,yo+1,xr-1,yu-1);
for i := 1 to (xr - xl +1 ) do
for j := 1 to (yu - yo +1 ) do
begin
gotoxy(i,j);textbackground(farbe);write(' ');
end;
clrscr;window(1,1,80,25);
end;procedure balken.schliessen;
begin
clrscr;
window(1,1,80,25);
end;constructor titelbalken.ini(pxl,pyo,pxr,pyu,pfarbe : byte;
p_ziffer : byte;
pxa,pya : byte);begin
ziffer := p_ziffer;
xa := pxa; ya := pya;
balken.ini(pxl,pyo,pxr,pyu,pfarbe);
end;procedure titelbalken.oeffnen;
begin
balken.oeffnen;
gotoxy(xa,ya);
write(ziffer);
end;procedure titelbalken.schliessen;
begin
window(1,1,80,25);textbackground(black);clrscr;
end;{ooooooooooooooooooooooooo ENDE O O P oooooooooooooooooooooooooo}
var balken1 : balken; {Instanzen der Objekte}
titelbalken1 : titelbalken;
Procedure eingabe(var n :integer);
begin
gotoxy(10,3);textcolor(red);write('++++++++++Simulation mit zwei Wuerfeln++++++++++');
gotoxy(10,5);textcolor(black);write('Anzahl der Simulationslaeufe: '); readln(n);
end;procedure Berechnung_haeufigkeit( n :integer; var haeufigkeit : haeufig_keit;prozent : pw);
var max :real;begin
for i:=2 to 126 do haeufigkeit[i] := 0;
window(3, 3, 79, 22);textcolor(black);
for i:=1 to n do
begin
augenzahl_1 := random(6) + 1;
augenzahl_2 := random(6) + 1;
augenzahl_summe := augenzahl_1 + augenzahl_2;
inc(haeufigkeit[augenzahl_summe]);
end;
for i := 2 to 12 do
begin
gotoxy(3,7);write('Absolute Haeufigkeiten',' ':3,'theoretischer Wert: ',n/6:6:2,' ');
gotoxy(3,7+i); write('Augensumme ',i:4,': ',haeufigkeit[i]:5);
end;
end;
procedure berechnung_strecke(haeufigkeit : haeufig_keit; var prozent : pw; var strecke : ausgabe);
begin
for i:=2 to 12 do
begin
prozent[i] := haeufigkeit[i]/n * 100 ;
strecke[i] := round(prozent[i]) ;
gotoxy(35,7+i); textcolor (green);write(prozent[i]:10:2,' % ');
end;
end;procedure darstellung(strecke:ausgabe;prozent :pw);
var i :integer;
begin textcolor(black);
balken1.ini(1,1,80,2,0);
balken1.oeffnen;for i := 2 to 12 do
begin
strecke[i]:=24-strecke[i];
titelbalken1.ini(3*i+5,strecke[i],3*i+8,25,random(7)+1,i,3*i+6,24);
titelbalken1.oeffnen;end;
textcolor(6);
titelbalken1.ini(45,2,75,22,6,0,47,6);
titelbalken1.oeffnen; for i:=2 to 12 do
begin
textcolor(black);
gotoxy(50,4); write('+++++AUSWERTUNG+++++');
gotoxy(47,5); write('fuer ',n,' Simulationslaeufe');
gotoxy(52,5+i);write(i:3,' ',prozent[i]:6:2,' %');
end;end;
{+++++++++++++++++++++HAUPTPROGRAMMM++++++++++++++++++++++++}
begin
repeat
clrscr; balken1.ini(1,1,80,25,7);
balken1.oeffnen; randomize;
eingabe(n); berechnung_haeufigkeit(n,haeufigkeit,prozent); readln;
berechnung_strecke(haeufigkeit,prozent,strecke); window(1, 1, 80, 25);
gotoxy(20, 24);textcolor(red);
write('Weiter mit grafischer Darstellung <TASTE> ');
until ord(readkey) = 13;
balken1.schliessen;
balken1.ini(1,1,80,25,0);
balken1.oeffnen;darstellung(strecke,prozent);
readln; end.

