Professional Documents
Culture Documents
KRejtv
KRejtv
forduló
Keresztrejtvény
Azonosító: Krejtv
Készítette: Angster Erzsébet (1998.05.08.), Lektorálta: Lõcs Gyula
Feladatspecifikáció
Készítsünk egy keresztrejtvényt! A keresztrejtvény egy 40*20-as mátrix, melynek elemei fehér, illetve
fekete négyzetek.
1. Adja meg billentyûzetrõl a fekete négyzeteket (X,Y koordinátákat)!
2. Írja ki a keresztrejtvényben elõforduló zárt négyzetek koordinátáit. Zárt négyzetnek számít
az a fehér négyzet, melyet vagy felülrõl és alulról, vagy balról és jobbról határol fekete
négyzet. Tekintsük a szélsõ elemek azon szomszédait, melyek a keresztrejtvényen kívül
esnek, fekete négyzeteknek!
z z
z z z
z
z
-1-
Megoldás
Adatok
A keresztrejtvény mérete: MaxX*MaxY
A rejtvényt kiegészítjük határoló fekete négyzetekkel, így a határokat könnyebb lesz vizsgálni.
Rejtveny: Tömb(0..MaxX+1,0..MaxY:Boolean)
Fekete=True
Fehér=False
A tömb értéke Fekete, ha a négyzet fekete, egyébként Fehér.
Programterv
KRejtv
* Sor *
Egy koord. pár
Y:1→ MaxY
Oszlop*
Be: Y Rejtveny[X,Y] Be: X
← Fekete
Zárt(X,Y)
o
Ki: X,Y
Tevékenységjegyzék:
• Feltölt: Rejtveny tömb széleinek feltöltése Fekete értékekkel, belsejének feltöltése Fehér
értékekkel.
Feltételjegyzék:
• Zárt(X,Y): True, ha az adott koordinátájú négyzet fehér, és a két vízszintes vagy a két
függõleges szomszédja fekete.
-2-
Turbo Pascal forráskód
Program KRejtv ;
Uses Crt ;
Const
MaxX = 40 ;
MaxY = 20 ;
Feher = True ;
Fekete = False ;
Var
Rejtveny: Array[0..MaxX+1,0..MaxY+1] Of Boolean ;
Procedure Feltolt ;
Var
I,J : Byte ;
Begin
For I := 0 To MaxX+1 Do
Begin
Rejtveny[I,0] := Fekete ;
Rejtveny[I,MaxY+1] := Fekete ;
End ;
For J := 0 To MaxY+1 Do
Begin
Rejtveny[0,J] := Fekete ;
Rejtveny[MaxY+1,J] := Fekete ;
End ;
For I := 1 To MaxX Do
For J := 1 To MaxY Do
Rejtveny[I,J] := Feher ;
End ;
Procedure Bevitel ;
Var
X,Y : Byte ;
Begin
Write('X: ') ; ReadLn(X) ;
While X <> 0 Do
Begin
Write('Y: ') ; ReadLn(Y) ;
Rejtveny[X,Y] := Fekete ;
WriteLn ;
Write('X: ') ; ReadLn(X) ;
End ;
End ;
Procedure Ertekeles ;
Var
X, Y : Byte ;
Begin
WriteLn('Zárt négyzetek: ') ;
For X := 1 To MaxX Do
For Y := 1 To MaxY Do
If Zart(X,Y) Then
WriteLn(X:3,Y:3) ;
-3-
End ;
Begin
Feltolt ;
Bevitel ;
Ertekeles ;
End.
-4-