4.1 

ÉpítsÜnk fel egy olyan listaszerkezetet, amelyben  az  elemek
névsor  szerint  helyezkednek  el  egy  vektorban!  A   lista
felépítésekor az alábbi mÜveleteket kell végrehajtani:

           1. Beillesztés: KATI
           2. Beillesztés: R•ZSI
           3. Törlés: KATI
           4. Beillesztés: MÁRIA
           5. Beillesztés: BEA
           6. Beillesztés: SACI
           7. Törlés: MÁRIA       !

Minden lépés után jegyezzük fel az adat-  és  a  mutatóvektor
alakulását!



 4.2 

Listába fűzve tárolunk adatokat az LI$() nevű szöveges  tömb-
ben, a MUT() nevű tömböt használva mutató tömbként. SF a sza-
badlistafej, MUT(0) a listafej. Néhány műveletet  végrehajtva
adatszerkezetünk a következőképpen néz ki:

              I     LI$(I)           MUT(I)

              1     GÉZA               3
              2     LAJOS              6
              3     SANYI              0
              4     ÉVA                2
              5     ALAJOS                                                
8









              6     PISTA                           
10
              7     SÁRI               9
              8     BARNABÁS           4
              9     PALI               1
              
10     ZOLI               0

                 MUT(0)=5 ,     SF=7

Végezzük el a következő műveleteket!

           1. Beillesztés: ALBERT
           2. Törlés: ZOLI
           3. Beillesztés: DEMETER

Írjuk le minden művelet után, hogy néz ki  az  adatszerkezet!
Soroljuk fel, hogy a műveletek elvégzése után melyek a szabad
helyek!


 4.3 

Rendelkezésünkre áll a T$(), P() adat és mutatótömb.  Ezekben
először kialakítottunk egy  szabadlistát,  majd  a  következő
sorrendben beillesztettünk hat adatot:

   ABLAK, CINTULA, KALAP, FAL, ZAK•, BAB.

Írjuk ki a műveletek elvégzése után  az  adat  és  mutatótömb
elemeit! Végezzük el a következő teendőket!

           1. Törlés: ZAK•
           2. Beillesztés: MALAC
           3. Törlés: CINTULA
           4. Törlés: ABLAK

Hogyan néz ki most a két tömb?


 4.4 

Készítsünk algoritmust és programot,  amely  megvalósítja  az
összes LISTA műveletet! Az  elemek  tárolására  használjuk  a
LI$(), a mutatók tárolására a MU() tömböt! Az elemek  logikai
sorrendje olyan legyen, hogy bejáráskor  növekedő  sorrendben
kapjuk őket vissza!


 4.5 

Személyi számokat tárolunk az S$() tömbben. Ezek növekvő sor-
rendben listába vannak fűzve. Feltesszük, hogy csak 1900 után
született magyar állampolgárok szerepelnek  a  nyilvántartás-
ban. A FEJ változó legyen a fejmutató, az M() pedig a  mutató
tömb. Írjunk algoritmust, amely a FEJF, FEJN változók  és  az
N() tömb segítségével szétválogatja a férfiakat és  a  nőket!
N() tömbben legyenek a két új lista mutatói!


 4.6 

Adott egy lista az E$() tömbben. A láncoláshoz szükséges  mu-
tatókat a P() tömb tartalmazza. A P(0)  mutat  a  lista  első
elemére (a lista feje). Írjunk  algoritmust,  amely  a  lista
elemeinek sorrendjét megfordítja!


 4.7 

Készítsük el azt az algoritmust, amely két azonos típusú ele-
mekből álló rendezett listát úgy egyesít egy listává, hogy  a
rendezettség továbbra is megmarad!


 4.8 

A kétirányú lista elemei mindkét  irányban  láncolva  vannak.
Két fejmutató jelzi a láncolások kezdetét. Írjuk meg a  kere-
sés, beszúrás, törlés és a mindkét irányú  bejárás  eljáráso-
kat!


 4.9 

Írjunk olyan programot, amely egy egyirányú listából  kétirá-
nyú listát készít egy új mutatótömb segítségével!


 4.10 

Ha egy felépített listaszerkezetben  kell  elemeket  keresni,
akkor nem célszerű mindig az elejéről  indítani  a  keresést.
Ilyenkor szoktunk ciklikus listát használni. Ennél a  szerke-
zetnél a fejmutató az utolsó  műveletben  utoljára  megtalált
elemre mutat. Algoritmus megírása után  készítsük  el  azt  a
programot, amely bemutatja a ciklikus lista működését!


 4.11 

Készítsünk programot, amely listába  fűzött  számlálókat  tud
csökkenteni 'párhuzamosan'! (Egy  időegység  alatt  mindegyik
változó értéke  1-gyel  csökkenjen!)  Akármikor  be  lehessen
avatkozni és definiálni egy  új  számlálót  (név,  kezdőérték
megadásával). A számláló szűnjön meg, ha értéke elérte a 0-t!
Alkalmazzuk a ciklikus  lista  adatszerkezetét!  —j  számláló
létrehozását valamilyen billentyű leütésével lehessen  jelez-
ni. A program futásakor legyen látható a képernyőn az  összes
számláló neve és pillanatnyi értéke!


 4.12 

Készítsünk programot, amely számlálók értékét tudja  lépésen-
ként 1-gyel változtatni! Induláskor lehessen ezek  neveit,  a
hozzájuk tartozó kezdőértékeket megadni; és mindegyikről  meg
kelljen mondani, hogy növelni, vagy csökkenteni kell az érté-
két! A felhasználó futás közben tudjon új számlálót a  láncba
illeszteni ((név, érték, nő-csökken) megadásával) és lehessen
már létező számláló változásának  irányát  megfordítani!  Egy
számláló szűnjön meg, ha értéke 0-nál kisebbre változik!


 4.13 

Algoritmust és programot kell készíteni,  amelyikkel  kétirá-
nyú, ciklikus lista műveleteit tudjuk megvalósítani!


 4.14 

Nyilvántartást szeretnénk vezetni egy  vállalat  dolgozóiról.
Minden személyről tároljuk a nevét, személyi  számát,  címét,
foglalkozását. Különböző szempontok szerint kívánunk a majda-
ni adathalmazban keresni. A gyors elemelérés érdekében minden
szempont szerint listába fűzzük az adatokat. Ha két különböző
adatnak valamelyik mezője megegyezik, akkor ezek  a  személyi
számok szerint legyenek egymás között rendezve. Írjunk  prog-
ramot, amely felépíti a listákat, majd  különböző  szempontok
szerint keressünk az adatállományban!


 4.15 

Egy osztály tanulóinak ismerjük a nevét és  személyi  számát.
Külön-külön listába fűzve, személyi szám szerint növekvő sor-
rendben adott a fiúk, illetve a lányok listája. Fűzzük  egybe
a két listát személyi szám szerint növekvő sorrendbe!


 4.16 

Egy iskolanyilvántartásban adottak  az  osztályok  tanulóinak
listái. Fűzzük őket egymás után!


 4.17 

