Nemes Tihamér OKSzTV'90

Első forduló

9-10. osztályosok

1990.



1. feladat: (4 pont)
A következő algoritmus egy kifejezés zárójelezésének helyességét ellenőrzi. Milyen hibajelenségek tartoznak az egyes HIBAx utasításokhoz?
 
Ellenőrzés(X$):
  DB:=0
  Ciklus I=1-től X$ hosszáig
    Y$:=X$ I. betűje
    Ha Y$="(" akkor DB:=DB+1
    Különben Ha Y$=")" akkor DB:=DB-1
    Ha DB<0 akkor HIBA1
  Ciklus vége
  Ha DB>0 akkor HIBA2
Eljárás vége.


2. feladat: (15 pont)
A következő két algoritmus egy labirintusból vezet ki:
 
A:
Labirintus:
  Ciklus amíg nem ért ki
    Balrafordulás
    Ciklus amíg fal van előtte
      Jobbrafordulás
    Ciklus vége
    Előrelépés
  Ciklus vége
Eljárás vége.
B:
Labirintus(X,Y):
  Ciklus amíg nem ért ki
    Ha szabad(X,Y-1) 
    akkor Y:=Y-1
    különben Ha szabad(X-1,Y)
             akkor X:=X-1
  Ciklus vége
Eljárás vége.
Az ábrán egy labirintus látható, amelynek kijárata a bal felső sarokban van. Másold le két példányban, és jelöld meg benne x-szel azokat a helyeket, amelyekről elindulva előfordulhat, hogy a fenti A és B algoritmusok nem vezetnek ki a labirintusból! Milyen tulajdonságú labirintusokból, illetve pontokból vezet ki biztosan A, illetve B?


3. feladat: (10 pont)
Az alábbi szintaxisábrák alapján döntsd el, hogy szintaktikailag melyik karaktersorozat helyes és melyik hibás! Magyarázd meg a válaszaidat!
 
'letter' bármely kisbetű 'a' és 'z' között
'digit' bármely számjegy '0' és '9' között
'special' az aláhúzás (_) vagy a hátratört-vonal (\)
a) april$ b) _apr$a c) apRIL
d) \\apr$a e) \apr$aa$a f) apr4$aa


4. feladat: (13 pont)
A következő kártyakeverő programban a megjelölt helyen 4 különböző programrész állhat:
 
FOR I:=1 TO 32 DO LAP[I]:=I
FOR I:=1 TO 32 DO BEGIN
  (**)
  KIRAJZOL(J)
END

A négy beilleszthető rész a következő:
 
(*1*)
J:=VÉLETLEN(32);
(*3*)
K:=VÉLETLEN(32);
J:=LAP[K];
LAP[K]:=LAP[I];
LAP[I]:=J
(*2*)
REPEAT
  J:=VÉLETLEN(32)
UNTIL LAP[J]>0;
LAP[J]:=0;
(*4*)
K:=VÉLETLEN(33-I)+I-1;
J:=LAP[K];
LAP[K]:=LAP[I];
LAP[I]:=J;

A program egy 32 lapból álló, megkevert pakli lapjait rajzolja ki. Az egyes kártyalapokat az 1, 2, ..., 32 számok képviselik, a KIRAJZOL eljárás egy lapot rajzol ki a képernyőre, a VÉLETLEN(SZÁM) függvény pedig egy 0-nál nagyobb és SZÁM-nál nem nagyobb véletlen egész számot állít elő. Szabályosnak akkor számít a keverés, ha minden lap egyszer és csak egyszer  fordul elő, mégpedig bármelyik helyen azonos eséllyel.
A:

Melyik algoritmus kever szabályosan és melyik nem?
B:
A szabálytalanul keverő változatokról írd le, hogy mit csinálnak!
C:
Tudsz-e valamit mondani arról, hogy a (*2*) változat a FOR-ciklus magjának egy-egy végrehajtása során hányszor hívja meg a VÉLETLEN() függvényt?


5. feladat: (7 pont)
Adott a következő BASIC nyelvű program:
10 DIM D(300) : FOR I=1 TO 300 : D(I)=0 : NEXT I
20 INPUT "HÁNY SZÁM LESZ"; N
30 FOR I=1 TO N
40   INPUT J : IF J<>INT(J) OR J<1 OR J>300 THEN PRINT "HIBÁS" : GOTO 40
50   D(J)=D(J)+1
60 NEXT I
70 FOR I=1 TO 300
80   IF D(I)>0 THEN FOR J=1 TO D(I) : PRINT I : NEXT J
90 NEXT I
Mit csinál a program a beadott számokkal (egy mondatban a lényeget)?


6. feladat: (8 pont)
Számítógéppel titkosítottak egy értelmes magyar SZÓ-t. A program lefutása után közölték velünk az előállított KÓD-ot, de a használt KULCS-ot nem. A kódoláskor használt algoritmus a következő volt:
 
Kódolás:
  KÓD(0):=KULCS
  Ciklus I=1-től HOSSZ-ig
    KÓD(I):=SZÓ(I) művelet KÓD(I-1)
  Ciklus vége
Eljárás vége.

Az 1-től HOSSZ-ig indexelt SZÓ tömb a kódolandó, a 0-tól HOSSZ-ig indexelt KÓD tömb pedig a kódolt szót tartalmazza.

A KÓD (1-től HOSSZ-ig) ez lett: CJNKL. Az alábbi igazságtáblával megadott műveletet a számítógép az operandusokon bitenként végzi el (A és B az operandusok, C az eredmény).

Művelet:
 
A 0 1 0 1
B 0 0 1 1
C 0 1 1 0

A használható betűk és kódjaik:
 
- 0000 A 0001 B 0010 C 0011
D 0100 E 0101 F 0110 G 0111
H 1000 I 1001 J 1010 K 1011
L 1100 M 1101 N 1110 O 1111

Mi volt az eredeti, értelmes magyar szó (megjegyzés: az első betű kitalálásához az algoritmus nem ad segítséget), és mi volt a KULCS?

Magyarázd meg, hogyan jöttél rá a megoldásra!


Elérhető összpontszám: 57 pont