10.1 

Mit csinál a következő program?

   10 INPUT A,B,C
   20 C=A=B
   30 IF A=B=C THEN PRINT "EGYENLOK"


 10.2 

Mit csinál a következő program? ( X, Y egész számok! )

   10 INPUT X,Y
   20 Z=0
   30 IF Y=0 THEN 60
   40 IF Y/2=INT(Y/2) THEN X=2*X : Y=Y/2 ELSE Z=Z+X : Y=Y-1
   50 GOTO 30
   60 PRINT Z


 10.3 

Mit csinál a következő program? ( X, Y pozitív egészek! )

   10 INPUT X,Y
   20 Z=1
   30 IF Y=0 THEN 60
   40 IF Y/2<>INT(Y/2) THEN Y=Y-1 : Z=Z*X ELSE X=X*X : Y=Y/2
   50 GOTO 30
   60 PRINT Z


 10.4 

Mit csinál a következő program? ( X>0 ! )

   10 INPUT X
   20 A=0 : B=1 : C=1
   30 IF B<=X THEN A=A+1 : C=C+2 : B=B+C : GOTO 30
   40 PRINT A


 10.5 

Mit csinál a következő program? ( A>0, egész! )

   10 INPUT A
   20 C=0
   30 FOR I=5 TO 1 STEP -1
   40 C=10*C-1 : K=10**I
   50 IF A>=0 THEN C=C+1 : A=A-K : GOTO 50
   60 A=A+K
   70 NEXT I
   80 PRINT C


 10.6 

Mit csinál a következő program? ( A, B pozitív egészek! )

   10 INPUT A,B
   20 IF A=B THEN 50
   30 IF AB THEN X=A : A=B : B=X
   30 IF A"," THEN 70
   50 PRINT X$
   60 IF A$="," THEN 10 ELSE STOP
   70 IF A$=" " THEN 90
   80 X$=X$+A$
   90 GOTO 20


 10.10 *

Mit csinál a következő Pascal nyelvű programrészlet?

   READLN(A,B);
   IF A1 THEN ALFA(ROUND(I));
   END;
   BEGIN
   I:=1; J:=5; K:=1;
   ALFA(K);
   ...


 10.12 *

Mit csinál a következő eljárás?

   Program:
      Szóolvas(szó, elválasztó)
      Ki: szó
      Ciklus amíg elválasztó=","
         Szóolvas(szó, elválasztó)
         Ki: szó
      Ciklus vége
   Program vége

   Szóolvas(szó, elválasztó)
      szó:= üres
      Betűolvas(betű)
      Ciklus amíg betű<>"," és betű<>"."
         Szó végére betű
         Betűolvas(betű)
      Ciklus vége
      Elválasztó:= betű
   Eljárás vége

   Betűolvas(betű)
      Be: betű
      Ciklus amíg betű=" "
         Be: betű
      Ciklus vége
   Eljárás vége


 10.13 **

A lista alapján (futtatás nélkül) állapítsuk  meg,  hogy  mit
csinál  a  következő  program!  (a  program  C=Plus/4   gépre
készült)

   10 X=1 : Y=2 : E=1000 : DIM V(300)
   20 Z=2*Y : Z=Z-E*INT(Z/E)
   30 B(X)=Z : IF X=1 THEN X=X+1 : Y=Z : GOTO 20
   40 FOR L=1 TO X-1
   50 IF V(L)<>V(X) THEN 60 ELSE 80
   60 NEXT L
   70 Y=Z : X=X+1 : GOTO 20
   80 PRINT X-L


 10.14 **

A lista alapján állapítsuk meg, hogy mit csinál  a  következő
program! (a program C=Plus/4 gépre készült)

    5 SCNCLR
   10 DIM B(500)
   20 I=1 : A=2
   30 A=2*A-1000*INT(2*A/1000)
   40 B(I)=A
   50 IF I=1 THEN I=I+1 : GOTO 30
   60 FOR K=1 TO I-1
   70 IF B(K)<>B(I) THEN 100
   80 NEXT K
   90 I=I+1 : GOTO 30
   100 PRINT : PRINT"A PERIODUS ";I-K;"ELEMU." : PRINT
   110 PRINT" A PERIODUS ELSO ELEME A SOROZAT ";K+1;
       ".  TAGJA." : PRINT
   120 PRINT"A PERIODUS ELEMEI:"
   130 Q$="####"
   140 FOR L=K TO I-1
   150 PRINTUSINGQ$;B(L);
   160 NEXT L


 10.15 

Állapítsuk meg, hogy miben különbözik az alábbi  két  program
futási képe! (C= Plus/4 gépen!)

   10 SCNCLR : S$=""
   20 INPUT N : IF N<2 OR N>8 OR N<>INT(N) THEN 20
   30 FOR I=1 TO N : S$=S$+"*" : NEXT I
   40 FOR K=1 TO N : PRINTTAB(4*K);S$ : NEXT K

   10 SCNCLR : S$=""
   20 INPUT N : IF N<2 OR N>8 OR N<>INT(N) THEN 20
   30 FOR K=1 TO 2*N : S$=S$+"*" : NEXT K
   40 FOR L=1 TO N : PRINTTAB(2*L);S$ : NEXT L


 10.16 

Állapítsuk meg, hogy miben különbözik az alábbi  két  program
futási képe! (C= Plus/4 gépen!)

   10 SCNCLR : S$=""
   20 INPUT N : IF N<2 OR N>8 OR N<>INT(N) THEN 20
   30 FOR I=1 TO 2*N : S$=S$+"*" : NEXT I
   40 FOR K=1 TO N : PRINTTAB(N-K+1);S$ : NEXT K

   10 SCNCLR : S$=""
   20 INPUT N : IF N<2 OR N>8 OR N<>INT(N) THEN 20
   30 FOR K=1 TO N : S$=S$+"**" : NEXT K
   40 FOR L=N TO 1 STEP -1 : PRINTTAB(L);S$ : NEXT L


 10.17 *

Fejezzük be a 20 cimkéjű sort - újabb utasítás  felhasználása
nélkül! - úgy, hogy ha N értéke 2 és 7  közötti  egész  szám,
akkor a szám négyzetét írja ki a képernyőre, más szám  esetén
0-t!

   10 INPUT N
   20 PRINT


 10.18 *

Fejezzük be a 20 cimkéjű sort - újabb utasítás  felhasználása
nélkül! - úgy, hogy ha A, B, C értékei lehetnek egy háromszög
oldalainak mérőszámai, akkor írja ki a képernyőre a szám  ab-
szolut értékének 1 tizedesre kerekített értékét!

   10 INPUT A,B,C
   20 PRINT


 10.19 *

Fejezzük be a 20 cimkéjű sort - újabb  utasítás  és  az  ABS-
függvény felhasználása  nélkül! - úgy, hogy a beírt szám elő-
jelétől függetlenül írja ki a képernyőre a szám abszolut  ér-
tékének 1 tizedesre kerekített értékét!

   10 INPUT X
   20 PRINT


 10.20 **

A következő BASIC utasítássorokat számozzuk  meg  (10-150-ig,
10-esével) úgy, hogy értelmes és hibátlan programot  kapjunk!
Minden sort használjunk fel, a sorokban lévő hivatkozási szá-
mokat ne változtassuk meg!

   FOR J=LEN(A$) TO 1 STEP -1
   A$=""
   B$=B$+" "
   IF K=0 THEN PRINT A$;" " ; : GOTO 40
   GOTO 40
   PRINT MID$(A$,J,1);
   I=I+1
   K=1-K
   NEXT J
   IF I=LEN(B$) THEN PRINT"." : END
   PRINT " ";
   K=1 : I=0
   IF A$="" THEN 50
   INPUT B$
   IF MID$(B$,I,1)<>" " THEN A$=A$+MID$(B$,I,1) : GOTO 50


 10.21 *

