Felder  

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.

QUELLTEXT 

(**************************************************************************)
(*                                                                        *)
(*                      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.