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.