Oldjuk meg az előbbi feladatot a  következő  futtatási  képek
segítségével!:

   (1)  RUN
        ?VASKEZ+ UTAS HAVAT RAKAT
        VASKEZ+ SATU HAVAT TAKAR.

   (2)  RUN
        ?BARMIT IROK MINDIG KEVER
        BARMIT KORI MINDIG REVEK.


 10.22 

Írjunk olyan tesztadatokat, amellyel  a  következő  programok
összes utasítása legalább egyszer végrehajtható! Olyan teszt-
adatokat is készítsünk, amellyel minden feltétel igaz és  ha-
mis értékű is lehet!

   10 INPUT A,B
   20 IF A=B THEN 60
   30 IF AINT(Y/2) THEN Y=Y-1 : Z=Z*X : PRINT "40/1"
      ELSE X=X*X : Y=Y/2 : PRINT "40/2"
   50 GOTO 30
   60 PRINT Z : PRINT "60"


 10.24 

Írjunk olyan tesztadatokat, amellyel  a  következő  programok
összes utasítása legalább egyszer végrehajtható! Olyan teszt-
adatokat is készítsünk, amellyel minden feltétel igaz és  ha-
mis értékű is lehet!

   10  INPUT N : IF N<1 OR N>100 THEN PRINT "10" : GOTO 10
   20  DIM A(N)
   30  FOR I=1 TO N
   40  INPUT A(I) : PRINT "40"
   50  NEXT I
   60  M=A(1)
   70  FOR I=1 TO N
   80  IF M0 THEN E=E+1 : PRINT "70" : GOTO 70
   80  IF A(U)<>0 THEN U=U-1 : PRINT "80" : GOTO 80
   100 IF E<=U AND A(E)=0 THEN E=E+1 : PRINT "100" :
       GOTO 100
   110 IF E<=U THEN PRINT E : PRINT "110"
   120 IF E<=U AND A(E)<>0 THEN E=E+1 : PRINT "120" :
       GOTO 120
   130 IF E<=U THEN PRINT E : PRINT "130"
   140 GOTO 90
   200 STOP


 10.26 *

Írjunk tesztadatokat mindegyik fehér doboz módszerrel a loga-
ritmikus keresés algoritmushoz!


 10.27 *

Írjunk tesztadatokat mindegyik fehér doboz módszerrel a szét-
válogatás helyben algoritmushoz!


 10.28 *

Készítsünk tesztadatokat a beillesztéses rendezés  feladathoz
úgy, hogy:

   1. Minden utasítást legalább egyszer végrehajtsunk!
   2. Minden feltétel lehessen igaz és hamis értékű is!


 10.29 *

Készítsünk tesztadatokat az utasításlefedés, illetve a  rész-
feltétel-lefedés elve segítségével  a  visszalépéses  keresés
(backtrack) tételhez!


   A következő 3  feladat  a  helyességbizonyítás  témakörébe
tartozik. Ilyen bizonyításokat már a fejezet első  feladatai-
nál  (10.2, 10.3, 10.4, ...) is végezhettünk volna.  A  10.4.
feladatban  például  a  következő  programrészletről  kellett
eldönteni, hogy mit csinál:

   10 INPUT X
   20 A=0 : B=1 : C=1
   30 IF B<=X THEN A=A+1 : C=C+2 : B=B+C : GOTO 30
   40 PRINT A

A 30-as címkére igaz a következő invariáns állítás:

   C=2*A+1 és B=(A+1)*(A+1) és A*A<=X.

Ha a címke valamelyik elérésekor valamely egész k>0 és  k*k<=
X-re A értéke k-1, C=2*(k-1)+1 és B=k*k, akkor  ugyanennek  a
címkének a következő elérésekor A=k,  C=2*k+1  és  és  B=k*k+
2*k+1=(k+1)*(k+1).

A 30-as címke első elérésekor az invariáns állítás k=1  érték
mellett igaz. Ez megalapozza az indukció elve alapján, hogy A
értéke az az utolsó k-1, amelyre már k*k>X, vagyis az A érté-
ke INT(SQR(X)) lesz.

A 30-as sorban levő ciklus befejeződésének bizonyítására  más
módszert kell keresni! Készítsünk egy un. variáns  függvényt,
amelyre az invariáns állításból következik,  hogy  nemnegatív
egész értékű, és a ciklusmag egyszeri végrehajtása alatt  ér-
téke legalább eggyel csökken! Mivel ennek kezdőértéke egy vé-
ges szám, ez a tulajdonsága garantálja,  hogy  a  ciklusmagot
csak véges sokszor hajtjuk végre.

Ez a variáns függvény lehet például a következő:

   X-A*A.

Az invariáns tulajdonság utolsó tagjából következik, hogy  ez
mindig nemnegatív értékű, a ciklusmagban pedig van egy  A=A+1
utasítás, ami ennek az értékét legalább eggyel csökkenti. Így
tehát beláttuk, hogy ez nem lehet végtelen ciklus.


 10.30 **

Írjunk állításokat az összefuttatás tétel algoritmusába,  va-
lamint variáns függvényt a ciklus befejeződésének  igazolásá-
hoz!


 10.31 **

Írjunk állításokat a visszalépéses keresés tétel  (backtrack)
algoritmusába, valamint variáns függvényt a külső ciklus  be-
fejeződésének igazolásához!


 10.32 **

A következő algoritmus két szám maradékos osztását végzi  el.
Írjunk a ciklushoz invariáns állítást, variáns  függvényt  és
adjuk meg, hogy milyen tételeket kell bizonyítani a helyesség
belátásához!

   Eljárás:
      A,B := 0,X
      Ciklus amíg B>=Y
         A,B := A+1,B-Y
      Ciklus vége
      H,M := A,B
   Eljárás vége.

   Előfeltétel: X>=0  és  Y>=0
   Utófeltétel: X=H*Y+M  és  0<=MA(J)
            J:=J+1
         Ciklus vége
         Ha J>N akkor B(K):=A(I) : K:=K+1
      Ciklus vége
      Ki: K, B()
   Eljárás vége.


 10.36 

Adott egy számsorozat, válogassuk ki a különböző elemeit! Ke-
ressünk hibát a következő algoritmusban!

   Eljárás:
      K:=0
      Ciklus I=1-től N-ig
         J:=I+1
         Ciklus amíg J<=N és A(I)<>A(J)
            J:=J+1
         Ciklus vége
         Ha A(I)<>A(J) akkor K:=K+1 : C(K):=A(I)
      Ciklus vége
   Eljárás vége.



 10.37 

Adott egy számsorozat, rendezzük át úgy, hogy a negatív  ele-
mei előzzék meg a pozitívakat! Keressünk hibákat a  következő
algoritmusban!

   Eljárás:
      Ciklus I=1-től N-ig
         Ha A(I)>0 akkor
            P:=A(I)
            Ciklus J=I+1-től N-ig
               A(J+1):=A(J)
            Ciklus vége
            I:=I-1
            A(N):=P
         Elágazás vége
      Ciklus vége
   Eljárás vége.


 10.38 

Adott egy számsorozat, rendezzük át úgy, hogy a negatív  ele-
mei előzzék meg a pozitívakat! Keressünk hibákat a  következő
algoritmusban!

   Eljárás:
      Ciklus I=1-től N-ig
         Ha A(I)<0 akkor B(I):=A(I) különben B(N+1-I):=A(I)
      Ciklus vége
   Eljárás vége.


 10.39 *

Adott egy számsorozat, rendezzük át úgy, hogy a negatív  ele-
mei előzzék meg a pozitívakat! Keressünk hibákat a  következő
algoritmusban!

   Eljárás:
      L:=1 : K:=1
      Ciklus I=1-től N-ig
         Ha A(I)<0 akkor B(L):=A(I) : L:=L+1
                   különben C(K):=A(I) : K:=K+1
      Ciklus vége
      Ciklus I=1-től L-ig
         A(I):=B(I)
      Ciklus vége
      Ciklus J=L+1-től K-ig
         A(J):=C(J)
      Ciklus vége
   Eljárás vége.

 10.40 