Az olimpiára jelentkezett sportolókat egy listába  fűzve  tá-
roljuk ország-, azon belül pedig névsor szerinti  sorrendben.
Megkapjuk egy újabb jelentkező ország sportolóit névsor  sze-
rint egy másik listába fűzve, illesszük be őket  a  megfelelő
helyre!


 4.18 *

Ismerjük egy osztály tanulóinak  nevét  és  személyi  számát,
személyi számok sorrendjében listába fűzve. Készítsünk  hozzá
egy újabb listát, amelyben az elemek névsor  szerint  követik
egymást!


 4.19 

Egyetemi hallgatók adatait névsor szerint növekvő  sorrendben
tároljuk, listaszerkezetben. Az  egyik  lány  férjhezment,  s
emiatt megváltozott a neve. Helyezzük át őt a névsor  szerint
megfelelő helyre!


 4.20 

Ismerjük egy osztály tanulóinak  nevét  és  személyi  számát,
személyi számok sorrendjében  listába  fűzve.  Válogassuk  ki
újabb listákba a fiúkat,  a  lányokat,  az  olyan  fiúkat  az
aktuális évben betöltik 18. életévüket!


 4.21 

Egy iskola tanulóit a következőképpen tároljuk: az  osztályo-
kat listába fűzzük, s ezen a listán belül egy-egy osztály egy
újabb allista, névsor szerint rendezve. Készítsük el ehhez az
adatszerkezethez a következő eljárásokat:

   1. egy tanuló törlése,
   2. új tanuló felvétele valamelyik osztályba,
   3. egy tanuló áthelyezése másik osztályba,
   4. tanév végén a 4.-esek megszüntetése,  mindenki egy osz-
      tállyal feljebb lép, majd az új elsősök felvétele.


 4.22 

Megvalósítottunk  egy   veremként   működő   adatszerkezetet.
Ábrázoljuk  hogyan  alakul  a  verem  állapota  a   következő
műveletek elvégzése közben!

           1. Tetejére:ALMA,
           2. Tetejére:FA,
           3. Tetejéről,
           4. Tetejére:VEREM,
           5. Tetejéről,
           6. Tetejéről.

Megoldás:

     1. művelet után:       ALMA
     2. művelet után:       ALMA  FA
     3. művelet után:       ALMA
     4. művelet után:       ALMA  VEREM
     5. művelet után:       ALMA
     6. művelet után:       <üres>


 4.23 

Rendelkezésünkre áll egy N elemű vektor.  Írjunk  algoritmust
és programot a VEREM műveleteinek megvalósítására!


 4.24 

Egy N elemű vektort tudunk csak használni, de két  vermet  is
meg kell valósítani, amelyek együttes helyfoglalása  elérheti
a tömb méretét. Készítsük el a  VEREMműveleteket  megvalósító
programot!


 4.25 

Egy 20 elemű tömbben tárolunk öt vermet is. —gy oldottuk  meg
az elhelyezésüket, hogy listába  fűztük  az  azonos  veremhez
tartozó értékeket egy másik tömb és öt  fejmutató  segítségé-
vel. A maximális helykihasználás végett az éppen  szabad  he-
lyek szabadlistába vannak fűzve.

A veremmutatók  : V1=14, V2=10, V3=18, V4=3, V5=0.
A szabadlistafej: SF=12.
Az adatok       :

                                                                                                                          
SORSZÁM       ELEMEK       MUTAT•

               1.          4532            6
               2.          Alap           19
               3.          Fakír           4
               4.          Jóska           8
               5.          Sanyi           0
               6.          Data            0
               7.          35288          16
               8.          Tegnap          2
               9.          Lapos          13
              10.          Vége           15
              11.          24356           9
              12.          Lajos           7
              13.          34455          20
              14.          Csaba          11
              15.          57646           1
              16.          87432          17
              17.          Goto            0
              18.          Print           0
              19.          If              5
              20.          Eleje           0

Az adott veremnek akkor van vége, ha az aktuális elem mutató-
ja 0. Soroljuk fel a vermek elemeit elérési sorrendben! Írjuk
le a szabad helyek számát!


 4.26 

Egy vektort tudunk három VEREM számára lefoglalni. Sajnos nem
biztos, hogy a vektorban van hely minden elemnek. Oldjuk meg,
hogy amíg a vektorban akár egy hely is van szabadon,  akárme-
lyik VEREMbe tudjunk elemet berakni! Futásidő ne legyen szem-
pont, ha kell, akkor mozgassuk az elemeket nyugodtan!


 4.27 

Három VEREM szöveg tipusú adatai számára  egy  tömböt  tudunk
lefoglalni. Sajnos nem biztos, hogy a vektorban van hely min-
den elemnek. Oldjuk meg, hogy amíg a vektorban akár egy  hely
is van szabadon, akármelyik VEREMbe tudjunk elemet berakni! A
programot úgy tervezzük meg,  hogy  a  berakott  adatokat  ne
kelljen mozgatni a memóriában! (Numerikus tömböt,  a  mutatók
számára létrehozhatsz!)


 4.28 

Írjuk le a verem állapotát lépésről-lépésre a következő  LOGO
program végrehajtása közben, ha bemenő adat a SZALMA szó volt
és feltesszük, hogy a gép a szükséges paramétereket tárolja a
veremben!

      TO ABETU :SZO
      IF EMPTY :SZO THEN OUTPUT "FALSE
      IF FIRST :SZO = "A THEN OUTPUT "TRUE
                         ELSE OUTPUT ABETU BUTFIRST :SZO
      END


 4.29 

Hozzuk lengyel formára a következő kifejezést  és  ábrázoljuk
lépésenként a verem állapotát!

      3*(4-5*(3-15)/4)+100


 4.30 

Végezzük el az alább adott lengyel formára  hozott  kifejezés
kiértékelését!

      100 15 3 - 4 5 / * 4 - 3 * +


 4.31 

Készítsünk programot, amely lengyel formára hoz  konstansokat
és alapműveleteket tartalmazó numerikus kifejezést!


 4.32 

Lengyel formára hozott kifejezést kiértékelő  algoritmust  és
programot kell írni! A kifejezésben csak konstansok, műveleti
jelek (esetleg függvények) szerepelnek.


 4.33 

Van három vermünk. Az egyikben, a tetejétől lefelé növekedően
felsoroltuk 1-től 5-ig a számokat. A másik kettő üres. Rakjuk
át az elemeket -csak veremműveletek használatával-  az  egyik
üres verembe, ugyanilyen sorrendben úgy, hogy ne rakjunk soha
kisebb számra nagyobbat! (Hanoi tornyai)




   Az alfejezet további feladatai a FORTH nyelvhez kapcsolód-
nak. A nyelv lelkivilága  miatt  tartottuk  indokoltnak  ezen
feladatok leírását éppen a verem  adatszerkezettel  foglakozó
problémák között. Vannak olyan feladatok, ahol maga a  szöveg
nem emeli ki a paraméter- és vezérlésiverem  vizsgálatát,  de
természetesen ezek sem oldhatók meg a VEREM ismerete nélkül.
   Ezen feladatok nagy része szerepel a könyv  más  fejezete-
iben is, itt csak azért ismételjük meg  őket,  mert  a  FORTH
nyelv egészen más megoldást követel.


 4.34 

