You are on page 1of 4

Programozás I. vizsgafeladat, 2.

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!

Például: a következõ példában z-vel jelöltük a keresztrejtvény zárt négyzeteit.

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

Feltölt Bevitel Értékelés

Be: X X<>0 X:1→ MaxX

* 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 ;

Function Zart(X,Y: Byte): Boolean ;


Begin
Zart :=
(Rejtveny[X,Y] = Feher) And
((Rejtveny[X-1,Y] = Fekete) And (Rejtveny[X+1,Y] = Fekete) Or
(Rejtveny[X,Y-1] = Fekete) And (Rejtveny[X,Y+1] = Fekete)) ;
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-

You might also like