Adott egy számsorozat, határozzuk meg a szélső  értékei  szá-
mát! Keressünk hibákat a következő algoritmusban!

   Eljárás:
      MAX:=A(1) : MAXDB:=1
      MIN:=A(1) : MINDB:=1
      Ciklus I=2-től N-ig
         Ha A(I)>MAX akkor MAX:=A(I) : MAXDB:=1
         Ha A(I)=MAX akkor MAXDB:=MAXDB+1
         Ha A(I)=MIN akkor MINDB:=MINDB+1
         Ha A(I)I akkor Ki: I
            Ciklus vége
         Elágazás vége
      Ciklus vége
   Eljárás vége.


 10.42 

A program számok mértani közepét számolja ki, az utolsó  után
10 000-et kell beadni! Keressünk hibákat  a  következő  algo-
ritmusban!

   Eljárás:
      S:=1 : I:=0
      Be: N
      Ciklus amíg N<>10000
         S:=S*N : I:=I+1
      Ciklus vége
      Ha S<0 és N/2<>INT(N/2) akkor Ki: "Nem valos"
         különben A:=SGN(S)*ABS(S)**(1/I) : Ki: A
      Elágazás vége
   Eljárás vége.


 10.43 

Mik a hibák a következő programrészletben, amely  egy  mátrix
sormaximumainak minimumát számolja?

   Eljárás:
      R:=A(1,1)
      Ciklus I=1-től N-ig
         S:=A(I,1)
         Ciklus J=1-től K-ig
            Ha SS akkor R:=S
      Ciklus vége
      Ki: R
   Eljárás vége.


 10.44 *

Mik a hibák a következő programban, amely egy  vektor  összes
maximális értékű elemének az indexét írná ki, ha jól működne?

   Eljárás:
      Be: N
      Ciklus I=1-től N-ig
         Be: A(I) : L(I):=I
      Ciklus vége
      Ciklus I=1-től N-ig
         Ciklus J=I+1-től N-ig
            Ha A(I)L akkor S:=S+1 : L:=A(J) : K(S):=J
         Ha A(J)=L akkor S:=S+1 : K(S):=J
      Ciklus vége
   Eljárás vége.


 10.46 *

Keressünk hibákat a következő algoritmusban, amely egy vektor
elemei közül a második legnagyobbat választja ki!

   Eljárás:
      Be: N [N>1 és egész]
      Tömb A(N)
      Be: A()
      IM:=1 : M:=A(IM)
      Ciklus I=2-től N-ig
         Ha A(I)>A(M) akkor IM:=A(I) : M:=I
      Ciklus vége
      UVK:=1 : KUL:=A(IM)-A(1)
      Ciklus I=2-től N-ig
         SEG:=M-A(I)
         Ha SEG0 akkor UVK:=I : KUL:=SEG
      Ciklus vége
      Ha KUL>0 akkor Ki:A(UVK) különben Ki: "Mind egyenlok"
   Eljárás vége.


 10.47 

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. (összesen N mérés volt) A mérést szárazföld  fölött
kezdtük és ott is fejeztük be. Ott van tenger, ahol  a  mérés
értéke 0. Határozzuk meg a mért szakaszon a tenger  szélessé-
gét! Keressünk hibákat a következő algoritmusban!

   Eljárás:
      E:=1
      Ciklus amíg A(E)>0
         E:=E+1
      Ciklus vége
      U:=N
      Ciklus amíg A(U)>0
         U:=U-1
      Ciklus vége
      Ki: (U-E)*5
   Eljárás vége.


 10.48 

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. (összesen N mérés volt) A mérést szárazföld  fölött
kezdtük és ott is fejeztük be. Ott van tenger, ahol  a  mérés
értéke 0. Határozzuk meg a mért  szakaszon  azon  szigeteket,
amelyeken nincs 100 méternél magasabb hely! Keressünk hibákat
a következő algoritmusban!

   Eljárás:
      [E=Bal part helye, U=Jobb part helye, A(E)=0, A(U)=0 ]
      Ciklus I=E-től U-ig
         Ha A(I-1)=0 és A(I)>0 akkor X:=I
         Ha A(I-1)>0 és A(I)=0 akkor Ha H<100 akkor Ki: X,I
         Ha A(I)>H akkor A(I):=H
      Ciklus vége
   Eljárás vége.


 10.49 *

Egy repülőgéppel repültünk Európából Amerikába, s az út során
X kilométerenként mértük a felszín tengerszint feletti magas-
ságát. Feltételezésünk szerint a mérés tenger felett 0,  szi-
get felett >0 értékű. Keressünk hibákat abban az  algoritmus-
ban, amely megadja azt a szigetet, amelytől a legtávolabb van
szomszéd sziget! (A  közelebbi  szomszéd  sziget  legtávolabb
van. 1 ilyet kell megadni!)

   Szigetek eljárás:
      I:=1 : DB:=0
      Ciklus amíg I<=N
         Ciklus amíg I<=N és (A(I)>0 vagy A(I+1)=0)
            I:=I+1
         Ciklus vége
         Ha  I<=N akkor DB:=DB+1 : SZKEZD(DB):=I+1
         Ciklus amíg A(I)=0 vagy A(I+1)>0
            I:=I+1
         Ciklus vége
         DB:=DB+1 : SZVÉG(DB):=I
      Ciklus vége
      TÁV:=0
      Ciklus I=2-től DB-ig
         Ha SZVÉG(I-1)-SZKEZD(I)>TÁV és
            SZKEZD(I+1)-SZVÉG(I)>TÁV
            akkor TÁV:=SZVÉG(I-1)-SZKEZD(TÁV) : H:=I
      Ciklus vége
      Ki: H, SZKEZD(H), SZVÉG(H)
   Eljárás vége.


 10.50 *

Egy repülőgéppel repültünk Európából Amerikába, s az út során
X kilométerenként mértük a felszín tengerszint feletti magas-
ságát. Feltételezésünk szerint a mérés tenger felett 0,  szi-
get felett >0 értékű. A méréssorozatot tenger felett  kezdtük
és fejeztük be. Keressünk  hibákat  abban  az  algoritmusban,
amely megadja azokat a szigeteket, ahol a  legmagasabb  csúcs
található! (Csúcs minden olyan pont, amely magasabb a 2 szom-
szédjánál. Az adatok az A(N) vektorban találhatók.)

   Szigetek eljárás:
      MAG :=-20000
      Ciklus I=2-től N-ig
         Ha A(I)>A(I-1) vagy A(I)>A(I+1) akkor Ha A(I)>MAG
            akkor MAG:=A(I)
      Ciklus vége
      DB:=0
      Ciklus I=2-től N-ig
         Ha A(I)=MAG akkor DB:=DB+1 : X(DB):=I
      Ciklus vége
      Ciklus I=0-tól DB-ig
         E:=A(I)
         Ciklus amíg A(E)>0
            E:=E+1
         Ciklus vége
         V:=A(I)
         Ciklus amíg A(V)>0
            V:=V-1
         Ciklus vége
         Ki: "Sziget eleje:",E,"Sziget vege:",V
      Ciklus vége
   Eljárás vége.


 10.51 

Egy H hosszúságú rudat bevonunk N  réteggel  egyenletesen  (a
végét is). D(I) jelenti az I. bevonás utáni átmérőt,  D(0)  a
kezdeti átmérő. Keressük meg a hibát a következő  algoritmus-
ban amely meghatározza az egyes felhasznált anyagok  térfoga-
tát!

   Eljárás:
      V:=D(0)*D(0)/4*PI*H
      Ciklus I=1-től N-ig
         U:=D(I)*D(I)/4*PI*H
         Ki: V-U
         V:=VU : H:=H+D(I)
      Ciklus vége
   Eljárás vége.


 10.52 

A program egy szám összes valódi nem prím  osztóit  írja  ki.
Keressünk hibákat a programban!

   10 INPUT N
   20 FOR I=4 TO N/2
   30 IF N/I=INT(N/I) THEN 40 ELSE 80
   40 FOR J=1 TO SQR(I)
   50 IF J/I=INT(J/I) THEN PRINT I
   60 NEXT J
   70 NEXT I
   80 STOP


 10.53 