Határozzuk meg két szám legnagyobb közös osztóját! Eredményül
írjuk ki a két számot, valamint a legnagyobb közös osztót!  A
program lefutása után a verem legyen üres!


 4.35 

FORTH nyelven írjunk olyan programot, amely meghatározza  két
szám legkisebb közös többszörösét! Ábrázoljuk a  verem  álla-
potát egy-egy utasítás elvégzése után, ha a két szám: 6, 8!


 4.36 

A K számról kell eldönteni, hogy Fibonacci-szám-e! Készítsünk
FORTH programot ennek elvégzésére! Kövessük végig  a  paramé-
terverem alakulását, ha K=34!


 4.37 

Adott egy pozitív egész szám. Határozzuk meg  az  első,  nála
nem kisebb négyzetszámot! A verem legyen üres a  program  vé-
gén!


 4.38 

Határozzuk meg egy pozitív számhoz  legközelebbi  négyzetszá-
mot! A program lefutása után a verem legyen üres!


 4.39 

Számold meg FORTH program segítségével, hogy hány olyan  elem
van a veremben, amelyik 10-nél nagyobb és 100-nál kisebb.


 4.40 

A veremben van egy X elemű vektor és egy B szám. (A verem te-
tején a B szám, alatta a vektor elemszáma, ez alatt a  legna-
gyobb indexű elem.) Számoljuk  meg,  hogy  a  vektornak  hány
B-nél kisebb eleme van!

 4.41 

Mondjuk meg, hány osztója van a veremben levő számnak!


 4.42 

Határozzuk meg N különböző prímosztóinak a számát! (N a verem
tetején van. )


 4.43 

Egy természetes szám nem prím osztóinak számát számítsuk  ki!
(A számot a verem tetején találjuk.)


 4.44 

Határozzuk meg a verem tetején levő természetes  szám  legna-
gyobb multiplicitású prímosztóját!


 4.45 

Írjuk ki a P természetes számhoz legközelebb  álló  kettőhat-
ványt! (P a verem tetején van.)


 4.46 

Számítsuk ki a verem tetején lévő természetes számhoz  legkö-
zelebbi páratlan négyzetszámot!


 4.47 

Határozzuk meg a növekvően rendezett X vektornak azt a K  in-
dexét, amelyre:

      ABS(X(K)-X(K-1))+ABS(X(K+1)-X(K))

maximális! (Az X vektor a veremben van, a verem tetején a da-
rabszáma, alatta a legnagyobb indexű elem, ez a legnagyobb!)


 4.48 

Adott az X vektor és egy P szám. (A verem tetején  a  P  van,
alatta a vektor elemeinek száma, ez alatt a legnagyobb indexű
vektorelem.) Írjuk ki a vektorban levő  P-nél  kisebb,  P-vel
egyenlő, illetve P-nél nagyobb elemek számát!


 4.49 

Döntsük el, hogy a P természetes számnak (P a  verem  tetején
van) van-e páratlan valódi osztója!


 4.50 

Adjunk meg egy olyan számot, amely relatív prím  a  verembeli
számhoz!


 4.51 

Írjunk programot, amely kiszámítja a verem tetején  található
szám legkisebb páratlan, valódi osztóját!


 4.52 

Határozzuk meg  a  P  természetes  szám  legkisebb  egyszeres
osztóját!


 4.53 

Egy vektor [P,Q] intervallumba eső elemeinek a számát és azok
összegét kell meghatározni! (A veremben először az  X  vektor
elemszáma, azután az elemek, majd P és Q van.)


 4.54 

Keressük meg az X vektorban a  maximális  összegű  szomszédos
elempárt! A verem tetején a vektor elemszáma, majd alatta  az
elemek vannak.


 4.55 

Adjuk meg az X vektornak azt az elemét,  amelyiknek  a  szom-
szédjai átlagától vett eltérése a legnagyobb!


 4.56 

Adott a P és a Q szám (a verem tetején van a Q, alatta a  P).
Határozzuk meg azt a P-nél nem nagyobb számot, amelynek Q-val
vett osztási maradéka 1!


 4.57 

Adott egy N elemű vektor. Készítsünk programot, amely a beér-
kező adatot a SOR végére teszi és  egy  jelre  a  legrégebben
bentlevőt kiírja képernyőre!


 4.58 

Olyan programot írjunk, amely a kívánt elemeket SORba illesz-
ti! Oldjuk meg azt is, hogy ha a felhasznált tömbnek a végére
értünk, akkor lehessen az elején felszabadult helyeken  foly-
tatni a beillesztést! (Ezzel CIKLIKUS SORt hozunk létre.)


 4.59 

Kezeljen a programunk két SORt egy vektoron belül!  Az  egyes
sorok maximális helykihasználását nem tudjuk előre megbecsül-
ni, ezért dinamikusan kellene a rendelkezésre álló szabad he-
lyet megosztani az adathalmazok között.


 4.60 *

Szimuláljuk egy  benzinkút  forgalmát  program  segítségével!
Mérjenek a kútnál 3 különféle benzint különböző  kiszolgálási
sebességgel és érkezzenek a kutakhoz  más-más  gyakorisággal,
véletlenszerűen autók! A paraméterek módosításával  figyeljük
meg, hogy mikor torlódnak fel a kocsik benzinre várva és  mi-
kor nem kell sorba állniuk!


 4.61 **

Szimuláljuk egy  benzinkút  forgalmát  program  segítségével!
Mérjenek a kútnál 3 különféle benzint különböző  kiszolgálási
sebességgel és érkezzenek a kutakhoz  más-más  gyakorisággal,
véletlenszerűen autók! Mindegyik sor maximum K  autóból  áll-
hat, s ha valamelyik megtelt, akkor az összes újabb autó  egy
közös sorba állhat, a benzinkút előtt. A paraméterek  módosí-
tásával figyeljük meg, hogy mikor torlódnak fel a kocsik ben-
zinre várva és mikor nem kell sorba állniuk!


 4.62 **

Szimuláljuk egy  benzinkút  forgalmát  program  segítségével!
Mérjenek a kútnál 3 különféle benzint különböző  kiszolgálási
sebességgel. Van olyan benzinfajta, amelyet  egyetlen  helyen
adnak, s van olyan, amelyet két helyen. Érkezzenek a kutakhoz
más-más gyakorisággal, véletlenszerűen autók! Minden  autóval
a szükséges benzinfajtákhoz álló sorok közül a rövidebbe áll-
nak be! A paraméterek módosításával figyeljük meg, hogy mikor
torlódnak fel a kocsik benzinre várva és mikor nem kell sorba
állniuk!


 4.63 *

Szimuláljuk egy  benzinkút  forgalmát  program  segítségével!
Mérjenek a kútnál 3 különféle benzint különböző  kiszolgálási
sebességgel és érkezzenek a kutakhoz  más-más  gyakorisággal,
véletlenszerűen autók! Ha a megfelelő fajtájú benzinért  túl-
ságosan hosszú sor áll, akkor az autós adott  valószínűséggel
dönthessen úgy, hogy nem áll be a sorba! A paraméterek  módo-
sításával figyeljük meg, hogy mikor torlódnak  fel  a  kocsik
benzinre várva és mikor nem kell sorba állniuk!


 4.64 *

