Hi!
Hiffe mir kann jemand helfen, bei vollgenden Fragen komme ich nciht weiter:
Aufgabe: Erweitern Sie das Programm so, dass ständig die Häufigkeit von Zustand a und Zustand b aus dem Monitor angezeigt werden!
Ersetzen Sie im 4. Teil die harte Abbruchbedingung KeyPressed durch eine Sinnvolle Bedingung ( das Programm soll enden, wenn alle Felder mit Smily oder Strichen ausgefüllt sind)
Vielen Dank für eure Hilfe!!!
Hier das Programm:
PROGRAM Ein_Phaenomen;
{ *** Phaenom.pas *** }
USES Crt;
CONST cZeilenzahl = 10;
cSpaltenzahl = 20;
p = 1; {Pause nach jedem Schritt in ms}
{f�r langsame PCs den Wert auf 0 setzen!}
TYPE TZeilen = 1…cZeilenzahl;
TSpalten = 1…cSpaltenzahl;
TZustand = (a, b);
TZustandsmatrix = ARRAY [TZeilen, TSpalten] OF TZustand;
VAR f : TZustandsmatrix;
z0, z1: TZeilen;
s0, s1: TSpalten;
{---------------------- 1. T e i l ------------------------}
PROCEDURE Druck(w: TZustand);
BEGIN
CASE w OF
a: Write(Chr(1)); { „weiáes Gesicht“ }
b: Write(’-’)
END;
END;
{---------------------- 2. T e i l ------------------------}
PROCEDURE ZufaelligeAnfangsbelegung(VAR f: TZustandsmatrix);
TYPE TNullBisEins = 0…1;
VAR i: TZeilen;
k: TSpalten;
r: TNullBisEins;
BEGIN
FOR i := 1 TO cZeilenzahl DO
FOR k := 1 TO cSpaltenzahl DO
BEGIN
r := Random(2);
f[i, k] := TZustand®;
GotoXY(k, i);
Druck(f[i, k]);
END;
writeln;writeln;
writeln(‚Anfangszustand ist initialisiert!‘);
writeln(‚Zum Start bitte dr�cken!‘);
readln;
write(‚Und nun geduldig beobachten!‘,chr(1));
END;
{---------------------- 3. T e i l ------------------------}
PROCEDURE ZufaelligeWahlEinesNachbarn(zAlt: TZeilen;
sAlt: TSpalten;
VAR zNeu: TZeilen;
VAR sNeu: TSpalten);
TYPE TNullBisSieben = 0…7;
VAR zeile, spalte: Integer;
r : TNullBisSieben;
BEGIN
r := Random(8); { r ist der zuf„llige Nachbar }
CASE r OF
0…2: zeile := zAlt - 1;
3, 7: zeile := zAlt;
4…6: zeile := zAlt + 1
END;
CASE r OF
2…4: spalte := sAlt - 1;
1, 5: spalte := sAlt;
6, 7, 0: spalte := sAlt + 1
END;
{ Ber�cksichtigung der Seiten und Ecken: }
IF zeile = 0 THEN zeile := cZeilenzahl;
IF zeile = cZeilenzahl + 1 THEN zeile := 1;
IF spalte = 0 THEN spalte := cSpaltenzahl;
IF spalte = cSpaltenzahl + 1 THEN spalte := 1;
zNeu := zeile; sNeu := spalte
END;
{---------------------- 4. T e i l ------------------------}
BEGIN
ClrScr;
GotoXY(22, 6);
Write(’" D o p p e l t e r Z u f a l l "’);
GotoXY(27, 9);
Writeln(’ Beginn mit !’);
Writeln;
GotoXY(27, 11);
Writeln(’ Abbruch durch !’);
readln;
ClrScr;
Randomize;
ZufaelligeAnfangsbelegung(f);
REPEAT
z0 := Random(cZeilenzahl) + 1;
s0 := Random(cSpaltenzahl) + 1;
ZufaelligeWahlEinesNachbarn(z0, s0, z1, s1);
f[z0, s0] := f[z1, s1]; { šbernahme des Zustands }
GotoXY(s0, z0);
Delay§;
Druck(f[z0, s0])
UNTIL KeyPressed
END.