A program számok mértani közepét számolja ki, az utolsó  után
10000-et kell beadni. Keressünk hibát a következő programban!

   10 S=1 : I=0
   20 INPUT N
   30 IF N=10000 THEN 50
   40 S=S*N : I=I+1 : GOTO 20
   50 IF S<0 AND N/2<>INT(N/2) THEN PRINT "Nem valos" : STOP
   60 A=SGN(S)*ABS(S)**(1/I)
   70 PRINT A : STOP


 10.54 

A programrészlet egy vektor 0 elemeinek számát adja meg.  Ke-
ressünk hibákat a következő programban!

   100 I=1 : S=0 : D=0
   110 IF A(I)>0 THEN 120 ELSE 150
   120 I=I+1
   130 GOTO 110
   140 S=D+1
   150 IF IS THEN R=S
   160 NEXT I
   170 PRINT R


 10.56 

A programrészlet hőmérsékleti  adatokat  dolgoz  fel,  jelzi,
hogy az illető beteg, ha a mérés eredménye kisebb 35  foknál,
vagy nagyobb 40 foknál, vagy pedig két mérés között a  hőmér-
séklet több mint egy fokkal változott.  Keressünk  hibákat  a
következő programban!

   100 FOR I=1 TO N
   110 INPUT A(I)
   120 NEXT I
   130 FOR I=1 TO N
   140 IF A(I)>40 OR A(I)<35 OR A(I)-A(I-1)>1 THEN PRINT
       "BETEG"
   150 NEXT I


 10.57 

A programrészlet A és B nem közös osztóit írja ki.  Keressünk
hibákat a következő megoldásban!

   100 S=0
   110 D=INT(A/2)
   120 FOR I=2 TO D
   130 IF INT(A/I)=A/I THEN S=S+1
   140 IF INT(B/I)=B/I THEN S=S+1
   150 IF S=1 THEN PRINT I;
   160 NEXT I


 10.58 

A program két szám legnagyobb közös osztóját számolja ki. Ke-
ressünk hibákat a következő megoldásban!

   10 INPUT A,B
   20 X=A : Y=B
   30 IF X=Y THEN 60
   40 IF XA(I+1) THEN X=A(I) : A(I+1)=A(I) : A(I)=X :
       K=1
   90  NEXT I
   100 IF K>0 THEN N=N-1 : GOTO 60
   110 FOR I=K TO 1 STEP -1
   120 IF A(I)=A(I-1) THEN PRINT I : NEXT I
   130 STOP


 10.61 

A program egy vektor összes maximális értékű elemének az  in-
dexét írná ki, ha jól működne. Keressünk hibákat  a  program-
ban!

   10 INPUT N,E
   20 FOR I=2 TO N
   30 INPUT M
   40 IF M=E THEN PRINT I : GOTO 70
   50 IF M=A(J) THEN 140
   120 X=A(I) : A(J)=A(I) : A(I)=X
   130 X=L(I) : L(I)=L(J) : L(J)=X
   140 NEXT J : NEXT I
   150 PRINT L(1);
   160 Q=2
   170 IF L(Q)=L(1) THEN PRINT L(Q); ELSE END
   180 Q=Q+1: GOTO 170

 10.63 

A program egy vektor összes maximális értékű elemének az  in-
dexét írná ki, ha jól működne. Keressünk hibákat  a  program-
ban!

   10 INPUT N : DIM A(N) : K=N
   20 FOR I=O TO N : INPUT A(I) : NEXT I
   30 K=0
   40 FOR I=0 TO N-1
   50 IF A(I)>A(I+1) THEN X=A(I) : A(I)=A(I+1) : A(I+1)=X :
      K=1
   60 NEXT I
   70 IF K>0 THEN N=N-1 : GOTO 30
   80 FOR I=K TO 0 STEP -1
   90 IF A(I)=A(I-1) THEN PRINT I : NEXT I
   95 STOP


 10.64 

A program egy vektor összes maximális értékű elemének az  in-
dexét írná ki, ha jól működne. Keressünk hibákat  a  program-
ban!

   10  INPUT N : DIM A(N),B(N)
   20  FOR I=1 TO N
   30  INPUT A(I) : B(I)=I
   40  NEXT I
   50  FOR K=N-1 TO 1 STEP -1
   60  FOR B=1 TO K
   70  IF A(B)>=A(B+1) THEN 100
   80  X=A(B) : A(B)=A(B+1) : A(B+1)=X
   90  Y=B(B) : B(B)=B(B+1) : B(B+1)=X
   100 NEXT B : NEXT K
   110 FOR F=1 TO 10
   120 PRINT B(F)
   130 NEXT F
   140 STOP


 10.65 

A program egy vektor összes maximális értékű elemét  gyüjtené
ki, ha jól működne. (Dimenzionálási hibák nincsenek!)  Keres-
sünk hibákat a programban!

   100 S=0 : L=S
   110 FOR J=1 TO N
   120 IF A(J)>L THEN S=S+1 : L=A(J) : K(S)=J
   130 IF A(J)=L THEN S=S+1 : K(S)=J
   140 NEXT J


 10.66 

A következő program véletlen, de szimmetrikus ábrát  rajzolna
a képernyőre. A szimmetriatengelyek (a  képernyő  koordináta-
rendszerében) az X=20, Y=20, Y=X,  Y=40-X  egyenesek.  Milyen
két SET utasítás hiányzik a  programból,  hogy  a  szimmetria
teljes legyen?

   10 X=RND(41)-1 : Y=RND(41)-1
   20 SET(X,Y) : SET(X,40-Y)
   30 SET(Y,X) : SET(40-Y,X)
   40 SET(40-X,Y) : SET(Y,40-X)
   50 GOTO 10


 10.67 

Mik a hibák a következő rendező szubrutinban?

   100 DIM A(N)
       ...
   200 REM Rendezés
   210 FOR I=N TO 1 STEP -1
   220 FOR J=1 TO I
   230 IF A(J)>A(J+1) THEN X=A(I) : A(I+1)=A(I) : A(I)=A(I+1)
   240 NEXT J
   250 NEXT I
   260 ...


 10.68 

A Balatonra egy négyzethálót fektettünk és  minden  pontjában
megmértük a víz átlaghőmérsékletét. Ha egy mérés parton volt,
akkor az értéke=0, egyébként>0. A négyzetháló szélső  pontjai
parton voltak.  Keressünk  hibákat  a  következő  programban,
amely a partmenti víz átlaghőmérsékletét  határozná  meg,  ha
működne!

   100 FOR I=2 TO N-1 : FOR J=2 TO M-1
   110 IF X(I,J)=0 THEN 120 ELSE 150
   120 FOR K=I-1 TO I+1 : FOR L=J-1 TO J+1
   130 IF X(K,L)<>0 THEN D=D+1 : S=S+X(K,L)
   140 NEXT L : NEXT K
   150 NEXT J : NEXT I


 10.69 