Egy kis közértben csupán egyetlen eladó dolgozik. § áll a hú-
sospultnál, s szükség esetén  átmegy  a  pénztárhoz,  illetve
vissza. (Az átmenés is valamennyi időbe kerül.) Érkezzenek  a
közértbe vásárlók, s kövessük nyomon a  sorok  alakulását  az
eladó különböző stratégiái szerint!


 4.65 **

Tegyük fel, hogy egy áruházban nincs önkiszolgáló rész,  min-
denhol pultok vannak, egy eladóval. A pultok meg vannak  szá-
mozva. (Legyen N db pult!) Fizetni a  vásárlás  végén  egyben
lehet a K db pénztár  valamelyikénél.  Modellezzük  ennek  az
áruháznak a működését úgy, hogy egy vevő érkezésekor meg kell
mondani a vásárló nevét és azoknak a pultoknak  a  sorszámát,
amelyeknél vásárolni kíván! Kíváncsiak vagyunk, hogy az egyes
vásárlók mennyi időegységet töltöttek az üzletben.  Egy  idő-
egység alatt minden sorból, a legrégebben beállt ember menjen
a következő állomáshelyre! Ezt úgy válassza meg,  hogy  minél
kevesebben legyenek előtte! —j ember érkezését billentyű  le-
nyomásával kell jelezni!


 4.66 **

Módosítsuk az előző feladatot úgy, hogy van M tartalék eladó,
akik beállhatnak olyan pultokhoz  dolgozni,  ahol  túlságosan
hosszú sorok állnak! Ettől ezekben a sorokban  kétszer  olyan
gyorsan szolgálják ki a vevőket. Ha a sor  elég  rövid  lett,
akkor a második eladó elmehet a pult mögül.


 4.67 **

Módosítsuk az előző feladatot úgy, hogy a nyitva tartó  pénz-
tárak számát is a forgalomhoz igazítjuk! Ha  túl  hosszúak  a
sorok, akkor új pénztárt nyitunk;  ha  pedig  rövidek,  akkor
egyes pénztárakat lezárunk, azaz a még sorban állókat kiszol-
gáljuk, de újabb vevők már nem állhatnak be abba a sorba.


 4.68 *

Egy áruházban a liftet csak úgy lehet használni, ha  legalább
N ember akar vele a földszintről felmenni valamelyik  emelet-
re, s ekkor K időegység múlva tér vissza a  földszintre.  Ké-
szítsünk programot, amely rendszertelenül érkező emberek ese-
tén szimulálja a lift működését!


 4.69 *

Gépkocsikkal üzletelő cégnek kell programot írnunk! N  típusú
autót árusít. Az igénylők érkezési  sorrendben  várakoznak  a
kocsikra. Egyszerre egyféle autóból jön, de bármelyik  típus-
ból is érkezzen, egyszerre mindig K db-ot hoznak.  A  program
legyen képes az igényeket sorba állítani és  a  kiértesítendő
vevőket kiírni! Tároljuk a vevők nevét, címüket és  tipusigé-
nyüket!


 4.70 *

Egy rendezőpályaudvaron szerelvényeket állítanak össze külön-
böző úti céllal. A szerelvényt akkor tekintjük késznek, ha  a
mozdony teherbírásának megfelelő számú kocsit összekapcsoltuk
és van mozdony, amely elviheti. Készítsünk programot,  amely-
lyel szimulálni lehet a rendező forgalmát.


 4.71 

Egy metróállomás mozgólépcsőjének  működését  kell  szimulál-
nunk. A mozgólépcsőt jelképező sorba  rendszertelenül  lépnek
be emberek (egyszerre 0, 1 vagy 2), s mindegyiknek K  időegy-
ségig kell a sorban tartózkodnia (ennyi  idő  alatt  lehet  a
lépcsőn végigérni, ha állva utazik rajta).


 4.72 *

Egy OTP-fiókban különböző helyen lehet pénzt befizetni,  köl-
csönt felvenni, valutát váltani stb. Bármelyik helyen is  van
dolgunk, utána a pénztárnál kapjuk meg a pénzt, illetve  kell
nekünk fizetni. Minden helyen sorba kell állni, s a forgalom-
tól függően mindenhol 1, 2 vagy 3  OTP-ügyintéző  foglalkozik
az ügyfelekkel. Kövessük végig program  segítségével  az  OTP
forgalmát!


 4.73 *

Egy automata szerszámgép úgy dolgozik, hogy egy  előtte  levő
sorból elvesz egy munkadarabot, azzal elvégzi a teendőit  (ez
fajtánként más-más időbe telik), majd kirakja egy másik  sor-
ba. Egy dolgozó tölti fel a szerszámgép előtti sort úgy, hogy
egyszerre K db munkadarabot hoz bele.  Ugyanez  a  dolgozó  a
szerszámgép utáni sorból egyszerre szintén K darabot tud  el-
vinni. Mindkét sorba N munkadarabot lehet elhelyezni.  Köves-
sük nyomon a sorok alakulását a dolgozó különböző  stratégiái
szerint!


 4.74 

Egy orvos várószobájába egyenként érkeznek a betegek, érkezé-
si sorrendben mennek be az orvoshoz, aki különböző ideig fog-
lalkozhat velük. Időnként érkezhetnek olyan betegek is, akik-
kel azonnal kell foglalkozni, s így soron  kívül  bejuthatnak
az orvoshoz. Vizsgáljuk meg, hogyan függ a sűrgős esetek szá-
mától, az egyes betegekre  fordított  időtől  a  sor  átlagos
hossza, a sorban töltött átlagos idő!


 4.75 *

Egy N vonalas munkahelyi telefonközpont úgy működik, hogy  ha
van szabad vonal, akkor a telefonáló azonnal kap  vonalat,  s
hívhatja azt, akivel beszélgetni akar; ha pedig nincs,  akkor
az igényeket sorbaállítja, s ha egy vonal szabadul,  akkor  a
legrégebbi igénylőnek adja. Megengedünk egy  olyan  műveletet
is, amely a sorra általában nem  jellemző:  hosszú  várakozás
esetén egyes telefonálni akarók letehetik a telefonkagylót, s
ekkor el kell őket távolítani a sorból. Kövessük nyomon a vá-
rakozási idő alakulását!


 4.76 **

Mivel csak egyetlen lemezegységünk, illetve  nyomtatónk  van,
ezért számítógépeinket összekapcsoltuk. A hálózat  használata
a következőképpen történik: a gép lehetőséget kér  az  eszköz
használatára, s ha az szabad, akkor a vezérlő leköti számára,
s ezt tudatja vele. Ezután küldhet adatokat a lemezre  (nyom-
tatóra) amíg egy speciális végjelet nem küld. Ha  közben  más
is szeretné ezeket az eszközöket használni, akkor a kéréseket
sorbaállítja, s olyan üzenetet küld vissza, hogy várjanak. Ha
az eszköz felszabadult, akkor a legrégebben várakozónak üzen,
hogy kezdheti a használatát. Írjuk meg  a  hálózatot  vezérlő
programot!


 4.77 *

A számítógép megszakításosan kezeli a billentyűzetet. Ha  egy
billentyűt leütünk, akkor az aktuális programfutás megszakad,
s a megszakításkezelő szubrutin elhelyezi a  leütött  billen-
tyűhöz tartozó karaktert egy sorba. Amikor  a  program  INPUT
utasítást hajt végre, akkor az adatokat a sorból kell  venni,
illetve ha az kiürült, akkor várni kell addig, amíg a megsza-
kításkezelő szubrutin nem vesz egy végjelet. Írjuk meg a meg-
szakításkezelő szubrutin, illetve az INPUT  utasítást  végre-
hajtó szubrutin algoritmusát!


 4.78 

Amikor a számítógéppel  lemezműveletet  hajtunk  végre  (írás
vagy olvasás), akkor nem történik mindig  fizikai  lemezműve-
let. Például írásnál a kiírandókat a számítógép egy  pufferba
gyűjti (ez egy sor, aminek csak a végére lehet  írni),  s  ha
megtelt, akkor az egészet kiviszi lemezre (ez a lemezen éppen
egy blokk), majd csak ezután fogadja a  következő  írnivalót.
Készítsünk eljárásokat mind a beolvasás, mind a kiírás  blok-
kosított megoldására!


 4.79 

Adjunk össze program segitségével, két egyforma  méretű  mát-
rixot!


 4.80 

Készítsünk programot, mely két mátrixot öszead és megvizsgál-
ja, hogy eredményül a csupa nulla  elemeket  tartalmazó  mát-
rixot kaptuk-e!


 4.81 

Két mátrix összeadása után a  program  ellenőrizze,  hogy  az
egységmátrixot kaptuk-e végeredményként!


 4.82 

Adjuk meg egy N*N-es mátrix transzponáltját!


 4.83 

Írjunk programot, amely egy N*M és egy  M*K  méretű  mátrixot
összeszoroz!

 4.84 

Síkbeli transzformációkat kell szemléltetni számítógépes gra-
fika segítségével. Írjunk olyan  eljárást,  amely  a  (Px,Py)
koordinátákkal adott pontnak kiszámítja a transzformáció utá-
ni helyét! Legyen a transzfomáció az ALFA  szögű  elforgatás!
Ennek a leképezésmátrixa:

                 cos(ALFA)    -sin(ALFA)

                 sin(ALFA)     cos(ALFA)

alakú. Ha ezzel a mátrixszal  szorozzuk  a  (Px,Py)  vektort,
akkor megkapjuk a pont elforgatottját!


 4.85 

Síkbeli transzformációkat kell szemléltetni számítógépes gra-
fika segítségével. Írjunk olyan  eljárást,  amely  a  (Px,Py)
koordinátákkal adott pontnak kiszámítja a transzformáció utá-
ni helyét! Legyen a transzfomáció az Sx-, Sy-szoros  nagyítás
az egyes tengelyek irányába! Ennek a leképezésmátrixa:

                 Sx    0

                 0     Sy

alakú.


 4.86 

Síkbeli transzformációkat kell szemléltetni számítógépes gra-
fika segítségével. Írjunk olyan  eljárást,  amely  a  (Px,Py)
koordinátákkal adott pontnak kiszámítja a transzformáció utá-
ni helyét! Legyen a transzfomáció az Lx, Ly-nyira eltolás  az
egyes tengelyek irányába! Ennek nem létezik  a  leképezésmát-
rixa, ezért a következűképpen járunk el: kiegészítjük a  (Px,
Py) pontot egy harmadik koordinátával: (Px,Py,1). Így már tu-
dunk adni egy leképezésmátrixot:

                 1    0    0

                 0    1    0

                 Lx   Ly   0  .


 4.87 *

Síkbeli transzformációkat kell szemléltetni számítógépes gra-
fika segítségével. Írjunk olyan  eljárást,  amely  a  (Px,Py)
koordinátákkal adott pontnak kiszámítja a transzformáció utá-
ni helyét! Tetszőleges sorrendben végezhessünk különböző  na-
gyításokat, forgatásokat, eltolásokat, majd az ezek utáni he-
lyet számoljuk ki!


 4.88 

Eljárást kell készítenünk a térbeli nagyítás, illetve  kicsi-
nyítés szemléltetésére írandó programba! Az  eljárás  paramé-
terként a PONT() nevű vektort kapja, ezen kell tehát a megfe-
lelő műveletet elvégezni. A leképezésmátrix alakja:

                    Sx     0      0

                    0      Sy     0

                    0      0      Sz         .


 4.89 

Számítsuk ki egy kétdimenziós mátrixnak a determinánsát!


 4.90 

Olyan függvényeljárást kell készítenünk, amely 3x3-as  mátrix
determinánsát tudja kiszámítani.


 4.91 *

Készítsünk eljárást, amely NxN-es mátrix determinánsát  tudja
kiszámítani!


 4.92 **

Egy négyzetes mátrix inverzét szeretnénk számítógép használa-
tával kiszámítani. Olyan mátrix lesz ez, mellyel az  eredetit
megszorozva az egységmátrixot kapjuk  eredményül.  Készítsünk
eljárást, amely előállítja az inverzmátrixot!


 4.93 **

Adott egy N egyenletből és N ismeretlenből álló, homogén  li-
neáris egyenletrendszer. (Homogén, ha csak 0  szerepel  kons-
tansként; lineáris, ha a változók  nincsenek  1-nél  magasabb
hatványon.) Program segítségével döntsük el, hogy van-e ennek
az egyenletrendszernek nem  triviális  megoldása!  (Triviális
megoldásról akkor beszélünk, ha minden ismeretlen értéke nul-
la. Ilyen akkor nincs, ha az együtthatókból képzett  determi-
náns nem nulla.)


 4.94 **

Egy A(N,N) mátrixról döntsük el, hogy a  transzponáltja  azo-
nos-e az inverzével!


 4.95 

Egy A(N,N) mátrixról döntsük el, hogy  önmagával  szorozva  a
0-mátrixot kapjuk-e!


 4.96 

Egy A(N,N) mátrixról döntsük el, hogy  valahányadik  hatványa
0-mátrix-e!


 4.97 

Egy A(N,N) mátrixról döntsük  el,  hogy  a  transzponáltjával
balról, illetve jobbról szorozva azonos eredményt kapunk-e!


 4.98 

Egy N sorú, K oszlopú mátrixot kell sorfolytonosan, vektorban
tárolni. (A sorfolytonosság azt jelenti, hogy  soronként  tá-
roljuk az adatokat és az L. sor utolsó eleme után az L+1. sor
első eleme következik.) Adjuk meg azt a  címfÜggvényt,  amely
az eredeti mátrix I. sorának, J. oszlopában található elemnek
a helyét határozza meg ebben a vektorban! (Legkisebb  tömbin-
dex legyen 1!)


 4.99 

Egy N sorú, K oszlopú mátrixot sorfolytonosan tárolunk.  Ala-
kítsuk át az ábrázolást oszlopfolytonossá!


 4.100 

Azonos hosszúságú (12 byte-nyi) adatokból álló N*K-s mátrixot
kell a memóriában elhelyezni, mondjuk az 1000-es címtől kezd-
ve! Írjunk olyan címfüggvényt, mely megmondja az  (I,J)  mát-
rixelem kezdetét a memóriában! (Legkisebb tömbindex legyen az
1!)


 4.101 