A Balatonra egy négyzethálót fektettünk és  minden  pontjában
megmértük a víz átlaghőmérsékletét. Ha egy mérés parton volt,
akkor az értéke=0, egyébként>0. A négyzetháló szélső  pontjai
parton voltak.  Keressünk  hibákat  a  következő  programban,
amely a leghidegebb pont hőmérsékletét határozná meg, ha  mű-
ködne!

   100 X=10000
   110 FOR I=1 TO N
   120 FOR J=1 TO M
   130 IF A(I,J)0 THEN E=E+1 : GOTO 110
   120 U=N
   130 IF A(U)>0 THEN U=U-1 : GOTO 130
   140 PRINT (U-E)*5


 10.71 

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. (összesen N mérés volt) A mérést szárazföld  fölött
kezdtük és ott is fejeztük be. Ott van tenger, ahol  a  mérés
értéke=0. Keressünk hibákat a következő programban,  amely  a
hegycsúcsok helyét és magasságát határozná meg a mért  szaka-
szon, ha működne!

   100 FOR I=1 TO N
   110 IF A(I-1) < A(I) AND A(I) > A(I+1) THEN PRINT I,A(I)
   120 NEXT I


 10.72 

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. (összesen N mérés volt) A mérést szárazföld  fölött
kezdtük és ott is fejeztük be. Ott van tenger, ahol  a  mérés
értéke=0. Keressünk hibákat a következő programban,  amely  a
szigetek számát határozná meg a mért szakaszon, ha működne!

   100 S=0
   110 FOR I=2 TO N
   120 IF A(I-1)=0 AND A(I) > 0 THEN S=S+1
   130 NEXT I
   140 PRINT S


 10.73 

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. (összesen N mérés volt) A mérést szárazföld  fölött
kezdtük és ott is fejeztük be. Ott van tenger, ahol  a  mérés
értéke=0. Keressünk hibákat  a  következő  programban,  amely
azon szigeteket határozná meg  a  mért  szakaszon,  amelyeken
nincs 100 méternél magasabb hely, ha működne!

   100 REM E=Bal part helye, U=Jobb part helye
       (A(E)=0, A(U)=0)
   110 FOR I=E TO U
   120 IF A(I-1)=0 AND A(I)>0 THEN X=I
   130 IF A(I-1)>0 AND A(I)=0 THEN IF H<100 THEN PRINT X,I
   140 IF A(I)>H THEN A(I)=H
   150 NEXT I


 10.74 

Egy H hosszúságú rudat bevonunk N  réteggel  egyenletesen  (a
végét is). D(I) jelenti az I. bevonás utáni átmérőt,  D(0)  a
kezdeti átmérő. Keressünk  hibákat  a  következő  programban,
amely az egyes felhasznált anyagok térfogatát határozza meg!

   100 V=D(0)*D(0)/4*PI*H
   110 FOR I=1 TO N
   120 U=D(I)*D(I)/4*PI*H
   130 PRINT V-U
   140 V=VU : H=H+D(I)
   150 NEXT I


 10.75 

N napig mértük, naponta K alkalommal a hőmérsékletet.  Keres-
sünk hibákat a következő programban, amely a  napi  maximumok
minimumát határozná meg, ha jól működne!

   100 L=A(1,1)
   110 FOR I=1 TO N
   120 M=A(I,1)
   130 FOR J=1 TO K
   140 IF A(I,J)>M THEN M=A(I,J)
   150 NEXT J
   160 IF MS THEN PRINT I-1
   180 F=E : E=S
   190 NEXT I


 10.77 

Egy V0 térfogatú, M0 tömegű jégtábla úszik a vízen.  N  darab
tárggyal terheljük, amelyek tömegeit a T(N) vektorban helyez-
tük el. Mindegyik tárgy R0 sűrűségű. Keressünk hibákat a  kö-
vetkező programban, amely megadja, hogy elsüllyed-e a jégtáb-
la, s ha igen, akkor mikor!

   100 FOR I=1 TO N
   110 V=V0+T(I)/R0
   120 IF (M0+T(I)/V)<1 THEN PRINT "Elsullyed az";I;
       ". targy utan"
   130 M=M+T(I)
   140 NEXT I
   150 PRINT "Nem sullyed el!"
   160 STOP


 10.78 

Melyik programrészlet lehet Pascal, melyik Elan0 nyelvű,  me-
lyik mindkettő, és melyik egyik sem? (Amelyik nem  lehet,  az
miért nem?)

   A.  A:=B-C+D[I];
       D[3]:=24;
       IF A>D[3] THEN D[3]:=A ELSE A:=D[3];
       B:=A;

   B.  N:=100 ; K:=3.5 ; A:=K ;
       FOR K:=1 TO N
       A:=A+K;
       Z:=A*A;

   C.  A:=1 ; B:=2 ; C:=30
       REPEAT
       A:=A*B
       UNTIL A>C
       ENDREPEAT;
       X:=A-C;


 10.79 *

A következő szubrutin helyesen  működik.  Szövegek  rendezett
sorozatába beilleszt egy új szöveget. Milyen  kezdőértékadást
kell alkalmazni ahhoz, hogy a szubrutin akkor is helyesen mű-
ködjön, amikor a rendezett sorozatban még egyetlen elem sincs
(N=0)?

   1000 REM Beillesztés (X$)
   1010 N=N+1 : T$(N)=X$
   1020 B=0 : A=T(B)
   1030 IF A=-1 THEN 1070
   1040 IF X$<=T$(A) THEN 1070
   1050 B=A : A=T(B)
   1060 GOTO 1030
   1070 T(B)=N : T(N)=A
   1080 RETURN


 10.80 

A következő programrészlet két növekvően rendezett  számsoro-
zat közös elemeit írja ki. Mi a  feltétele  annak,  hogy  egy
elemet sem ír ki többször?

   100 I=1 : J=1
   110 IF I>N OR J>M THEN 150
   120 IF A(I)=B(J) THEN PRINT A(I)
   130 IF A(I)I2 THEN H=I1 ELSE H=I2
   80  X=X1 : Y=Y1
   90  S1=H1/H
   100 S2=H2/H
   110 FOR I=1 TO H+1
   120 SET(X,Y)
   130 X=X+S1 : Y=Y+S2
   140 NEXT I
   150 RETURN


 10.82 *

Az alábbi program feladata, hogy  meghatározza:  hány  helyen
lesz olajfoltos két, egymáshoz kapcsolódó fogaskerék,  ha  az
első kerék egyetlen fogára egy olajcseppet teszünk. (Feltesz-
szük, hogy a szerkezet 'elég sokáig' működik  és  az  eredeti
olajcsepp elég nagy ahhoz,  hogy  akárhány  foltot  okozzon.)
Futtatáskor kiderült, hogy a program nem ad jó eredményt. Ke-
ressük meg a hibát, vagy a hibákat!

   10  SCNCLR : PRINT : PRINT
   20  INPUT "AZ ELSO KEREK FOGAINAK SZAMA ";B : IF B<2 OR
       B<>INT(B) THEN 30
   40  X=A : Y=B
   50  IF X=Y THEN 80
   60  IF X>Y THEN X=A-X : ELSE Y=B-Y
   70  GOTO 40
   80  PRINT : PRINT "AZ OLAJOS FOGAK SZAMA"
   90  PRINT : PRINTTAB(5);"AZ ELSO KEREKEN: ";X;","
   100 PRINT : PRINTTAB(5);"A MASODIK KEREKEN: ";Y;"."
   110 GETKEY A$ : PRINT : PRINT : PRINT : PRINT : "KER-E
       UJ SZAMOLAST (I/N)" : GETKEY A$
   120 IF A$=I THEN 10 : ELSE END


 10.83 

Írjuk át hatékonyabbá a következő programot, ami  egy  termé-
szetes szám legnagyobb osztóját adja meg. A legnagyobb  osztó
nem maga a szám.

   Eljárás:
      I:=N
      Ciklus amíg I nem osztója N-nek
         I:=I-1
      Ciklus vége
      Ki: I
   Eljárás vége.


 10.84 

Írjuk át hatékonyabbá a következő programot, ami  két  termé-
szetes szám legnagyobb közös osztóját számolja  ki,  felhasz-
nálva, hogy A és B közös osztói A-B-nek is osztói, ha A>B.


   Eljárás:
      Ciklus amíg A<>B
         Ha A0
         K:=K+E
      Ciklus vége
      Gyökhely:=K
   Eljárás vége.


 10.86 

Írjuk át hatékonyabbra az N-ig található ikerprímeket  előál-
lító algoritmust!

   Ikerprímek eljárás:
      Ciklus I=2-től N-ig
         Ha prímszám(I) és prímszám(I+2) akkor Ki: I,I+2
      Ciklus vége
   Eljárás vége.


 10.87 

Adott egy szimmetrikus mátrix (A(I,J)=A(J,I)). Írjuk át haté-
konyabbá a legnagyobb értékű elem indexeit meghatározó  eljá-
rást!

   Eljárás:
      MS:=1 : MO:=1
      Ciklus I=1-től N-ig
         Ciklus J=1-től M-ig
            Ha A(I,J) > A(MS,MO) akkor MS:=I : MO:=J
         Ciklus vége
      Ciklus vége
      Ki: MS,MO,A(MS,MO)
   Eljárás vége.


 10.88 

Írjuk át hatékonyabbá a következő eljárást, amely egy mátrix-
ban egy X érték helyét adja meg.  A  mátrix  sorainak  elemei
nagyság szerint rendezettek. Az egyes sorokhoz tartozó  szám-
intervallumok nem fedik át egymást. A sorok egymáshoz  képest
nincsenek sorrendben.

   Eljárás:
      I:=1 : TALÁLT:=HAMIS
      Ciklus amíg I<=N és nem TALÁLT
         J:=1
         Ciklus amíg J<=M és A(I,J)<>X
            J:=J+1
         Ciklus vége
         Ha J<=M akkor TALÁLT:=IGAZ különben I:=I+1
      Ciklus vége
      Ki: I,J
   Eljárás vége.


 10.89 *

Írjuk át a következő eljárást hatékonyabbá, amely egy Pascal-
háromszög N. sorának elemeit határozza meg minden K-ra  (K=0,
1, ..., N). Az N. sor K. elemének értéke:

                     N!
   N alatt a K = -----------
                 K! * (N-K)!
   Eljárás:
      Ciklus I=0-tól N-ig           Pascal-háromszög:
         S1:=1 : S2:=1 : S3:=1
         Ciklus I=1-től N-ig                  1
            S1:=S1*I
         Ciklus vége                        1  2  1
         Ciklus I=1-től K-ig
            S2:=S2*I                     1   3   3   1
         Ciklus vége
         Ciklus I=1-től N-K-ig        1    4   6   4    1
            S3:=S3*I
         Ciklus vége                1   5   10   10   5    1
         Ki: S1/(S2*S3)
      Ciklus vége
   Eljárás vége.


 10.90 

Írjuk át hatékonyabbá a következő eljárást, amely egy vektor-
ban megkeresi egy X érték helyét. Tudjuk, hogy a vektor  min-
den elemére igaz, hogy  IX
         I:=I+1
      Ciklus vége
      Ha I<=N akkor Ki: I
   Eljárás vége.


 10.91 *

Írjuk át hatékonyabbra az első N (N>2) Fibonacci-számot  elő-
állító eljárást!

   Fibonacci eljárás:
      Ciklus I=0-tól N-ig
         Elágazás
            I=0 esetén F(0):=1
            I=1 esetén F(1):=1
            egyéb esetben Fibonacci előállítás(I)
         Elágazás vége
      Ciklus vége
   Eljárás vége.

   Fibonacci előállítás:(I)
      F1:=1 : F2:=1
      Ciklus J=2-től I-ig
         F:=F1+F2 : F2:=F1 : F1:=F
      Ciklus vége
      F(I):=F
   Eljárás vége.


 10.92 *

A K-Fibonacci-számokat a következőképpen képezzük:

   F(N):=F(N-1)+F(N-2)+...+F(N-K)

Írjuk át hatékonyabbá a következő eljárást!

   Eljárás:
      Ciklus I=0-tól K-1-ig
         F(I):=1
      Ciklus vége
      Ciklus I=K-tól N-ig
         F(I):=0
         Ciklus J=N-K-tól N-1-ig
            F(I):=F(I)+F(J)
         Ciklus vége
      Ciklus vége
      Ki: F(N)
   Eljárás vége.


 10.93 

Írjuk át hatékonyabbá a következő eljárást, amely adott N mé-
résből meghatározza a tengerben levő szigetek kezdetét és vé-
gét. A mérések tengerszint  feletti  magasságokat  tartalmaz-
nak. A 0 értékű mérések tengert jelentenek.

   Eljárás:
      Ciklus I=1-től N-ig
         Ha I=1 és A(I)>0 vagy I>1 és A(I-1)=0 és A(I)>0
            akkor Ki: "KEZDET:",I
         Ha I=N és A(I)>0 vagy I0 és A(I+1)=0
            akkor Ki: "VEG:",I
      Ciklus vége
   Eljárás vége.


 10.94 

Írjuk át gyorsabbra a következő eljárást!  5  kilométerenként
megmértük a felszín tengerszint feletti magasságát. A  mérés-
sorozatot szárazföld fölött kezdtük és fejeztük be. Volt köz-
ben tenger is. Ott van tenger, ahol a mérés értéke: 0.  Hatá-
rozzuk meg minden egyes szigeten a legmagasabb pontokat!

   Eljárás:
      S:=0
      Ciklus I=2-től N-1-ig
         Ha A(I-1)=0 és A(I)>0 akkor S:=S+1 : K(S):=I
         Ha A(I)>0 és A(I+1)=0 akkor V(S):=I
      Ciklus vége
      Ciklus I=1-től S-1-ig
         M:=K(I)
         Ciklus J=K(I)+1-től V(I)-ig
            Ha A(J)>A(M) akkor M:=J
         Ciklus vége
         Ki: K(I),V(I),M,A(M)
      Ciklus vége
   Eljárás vége.


 10.95 *

Írjuk át gyorsabbra a következő eljárást!  5  kilométerenként
megmértük a felszín tengerszint feletti magasságát. A  mérés-
sorozatot szárazföld fölött kezdtük és fejeztük be. Volt köz-
ben tenger is. Ott van tenger, ahol a mérés értéke: 0.  Hatá-
rozzuk meg az X méternél magasabb szigetek kezdeteit és vége-
it!

   Eljárás:
      E:= Első 0 helye : U:= Utolsó 0 helye : I:=E
      Ciklus amíg I<=U
         Ciklus amíg A(I)0
               K:=K-1
            Ciklus vége
            V:=I+1
            Ciklus amíg A(V)>0
                V:=V+1
            Ciklus vége
            Ki: K, V
            I:=V
         Elágazás vége
      Ciklus vége
   Eljárás vége.


 10.96 

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. A méréssorozatot szárazföld fölött kezdtük  és  fe-
jeztük be. Volt közben tenger is. Ott van tenger, ahol a  mé-
rés értéke: 0. Adjuk meg az egyes szigetek hosszait! Írjuk át
a következő algoritmust kevesebb helyet foglalóra!

   Eljárás:
      DB:=0
      Ciklus I=E+1-től V-1-ig
         Ha MAG(I)>0 és MAG(I-1)=0 akkor
                     DB:=DB+1 : KEZDET(DB):=I
         Elágazás vége
         Ha MAG(I)>0 és MAG(I+1)=0 akkor VÉG(DB):=I
      Ciklus vége
      Ciklus I=1-től DB-ig
         HOSSZ(I):=VÉG(I)-KEZDET(I)+1
      Ciklus vége
   Eljárás vége.


 10.97 *

5 kilométerenként megmértük a felszín tengerszint feletti ma-
gasságát. A méréssorozatot szárazföld fölött kezdtük  és  fe-
jeztük be. Volt közben tenger is. Ott van tenger, ahol a  mé-
rés értéke: 0. A tenger E-től V-ig tart. Adjuk meg azon  szi-
getek kezdeteit és végeit, ahol a legmagasabb pont van! Írjuk
át hatékonyabbra a következő megoldást!

   Szigetek eljárás:
      MAX:=E
      Ciklus I=E+1-től V-ig
         Ha MAG(I)>MAG(MAX) akkor MAX:=I
      Ciklus vége
      DB:=0
      Ciklus I=E-től V-ig
         Ha MAG(I)=MAG(MAX) akkor DB:=DB+1 : X(DB):=I
      Ciklus vége
      SZDB:=0
      Ciklus I=1-től DB-ig
         K:=X(I)-1
         Ciklus amíg MAG(K)>0
            K:=K-1
         Ciklus vége
         V:=X(I)+1
         Ciklus amíg MAG(V)>0
            V:=V-1
         Ciklus vége
         Ha SZDB=0 akkor SZDB:=1 : SZK(SZDB):=K :
            SZV(SZDB):=V
            különben Ha SZV(SZDB)<>V akkor
                              SZDB:=SZDB+1 : SZK(SZDB):=K
                              SZV(SZDB):=V
                     Elágazás vége
         Elágazás vége
      Ciklus vége
   Eljárás vége.


 10.98 