Az alábbi speciális N*N-es felső háromszög mátrixot  gazdasá-
gos módon ábrázoljuk. Csak a nem nulla elemeket - az ábrán az
X-ek jelölik ezeknek a helyét - tároljuk, sorfolytonosan  egy
vektorban. Adjuk meg azt a  címfÜggvényt,  amely  az  eredeti
mátrix (I,J) elemének a helyét határozza meg ebben a  vektor-
ban!

                        X  X  X  ...   X

                        O  X  X  ...   X

                        O  O  X  ...   X
                        .
                        .
                        0  0  0  ...   X


 4.102 *

Egy NxN-es tridiagonális mátrixot szeretnénk a memóriában úgy
tárolni, hogy először a főátló fölötti átlót, azután a  főát-
lót, majd a főátló alatti átlót tároljuk. Készítsük el a  tá-
rolásnak megfelelő címfüggvényt! (X-ek a nem nulla elemek he-
lyét jelölik.)

                     X  X  0  0 .. 0  0  0

                     X  X  X  0 .. 0  0  0

                     0  X  X  X .. 0  0  0
                     .
                     .
                     .
                     0  0  0  0 .. X  X  0

                     0  0  0  0 .. X  X  X

                     0  0  0  0 .. 0  X  X


 4.103 

Helyezzünk el egy NxN-es tridiagonális, valós típusú mátrixot
a memóriában a 2000-es címtől kezdve úgy, hogy  a  nem  nulla
elemek sorfolytonosan követik egymást! Adjuk meg azt  a  cím-
függvényt, mely megmondja  az  (I,J)  mátrixelem  memóriabeli
kezdőcímét!


 4.104 *

Adjuk meg az alábbi négyzetes mátrix címfüggvényét,  ha  tud-
juk, hogy oszlopfolytonosan tároltuk az elemeket!  (N  párat-
lan. Az X-ek jelölik a tárolt nem nulla elemek helyét.)

                      0  0 ... 0  0  ... 0  X
                      .
                      .
                      0  0 ... 0  X  ... X  X

                      0  0 ... X  X  ... X  X

                      0  0 ... 0  X  ... X  X
                      .
                      .
                      0  0 ... 0  0  ... 0  X


 4.105 *

Adjuk meg az alábbi négyzetes mátrix címfüggvényét! (N párat-
lan. Az X-ek jelölik a tárolt nem 0 elemek elhelyezkedését.)

                      0 ... 0  0  0 ... 0
                      .
                      .
                      0 ... 0  0  0 ... 0

                      0 ... 0  X  0 ... 0

                      0 ... X  X  X ... 0
                      .
                      .
                      X ... X  X  X ... X


 4.106 

Milyen elemeket érdemes tárolni az ún. N*N-es  Toeplitz  mát-
rixból és milyen alakú lesz a címfüggvény, amely  megadja  az
(I,J) mátrixelem helyét a tömörített tárolásban?  A  Toeplitz
mátrix felépítése olyan, hogy a főátlóval párhuzamos átlókban
az elemek azonos értékűek.

                        a  b  c  ........

                        d  a  b  c  .....

                        e  d  a  b  c ...

                        .
                        .


 4.107 

Adott egy N*N-es Hankel mátrix. Hogyan lehetne a lehető  leg-
kevesebb elmet tárolni úgy, hogy egy címfüggvény segítségével
minden mátrixműveletet el lehessen végezni? Adjuk meg a  cím-
függvényt is! A Hankel mátrix felépítése olyan, hogy  a  mel-
lékátlóval párhuzamos irányokban az értékek megegyeznek.

                         .......  c  b  a

                         ....  c  b  a  d

                                  a  d  e

                         .
                         .
                         a  d   .........


 4.108 *

Olyan mátrix tárolásáról kell gondoskodnunk, amelyben az ele-
mek nagyrésze 0. Ilyenkor nem célszerű a nulla  elemekkel  is
foglalni a helyet. Tároljuk szekvenciálisan a nem zérus  ele-
meket úgy, hogy az elemek mellé két  mutatót  illesztünk!  Az
egyik az elem sorindexe, a másik az  oszlopindexe  legyen.  A
három mező - az érték a harmadik - alkot egy adatrekordot  és
ezek ismeretében a mátrixot fel tudjuk építeni. Írjunk  prog-
ramot, amely egy hézagosan kitöltött mátrixból felépíti a tá-
rolandó rekordokat!


 4.109 

Az alább látható mátrix nem nulla elemeit kell  tárolni  úgy,
hogy az elem értéke mellett jegyezzük a  mátrixbeli  sor-  és
oszlopszámát is.

      ------------------------------------------------
      l   sorindex    l   oszlopindex   l    érték   l
      ------------------------------------------------

Hogyan néz ki az átalakítás után ez a mátrix, ha  feltesszük,
hogy a legkisebb tömbindex 1?

                       7  0  0  2  0

                       3  0  0  0  4

                       0  1  0  5  1

                       0  0  5  0  0



 4.110 

Készítsük el azt a programot, amely az előző feladatban leír-
tak szerint elkészített szekvenciális adatállományból a  kép-
ernyőre kiírja az eredeti mátrixot!


 4.111 *

Adott két hézagosan kitöltött mátrix. Tárolásukat úgy  oldot-
ták meg, hogy a nem nulla elemek mellé felvették plusz  mező-
ként az elem sorának és oszlopának számát, majd az  így  kép-
zett rekordokat egymás után az M, illetve a K  nevű  N1x3-as,
illetve N2x3-as tömbökben helyezték el. (N1, N2 a  nem  nulla
elemek száma.) Olyan eljárást készítsünk,  amely  ezt  a  két
mátrixot összeadja és az eredményt hasonló módon tárolja!


 4.112 *

Adott két hézagosan kitöltött mátrix. Helytakarékosság  miatt
egy értékes elemet az alábbi négyessel adunk meg:

            ---------------------------------------
            I sor   I oszlop I érték I mutató az  I
            I index I index  I       I oszlop köv.I
            I       I        I       I elemére    I
            ---------------------------------------

Szorozzuk össze őket úgy, hogy az eredmény is a fenti  formá-
ban adódjon!


 4.113 

Szénhidrogének szerkezeti felépítését mátrix segítségével tá-
roljuk. Az I. sor J.  oszlopában  szereplő  szám  megmutatja,
hogy az I. molekula a J. molekulával hány vegyértékű kötésben
áll. Ezt a táblázatot úgy tároltuk, hogy  csak  a  nem  nulla
elemeket vettük fel egy Nx3-as tömbbe. (N a molekula atomjai-
nak száma. Tároljuk a tömbben az értéket és az elem sor-, il-
letve oszlopszámát.) Határozzuk meg, hogy jól töltötték-e  ki
az eredeti mátrixot!


 4.114 **

Generáljunk labirintust!  Egy  NxK-s  mátrixot  töltsünk  fel
egyesekkel és nullákkal aszerint, hogy az  aktuális  pozíción
fal van-e, vagy nincs! Vigyázzunk, hogy ne legyen olyan  fal-
rész, amit körbe lehet járni!


 4.115 **