Írjuk át hatékonyabbra (végrehajtási idő) a következő felada-
tot megoldó algoritmust! Két rádióadó  adásidőit  mértük.  Az
első adáskezdeteit az EK(N) adásvégeit az EV(N) vektorban tá-
roljuk, a másodikét pedig az MK(M), illetve az  MV(M)  vekto-
rokban. Mindkettő az adáskezdetek szerint sorba  van  rendez-
ve. Állapítsuk meg, hogy a két adássorozatot adhatta-e ugyan-
az az adó! Az eredményt az eljárás végén  az  'Adhatta'  nevű
változó tartalmazza!

   Adhatta-e eljárás:
      Adhatta:=Igaz
      Ciklus I=1-től N-ig
         Ciklus J=1-től M-ig
            Ha EK(I)>=MK(J) és EK(I)MK(J)
               és EV(I)<=MV(J) vagy MK(J)>EK(I) és
               MK(J)0 akkor A(I):=A(I)*N/2
         Ha A(I)=0 akkor F:=I*I*I
         Ha A(I)<0 akkor A(I):=A(I)-F
         HA A(I)=0 akkor A(I):=F**2
      Ciklus vége
      Ciklus I=1-től N-ig
         Ha A(I)<0 akkor A(I):=-A(I)
      Ciklus vége
      Ciklus I=1-től N-ig
         Ha A(I)0 akkor A(I):=F
      Ciklus vége
   Eljárás vége.

 10.100 *

A Balatonra egy négyzethálót fektettünk és minden rácspontban
megmértük a víz hőmérsékletét. A parton a  mért  érték  0,  a
vízben >0. MAX tartalmazza a viz maximális hőmérsékletét. Ír-
juk át gyorsabbra a parthoz legközelebbi maximumhelyet kereső
eljárást!

   Keresés eljárás:
      TMIN:=+végtelen
      Ciklus I=1-től N-ig
         Ciklus J=1-től M-ig
            Ciklus K=1-től N-ig
               Ciklus L=1-től M-ig
                  Ha X(I,J)=MAX és X(K,L)=0 és
                     TÁV(X(I,J),X(K,L))38 akkor DB:=DB+1
         Ha I>1 és ABS(H(I)-H(I-1))>1 akkor DB:=DB+1
      Ciklus vége
   Eljárás vége.


 10.102 *

Egy kutyaszépségversenyen N kutya indult, mindegyik M kategó-
riában. Az egyes kategóriák maximális pontszámát a MAX(M), az
értékeléshez szükséges minimális pontszámot a  MIN(M)  vektor
tartalmazza. Írjuk át hatékonyabbra azt az algoritmust, amely
megadja azokat a kutyákat, amelyek egy kategóriában sem estek
ki, de nem is nyertek sehol!

   Kiválogatás eljárás:
      DB:=0
      Ciklus I=1-től N-ig
         J:=1
         Ciklus amíg J<=M és KU(I,J)>=MIN(J)
            J:=J+1
         Ciklus vége
         Ha J>M akkor DB:=DB+1 : K(DB):=I
      Ciklus vége
      Ciklus J=1-től M-ig
         L:=MAX(J) : VAN:=Hamis
         Ciklus amíg nem VAN
            Ciklus I:=1-től N-ig
               Ha KU(I,J)=L akkor
                  VAN:=Igaz : P:=1
                  Ciklus amíg P<=DB és K(P)<>I
                     P:=P+1
                  Ciklus vége
                  Ha P<=DB akkor
                     Ciklus amíg P=1 és K<=N és L>=1 és L<=N és (K<>I vagy
               L<>J) akkor Ha A(K,L)=1 akkor S:=S+1
         Ciklus vége
      Ciklus vége
   Eljárás vége.


 10.105 

Egy méréssorozatban a hibákat úgy szeretnénk  javítani,  hogy
minden értéket helyettesítünk önmaga, valamint a két szomszé-
dos mérés súlyozott átlagával. Írjuk  át  időben  gyorsabbra,
valamint kevesebb helyet foglalóra a következő megoldást!

   Hibajavítás eljárás:
      Ciklus I=1-től N-ig
         Elágazás
            I=1 esetén Y(I):=(4*X(I)+X(I+1))/5
            I=N esetén Y(I):=(X(I-1)+4*X(I))/5
            Egyéb esetben Y(I):=(X(I-1)+4*X(I)+X(I+1))/6
         Elágazás vége
      Ciklus vége
   Eljárás vége.


 10.106 

Egy étteremben minden nap kiszámolják, hogy mennyi az  aznapi
bevétel. Számítsuk ki, hogy mennyi a munkanapi bevételek  át-
laga, valamint, hogy mennyi a munkaszünetes napok  bevételei-
nek átlaga (ilyen a szombat és a vasárnap)! Írjuk át  hatéko-
nyabbra a következő megoldást!

   Átlagok(N) eljárás:
      MATL:=0 : M:=0 : MSZATL:=0 : MSZ:=0
      Ciklus I=1-től N-ig
         Ha (I MOD 7)=0 vagy (I MOD 7)=6
              akkor  MSZ:=MSZ+1 : MSZATL:=MSZATL+BEVÉTEL(I)
            különben M:=M+1 : MATL:=MATL+BEVÉTEL(I)
      Ciklus vége
      MATL:=MATL/M : MSZATL:=MSZATL/MSZ
   Eljárás vége.


 10.107 

Olvassunk be hónap sorszámokat, majd adjuk meg, hogy hány té-
li, tavaszi, nyári, őszi hónap volt!  Írjuk  át  a  következő
megoldást időben gyorsabbra!

   Eljárás:
      Ciklus I=1-től N-ig
         Be: H
         Ha H=1 vagy H=2 vagy H=12 akkor DB(1):=DB(1)+1
         Ha H=3 vagy H=4 vagy H=5  akkor DB(2):=DB(2)+1
         Ha H=6 vagy H=7 vagy H=8  akkor DB(3):=DB(3)+1
         Ha H=9 vagy H=10 vagy H=11 akkor DB(4):=DB(4)+1
      Ciklus vége
   Eljárás vége.


 10.108 *

A XX. század néhány egymást követő évében  naponta  megmértük
a napi középhőmérsékletet. Írjuk át hatékonyabbra azt az  al-
goritmust, amely eldönti, hogy a szökőévek átlaga nagyobb-e a
nem szökőévek átlagánál! (Legalább 4 évet vizsgáltunk!)

   Eljárás:
      SZ:=0 : SZDB:=0 : NSZ:=0 : NSZDB:=0
      Ciklus I=K-tól V-ig
         Ha (I MOD 4)=0 akkor NAP:=366 különben NAP:=365
         ÖSSZ:=0
         Ciklus J=1-től NAP-ig
            ÖSSZ:=ÖSSZ+A(I,J)
         Ciklus vége
         ÖSSZ:=ÖSSZ/NAP
         Ha (I MOD 4)=0 akkor  SZ:=SZ+ÖSSZ : SZDB:=SZDB+1
                      különben NSZ:=NSZ+ÖSSZ : NSZDB:=NSZDB+1
      Ciklus vége
      NAGYOBB:= (SZ/SZDB > NSZ/NSZDB)
   Eljárás vége.


 10.109 *