Készítsünk olyan labirintust,  amelyben  nem  lehet  falrészt
körbe járni és írjunk olyan algoritmust, amellyel a  bejárat-
tól eljuthatunk a kijáratig!


 4.116 *

Ha egy hézagosan kitöltött mátrix nem nulla elemeit  úgy  tá-
roljuk oszlopfolytonosan, hogy az elem mellé  az  oszlop-  és
sorindexét is felvesszük, akkor a mátrixot  ugyan  helyre  is
tudjuk állítani és a szükséges műveleteket is el  tudjuk  vé-
gezni, de mindez túl sok időbe kerül. Ez azért van, mert  nem
tudjuk pontosan, hogy az éppen kellő elem hányadik adat a tö-
mörített sorban. A keresési időt le lehet rövidíteni,  ha  az
azonos sorban levő elemeket felfűzzük egy listára  és  megje-
gyezzük valamilyen változóban, hogy az egyes sorokhoz tartozó
listák hol kezdődnek a nem  nulla  elemek  felsorolásában.  A
listára fűzéshez természetesen szükség van egy mutatóra, amit
szintén tárolni kell minden egyes elemhez. Írjunk olyan algo-
ritmust, mely az M(N,K) hézagosan kitöltött mátrix nem  nulla
elemeit helytakarékosan tárolja az azonos sorokban levő  ele-
mek listába fűzésével!


 4.117 *

Az előző feladat meggondolását folytatva  eljuthatunk  odáig,
hogy ha az oszlopok és a sorok szerint  is  felfűzzük  a  nem
nulla elemeket, akkor még  gyorsabban  el  tudjuk  végezni  a
szükséges műveleteket.


 4.118 

Egy mértani sorozat első 100 elemét kiszámolásuk után növekvő
sorrendben az S() nevű tömbbe  raktuk.  Logaritmikus  keresés
algoritmusával keressük meg azt az elemet, mely a legközelebb
van egy, az A változóban adott értékhez!


 4.119 

Egy iskola tanulóinak névsora és személyi száma, a NEVS() ne-
vű Nx2-es, szöveges tömbben található a személyi számok  sze-
rint rendezve növekvő sorrendben. Adjuk meg az első leány ta-
nuló nevét és születési évét!


 4.120 *

'Sok' adatot kell a memóriában tárolni, illetve ezekből visz-
szakeresni. ('Sok' jelentse azt, hogy már érdemes olyan adat-
szerkezeten gondolkodni, amelynél az elemek eléréséhez  minél
kevesebb idő kell.) Annak érdekében,  hogy  minél  gyorsabban
megtaláljuk őket,  indextáblás  módszerrel  külön  altáblákba
szedjük az adatokat a kezdőbetűjük szerint. Az altáblákon be-
lül az adatok legyenek érkezési  sorrendben  felsorolva.  Ké-
szítsük el annak a programnak az algoritmusát, amely a  beér-
kező elemeket a megfelelő altáblának a végére rakja!


 4.121 *

Készítsünk programot, amely segítségével az ismerőseink tele-
fonszámait tartjuk nyilván! A nevük kezdőbetűi  alapján  cso-
portosítsuk őket, mindegyikhez adjuk meg, hogy hol  található
az első olyan kezdőbetűs, majd egy  kezdőbetűn  belül  fűzzük
őket listába! A program tudjon az így  tárolt  adatok  között
keresni, új nevet felvenni, telefonszámot módosítani!


 4.122 *

Nagy mennyiségű adat elhelyezéséről kell  gondoskodnunk  úgy,
hogy minél gyorsabban megtaláljuk bármelyiket. Alkalmazzuk az
indextáblás módszert, azaz az adathalmazt  26  kisebb  altáb-
lára osztjuk a kezdőbetűknek megfelelően! Az egyes  altáblába
tartozó, - azonos kezdőbetűjű - szavakat fűzzük növekvő  sor-
rendben listába!  Készítsük  el  azt  az  eljárást,  amely  a
'nyers' adathalmazból felépíti az altábla rendszert!  Az  al-
táblákon belül legyenek az elemek növekvő sorrendben  listába
fűzve!


 4.123 

Sok adatunk van és szeretnénk úgy  tárolni  ezeket,  hogy  az
elemekhez minél gyorsabban, de lehetőség  szerint  körülbelül
azonos idő alatt férjünk hozzá. Válasszuk az altáblákra  bon-
tás módszerét, amely az adathalmazt több, egymástól különálló
részhalmazra osztja valamilyen megfontolás alapján! Egyik le-
hetőség a kezdőbetűk szerinti osztályozás. Ez most azért  nem
a legcélszerűbb, mert például q betűvel sokkal  kevesebb  ma-
gyar szó kezdődik, mint k-val, ez pedig azt jelenti, hogy  az
egyik halmazban jóval több az elem  mint  a  másikban.  Ekkor
természetesen nem tudjuk biztosítani az azonos elérési  időt.
Egy másik módszert kell tehát alkalmazni. Egy ún.  leképezési
függvény segítségével 10 altáblára bontjuk  az  alaphalmazun-
kat. Készítsük el azt a programot,  amely  képes  egy  érkező
elemet a megfelelő altábla végére illeszteni és  képes  adott
értékről eldönteni,  hogy  az  eddig  felvett  adatok  között
van-e! Legyen a leképező függvény a következőképpen adva: Ad-
juk össze az adatunk jeleinek ASCII kódját, majd vegyük a 10-
zel vett osztás maradékát! Ha így osztjuk szét  az  elemeket,
akkor minden elemet egyértelműen tudunk osztályba sorolni  és
a tapasztalat szerint az altáblákban körülbelül egyforma  sok
elem lesz.
 4.124 **

Válasszuk ki a megfelelő gráf tárolási módot, ha a  feladatul
két gráf 'egyformaságának' vizsgálatát  kapjuk!  (Két  gráfot
egyformának mondunk, ha egyenlő számú csúcsuk van és  két-két
azonos számú csúcs között van mindkét gráfban él.)


 4.125 *

Adott egy N csúcsú irányított körmentes  gráf.  Adjuk  meg  a
csúcsoknak egy olyan új sorszámozását, amelyben az I.  csúcs-
ból nem vezet él J-be, ha I>J!


 4.126 **

Adott egy N csúcsú összefüggő gráf. Döntsük el,hogy a csúcsok
két osztályba sorolhatók-e úgy, hogy él egy osztály két  csú-
csa között ne legyen, csak különböző osztálybeli csúcsok  kö-
zött! (A gráf un. páros gráf-e?)


 4.127 

Adott egy gráf és annak  két  részgráfja.  Határozzuk  meg  a
részgráfok közös éleit!


 4.128 **

Határozzuk meg egy gráf minimális feszítőfáját!


 4.129 *

Keressük meg egy gráf két kitüntetett csúcsa között a  legke-
vesebb élt tartalmazó utat!


 4.130 *

Adott egy N csúcsú irányított körmentes gráf és abban egy ki-
tüntetett csúcs. Adjuk meg a csúcsból kiinduló  összes  utat,
amelyben minden csúcs csak egyszer szerepelhet!


 4.131 *

Bontsunk összefüggő komponenseire egy gráfot!


 4.132 *

Adott egy összefüggő irányítatlan gráf. Keressünk benne olyan
élt, amit ha elhagynánk, a gráf már nem lenne összefüggő!


 4.133 *

Határozzuk meg, hogy egy gráf két csúcsa között hány különbö-
ző út van!


 4.134 *

Adott egy gráf és abban három csúcs: A, B, X.  Keressünk  egy
olyan utat az A és B csúcsok között, ami áthalad  az  X  csú-
cson!


 4.135 *

Adott a síkon hat pont. Rajzoljuk meg azt a fát, amely össze-
köti a pontokat és az élei hosszának összege a lehető  legki-
sebb!


 4.136 *

Adott egy fagráf, amelynek minden éléhez és minden  leveléhez
értékeket rendeltünk. A gráfnak van egy kitüntetett pontja: a
gyökérelem. Adjunk meg minden utat, ami a  gyökérelemtől  va-
lamelyik levélig vezet, s az utakhoz adjuk meg az éleken levő
értékek összegét is!


 4.137 **

Adott egy fagráf és abban egy kitüntetett levél. Adjuk meg  a
gráf összes olyan csúcsát, amelyből K hosszúságú út  vezet  a
kitüntetett levélig!


 4.138 **

Adott egy irányított körmentes gráf és benne két  kitüntetett
pont, egy kezdő- és egy végpont. Adjuk meg a  kezdőpontból  a
végpontba vezető utakat úgy, hogy  azoknak  ne  legyen  közös
pontja (csak a két szélső pont) és még egy a  kezdőpontból  a
végpontba vezető utat felvéve már  mindenképpen  megsértenénk
az előző feltételt!


 4.139 *

Megadtuk egy gyűrűs szénhidrogén szerkezetét úgy, hogy minden
szénatomhoz meghatároztuk a kapcsolódó szénatomokat.  Hagyjuk
el  belőle  az  olyan  szénatomokat,  amelyek  nem  tartoznak
egyetlen gyűrűhöz sem, illetve nem kötnek össze gyűrűt!


 4.140 *

Egy munkafolyamat több részből áll, amelyek mindegyike külön-
böző időt igényel. Ismerjük azt is,  hogy  melyik  megkezdése
előtt melyiket kell elvégezni. Számítsuk ki, hogy mennyi  idő
alatt lehet végezni az egész munkával!


 4.141 **

Módosítsuk az előző feladatot! Minden munkafolyamatot 1 ember
végez, de van M tartalék munkás is, akiket bárhova  be  lehet
állítani. Adjuk meg, hogy hova állítsuk be őket, s így  meny-
nyi lesz az elkészüléshez szükséges idő!


 4.142 **

Adott  a  síkon  N  darab  piros  és  ugyanannyi  kék   pont.
Párosítsuk össze a pontokat úgy, hogy egy párban egy piros és
egy kék pont legyen és a párokban levő  pontok  távolságainak
összege a lehető legkisebb legyen!


 4.143 **

Egy az A(1),...,A(N)  városokat  összekötő  úthálózatot  kell
építenünk, aminek olyannak kell lennie, hogy az úton  bármely
városból bármely város elérhető  legyen.  Ismerjük  a  K(I,J)
költségeket: az út megépítésének költségét az I és J  városok
között. Adjuk meg azt, hogy melyik városok között kell  megé-
píteni a közvetlen utakat, hogy az építés  a  legolcsóbb  le-
gyen!


 4.144 **

Ismerjük az Árpádházi királyok családfáját, amelyben  csak  a
fiúutódok szerepelnek, illetve az, hogy mettől meddig uralko-
dott, ha király volt. Adjuk meg, hogy

   1. mettől meddig tartott a leghosszabb egyenesági  öröklés
      (amikor az apát a fia követte a trónon),
   2. kik voltak testvérkirályok (amikor valakit  a  testvére
      követett),
   3. volt-e olyan, hogy valakit az unokája követett  a  tró-
      non,
   4. kik azok, akiknek ősei az előző 3 nemzedékben nem  vol-
      tak királyok!


 4.145 **

Módosítsuk úgy az előbbi feladatot, hogy a lányutódok is sze-
repeljenek a családfában, s a házasságokat is jelöljük! Adjuk
meg, hogy volt-e házassággal trónt szerzett király!


 4.146 **

Ismerjük Budapest autóbuszjáratait: tudjuk hol vannak  megál-
lók, valamint, hogy melyik busz, mely  megállókban  áll  meg.
Két adott megálló esetén állapítsuk meg, hogy:

   1. el lehet-e jutni az egyikről a másikra  átszállás  nél-
      kül,
   2. el lehet-e jutni az egyikről a másikra átszállással,
   3. adjuk meg a két megálló között a legrövidebb  utat,  ha
      tudjuk, hogy mennyi időbe telik egy busszal  eljutni  a
      következő megállóba, valamint azt, hogy mennyi idő  egy
      átszállás,
   4. melyik a legkevesebb átszállást igénylő út!


 4.147 

Egy gráfot ábrázolhatunk csúcsmátrixszal,  illetve  élmátrix-
szal. Írjunk eljárásokat, amelyek az egyik  fajta  ábrázolású
gráfot átalakítják a másik fajtává!


 4.148 *

Ismerjük Magyarország városokat összekötő úthálózatát (melyik
út milyen hosszú). Adjuk meg az összes várospárra, hány kilo-
méter autóútra vannak egymástól!


 4.149 **

Határozzunk meg az előző feladatban  adott  úthálózathoz  egy
olyan kört, amelyben Budapestről  indulunk,  minden  városban
járunk, de mindegyikben csak egyszer! (Hamilton kör)


 4.150 **

Módosítsuk az előző feladatot úgy, hogy ez  a  kör  a  lehető
legrövidebb legyen!


 4.151 

Győr úthálózatát egy irányított gráffal ábrázoljuk.Az egyirá-
nyú utcáknál ez két csomópont között egy élt jelent,  kétirá-
nyúaknál pedig kettőt.

   1. Döntsük el, hogy az A pontról  el  lehet-e  jutni  a  B
      pontra!
   2. Adjunk meg egy utat, amellyel A-ról B-re eljuthatunk!
   3. Adjunk meg egy zsákutcát!
   4. Adjuk meg azokat az utcákat, amelyek lezárásával az út-
      hálózat már nem lesz összefüggő!


 4.152 *

Az A(N,N) mátrix N darab város közti telefonhálózat  leírását
tartalmazza: A(I,J)=1, ha az I. és a J. város között  közvet-
len telefonösszeköttetés van, különben  A(I,J)=0.  Állapítsuk
meg, hogy két kijelölt város között létesíthetó-e (akár  köz-
vetett) kapcsolat!


 4.153 *

Adott N személyről az A(N,N) mátrix. A(I,J)=1, ha I és J  is-
merik egymást, A(I,J)=0 különben. Döntsük el,  hogy  összeál-
lítható-e a társaságban  olyan  négyfős  csoport,  amelyiknek
tagjai (páronként) nem ismerik egymást?


 4.154 *

Egy programban bizonyos eljárások más eljárásokat hívnak.  Ha
egy V eljárást hívja egy W eljárás, azt így írjuk: V