Adott N darab mérés, adjuk meg a legmagasabb  csúcsot!  Írjuk
át a következő megoldást hatékonyabbra!

   Legmagasabb csúcs:
      DB:=0
      Ciklus I=2-től N-1-ig
         Ha A(I-1)A(I+1)
            akkor DB:=DB+1 : CS—CS(DB):=I
      Ciklus vége
      ACSM:=0
      Ciklus J=1-től DB-ig
         Ha A(CS—CS(J)) > ACSM
            akkor ACSM:=A(CS—CS(J)) : MAX:=J
      Ciklus vége
      MAXCS—CS:=CS—CS(MAX)
   Eljárás vége.


 10.110 *

Európából Amerikába repültünk repülőgéppel, s az út során   X
kilométerenként mértük a felszín tengerszint feletti magassá-
gát. Elképzelésünk szerint ott van tenger, ahol a mérés 0,  s
ott föld, ahol a mérés >0. Írjuk át hatékonyabbá  a  szigetek
kezdeteit és végeit megadó eljárást!

   Eljárás:
      I:=2 : DB:=0
      Ciklus amíg I0 és A(I-1)=0)
            I:=I+1
         Ciklus vége
         Ha I0 és A(I+1)=0)
            I:=I+1
         Ciklus vége
         Ha I" "
            vagy I=1 és A$ első karaktere<>" " akkor DB:=DB+1
      Ciklus vége
   Eljárás vége.


 10.112 

Adott egy számsorozat orgonasíp elrendezésben. Írjuk át haté-
konyabbra azt az algoritmust, amely az egymást követő  elemek
egymástól való eltérését írja ki!

   Eljárás:
      Ciklus I=1-től N-1-ig
         Ha A(I+1) > A(I) akkor  Ki: A(I+1)-A(I)
                        különben Ki: A(I)-A(I+1)
      Ciklus vége
   Eljárás vége.


 10.113 

Adott egy számsorozat. A páros sorszámú elemeinek adjuk meg a
négyzetét, a páratlanoknak  a-1-szeresét!  Írjuk  át  hatéko-
nyabbra a következő megoldást!

   Eljárás:
      Ciklus I=1-től N-ig
         Ha I páros akkor  B(I):=A(I)*A(I)
                  különben B(I):=-A(I)
      Ciklus vége
   Eljárás vége.


 10.114 *

Adott két rendezett sorozat. Emberek személyi számait tartal-
mazzák születési idő szerint sorbarendezve. Írjuk  át  időben
rövidebbre azt az algoritmust, amely a két sorozat  összefut-
tatását végzi!

   Eljárás:
      A(N+1, ):=(9,9,9,9,9,9,9,9,9,9,9)
      B(M+1, ):=(9,9,9,9,9,9,9,9,9,9,9)
      I:=1 : J:=1 : K:=0
      Ciklus amíg IJJ esetén C(K, ):=B(J, ) : J:=J+1
         Elágazás vége
      Ciklus vége
   Eljárás vége.


 10.115 *

Egy táblázatban "*" és " " jelek találhatók. A táblázat  ele-
meit az algoritmusban látható szabály szerint kell átalakíta-
ni! Írjuk át időben gyorsabbra az eljárást!

   Eljárás:
      Ciklus I=1-től N-ig
         Ciklus J=1-től M-ig
            S:= szomszédos csillagok száma(I,J)
            Elágazás
              T(I,J)="*" és S<2 vagy S>3 esetén T(I,J):=" "
              T(I,J)=" " és S=3 esetén T(I,J):="*"
              T(I,J)="*" és (S=2 vagy S=3) esetén T(I,J):="*"
            Elágazás vége
         Ciklus vége
      Ciklus vége
   Eljárás vége.


 10.116 

Egy síkon pontokat ábrázoló programhoz szükséges véletlensze-
rűen választani a 4 síknegyed között. Írjuk át  időben  rövi-
debbre a következő megoldást!

   Eljárás:
      Q:=RND(0)
      Ha Q<0.25 akkor L:=1
      
különben Ha Q<0.5 akkor L:=2
                            különben Ha Q<0.75 akkor L:=3
                                            különben L:=4
      Elágazások vége
   Eljárás vége.


 10.117 

Egy síkon pontokat ábrázoló programhoz szükséges véletlensze-
rűen választani a 4 síknegyedből pontot. Írjuk át időben  rö-
videbbre a következő megoldást!

   Eljárás:
      X:=RND(0)*A : Y:=RND(0)*B : L:=RND(4)
      Ha L=2 akkor  X:=-X
           különben Ha L=3 akkor  X:=-X : Y:=-Y
                         különben Ha L=4 akkor Y:=-Y
      Elágazások vége
   Eljárás vége.


 10.118 

Írjuk át gyorsabbra a következő programrészletet!

   110 FOR X=1 TO N : FOR Y=1 TO N
   120   B(X)=0 : F(X,Y)=0
   130 NEXT Y : NEXT X


 10.119 

Írjuk át gyorsabbra, helyben rövidebbre a következő  program-
részletet!

   10 IF I=1 AND (J=1 OR J=M) OR I=N AND (J=1 OR J=M) THEN 20
      ELSE 40
   20 IF (F*8/3)-INT(F*8/3) < 0.5 THEN F=INT(F*8/3) ELSE
      F=INT(F*8/3+1)
   30 GOTO 60
   40 IF I=1 OR I=N OR J=1 OR J=M THEN 50 ELSE 60
   50 IF (F*8/5)-INT(F*8/5) < 0.5 THEN F=INT(F*8/5) ELSE
      F=INT(F*8/5+1)


 10.120 

Írjuk át kevesebb helyet foglalóra a következő programrészle-
tet!

   10  PRINT "P(A)"; : INPUT P(1)
   20  IF P(1)>=1 THEN 10
   30  PRINT "P(B)"; : INPUT P(2)
   40  IF P(2)>=1 THEN 30
   50  PRINT "P(C)"; : INPUT P(3)
   60  IF P(3)>=1 THEN 50
   70  PRINT "P(D)"; : INPUT P(4)
   80  IF P(4)>=1 THEN 70
   90  PRINT "P(E)"; : INPUT P(5)
   100 IF P(5)>=1 THEN 90
   110 ...


 10.121 

Írjuk át kevesebb helyet foglalóra a következő programrészle-
tet!

   20  ...
   30  FOR I=1 TO N
   40    FOR J=1 TO M
   50      K=RND(0)
   60      IF K3 OR S(X,Y)<2) THEN
       A$(X,Y)=" "
   150 ...


 10.123 

Írjuk át gyorsabbra a következő programrészletet!

   100 ...
   110 FOR I=1 TO 9
   120   IF S(I)=3 THEN S(I)=0 : GOTO 170
   130   FOR J=1 TO 7
   140     IF Q(J)=3 THEN Q(J)=0 : GOTO 170
   150   NEXT J
   160 NEXT I
   170 STOP


 10.124 

Írjuk át kevesebb helyet foglalóra a következő programrészle-
tet!

   10 R=RND(0)
   20 IF RN OR J>M THEN 150
   120   IF A(I)=B(J) THEN PRINT A(I)
   130   IF A(I)=0 AND Y>=0 THEN PRINT "1. siknegyed"
   120 IF X<0 AND Y>=0  THEN PRINT "2. siknegyed"
   130 IF X<0 AND Y<0   THEN PRINT "3. siknegyed"
   140 IF X>=0 AND Y<0  THEN PRINT "4. siknegyed"
   150 ...


 10.133 

Írjuk át hatékonyabbra a következő programrészletet!

    90 ...
   100 INPUT A,B
   110 IF A5 OR A<>INT(A) THEN 100
   110 IF A=1 THEN X1=X1+1 : GOTO 160
   120 IF A=2 THEN X2=X2+1 : GOTO 160
   130 IF A=3 THEN X3=X3+1 : GOTO 160
   140 IF A=4 THEN X4=X4+1 : GOTO 160
   150 IF A=5 THEN X5=X5+1 : GOTO 160
   160 IF A>0 THEN 100
   170 PRINT X1, X2, X3, X4, X5
   180 ...