1

Programozási módszertan gyakorló feladatok

3. feladatsor

1. Adott az egész számokat tartalmazó x vektor. Válogassuk ki az y sorozatba a vektor pozitív elemeit!

2. Írjuk fel a kétváltozós egyértékű elemenkénti feldolgozás tételét vektorokra!

3. Adott egy szöveg, ami mondatokból áll, és a mondatok végén pont van. Módosítsuk a szöveget úgy, hogy minden mondat végét jelző pontot pontosvesszőre cserélünk! A mondatokban lehetnek idézetek, és az idézetek is tartalmazhatnak idézeteket tetszőleges mélységben (az idézetet egy kezdőidézőjel vezeti be és egy záróidézőjel jelzi a végét). Azok a pontok, amelyek egy idézet belsejében vannak, nem jelentik a mondat végét! Feltesszük, hogy a szövegben az idézőjelek kiegyensúlyozottak.

4. Adott egy x sorozat, ami egy vállalat dolgozóinak adataiból áll. Egy dolgozóról a következő adatokat tudjuk:

– azonosító szám

– személyi adatok születési adatok (idő, hely, anyja neve) lakcím iskolai végzettség nyelvvizsgák

– vállalati adatok a munkaviszony kezdete beosztás fizetés

Adott még az y sorozat, ami azonosítókat tartalmaz. Mindkét sorozat az azonosítószám szerint rendezett. Adjuk meg a z sorozatban azoknak a dolgozóknak az adatait, akiknek az azonosítója szerepel y-ban és a munkaviszonyuk kezdete egy adott évnél régebbi!

5. Adott egy x sorozat, ami egy lapkiadó vállalat ügyfeleinek adataiból áll. Egy ügyfélről a következő adatokat tudjuk:

– azonosító szám

– név

– lakcím

– mióta ügyfele a vállalatnak

– ha ő maga fizeti elő az újságot, akkor milyen időközönként fizet hány példányt fizet elő azoknak az azonosítói, akiknek előfizet

– ha ő maga nem fizet elő, de kap újságot,

akkor annak az azonosítója, aki neki előfizet hány példányt kap Adott ezenkívül az y sorozat, ami azonosítókat tartalmaz. Mindkét sorozat azonosító szerint rendezett. Adjuk meg a z sorozatban azoknak az ügyfeleknek az adatait, akiknek az azonosítója szerepel az y sorozatban és legalább 3 éve ügyfelei a vállalatnak.

6. Az x szekvenciális file (megengedett művelet az sx, dx, x : read) földrengések adatait tartalmazza. Egy elem a következőkből áll:

– az észlelés helyének koordinátái

– a rengés erőssége

– a rengés időtartama

– a földrész azonosítója

– a rengést előre jelezték-e

Válasszuk ki a t sorozatba az előre nem jelzett földrengések észlelési helyeit, a z sorozatba pedig a 20 másodpercnél hosszabb földrengések adatait!

7. Az x szekvenciális file (megengedett művelet az sx, dx, x : read) egy vállalat dolgozóiról a következő adatokat tartalmazza:

– a dolgozó azonosító száma

– vezető beosztásban van-e

– legmagasabb iskolai végzettsége

Válasszuk ki a v sorozatba azoknak a dolgozóknak az adatait, akik vezető beosztásban vannak, a z sorozatba azoknak az azonosítóit, akik vezető beosztásban vannak, és nem érettségiztek!

8. Egy szekvenciális file (megengedett művelet az sx, dx, x : read) egy vállalat dolgozóinak adatait tartalmazza:

– a dolgozó neve

– a munkája jellege ( fizikai, adminisztratív, vezető )

– havi fizetése

– családja nagysága

– szociális pótlékok összege

– a család többi tagjának összjövedelme Végezzük el a következő számításokat:

– Válasszuk ki azoknak a fizikai dolgozóknak a nevét, akiknél az egy főre jutó családi jövedelem kisebb 1800 Ft-nál, és a családtagok száma 4-nél több!

– Adjuk meg a fizikai, adminisztratív ill. vezető beosztású dolgozók átlagos családnagyságát, és az egy főre jutó átlagos jövedelmet!

9. Egy szekvenciális file (megengedett művelet az sx, dx, x : read) egy egyetem dolgozóinak adatait tartalmazza:

– a dolgozó neve

– neme

– besorolása ( egyetemi tanár, docens, adjunktus, tanársegéd )

– havi fizetése

– a tanszék azonosítója Végezzük el a következő számításokat:

– Válasszuk ki egy-egy szekvenciális file-ba a nő ill. a férfi dolgozók adatait!

– Határozzuk meg a besorolás szerint az át-

lagfizetéseket!

10. Adott a keresztnevek és a virágnevek file-ja, mindkettő abc-sorrendben rendezett (megengedett művelet az sx, dx, x : read). Határozzuk meg azokat a keresztneveket, amelyek nem virágnevek!

11. Adott két vektorban egy angol-latin szótár: az egyik vektor i-edik eleme tartalmazza a másik vektor i-edik elemének a jelentését. Válasszuk ki egy vektorba azokat az angol szavakat, amelyek szóalakja nem egyezik meg a latin megfelelőjével.

12. Egy file-ban (megengedett művelet a lopop extremális elemmel) adottak az egyes kaktuszfajtákról a (név, őshaza, virágszín, méret) adatok. Válogassuk ki egy file-ba a mexikói, egy másikba a piros virágú kaktuszokat!

13. Adott egy fileban (megengedett művelet az sx, dx, x : read) egy OTP nyilvántartás (név, összeg) párok alakjában. Adjuk meg annak a nevét, akinek nincs tartozása, de a legkisebb a betétállománya (ha van ilyen).

14. Az x szekvenciális file (megengedett művelet az sx, dx, x : read) egész számokat tartalmaz . Keressünk a file-ban lokális maximumot, vagyis olyan értéket, ami mindkét közvetlen szomszédjánál nagyobb!

15. Adott az x és b vektor úgy, hogy b az x indexeiből veszi fel elemeit. Az x vektor minden b[j]-edik eleme helyére írjunk nullát!

16. Állapítsuk meg, hogy hány különböző betű van az x sorozatban!

17. Egy szekvenciális file-ban (megengedett művelet az sx, dx, x : read) minden OTP átutalási betétszámla tulajdonosról adott a neve,címe, azonosítója, és év végi tartozása ill. túlfizetése. Értesítsük ki a hátralékkal illetve túlfizetéssel rendelkezőket! (Adjuk meg mindkét csoport nevét és címét egy-egy fileban.)

18. Adott egy egész számokat tartalmazó file. Ha a file tartalmaz pozitív elemet, akkor keressük meg a legnagyobbat, különben a legkisebbet!

19. Az x sorozat egy szöveget tartalmaz. Tömörítsük a szöveget úgy, hogy mindenütt ahol több szóköz van egymás mellett, csak egy szóközt hagyjunk meg!

20. Egy szekvenciális file (megengedett művelet az sx, dx, x : read) szöveget tartalmaz, amelyben a szavakat szóközök (esetleg több szóköz) választják el. Számoljuk meg, hány 3 jelnél rövidebb szó van a szövegben!

21. Adott egy szekvenciális file (megengedett művelet az sx, dx, x : read), ami egy bank tranzakcióit tartalmazza: egy ügyfél adatait tartalmazó rekord után olyan rekordok következnek, amelyek az ügyfél tranzakcióit írják le.

Ügyfél = (Azonosító, Bankszámla összege) Tranzakció = (Kivét-betét, Összeg)

Állítsuk elő azt a file-t, ami az ügyfeleknek a bankban levő pillanatnyi összegeit tartalmazza ügyfél típusú rekordokban!

22. Adott egy karakterekből álló szekvenciális file . Számoljuk meg, hogy a szöveg hány szóból áll, ha a 12 jelnél hosszabb szavakat két szónak tekintjük! (A szavakat tetszőleges számú szóköz választhatja el, megengedett művelet az sx, dx, x : read).

23. Adottak egy évfolyam hallgatóinak adatai az x : Évfolyam sorozatban. Válogassuk ki a z : Névsor sorozatba azoknak a hallgatóknak a neveit, akiknek átlaga legalább 3.00. Az Évfolyam és Névsor típusok a következők:

Évfolyam = seq(Csoport)

Csoport = seq(Hallgató)

Hallgató = (Név,Átlag)

Névsor = seq(Név)

24. Adott az x vektor és az y szekvenciális file, amelynek elemei egyaránt pozitív egész számok. x-ben és y-ban egy szám legfeljebb egyszer fordul elő, és mindkettő növekvően rendezett. Az y egy olyan szekvenciális file, amire csak a lopop művelet megengedett, és a file végét egy negatív szám jelzi. Állítsuk elő a rendezett z sorozatot, ami x és y elemeit tartalmazza.

25. Adott az x szekvenciális file (megengedett művelet az sx, dx, x : read), amely egy szöveget tartalmaz. Állapítsuk meg, hogy hány olyan szó van a szövegben, ami tartalmaz ”R” betűt!

26. Adott az x sorozat, ami egy szöveget tartalmaz. Másoljuk át x-et a z sorozatba úgy, hogy a kerek zárójelek közé írt szövegrészeket elhagyjuk! (A zárójelekkel együtt.)

27. Adott az x szekvenciális file, melynek elemei egy vezetéknevet és egy keresztnevet tartalmaznak. A file a keresztnevek szerint rendezett. Gyűjtsük ki a file-ból a különböző keresztneveket, és azt, hogy hányszor szerepelnek!

28. Az x sorozat egy szöveget tartalmaz, ahol a szavakat egy vagy több szóköz választja el. Számoljuk meg, hogy a sorozatban hány k betűnél hosszabb szó van!

29. Adott egy szövegfile. Számoljuk meg, hogy hány betűből (karakterből), hány szóból és hány sorból áll. A szavakat elhatároló karakterek (esetleg több is) választják el egymástól. A sorokat sorvége karakterek választják el egymástól. A sorvége karakter egyben szóelhatáro1ló jel is.

30. Adott egy file, ami nullákat és egyeseket tartalmaz. Tömörítsük a file-t úgy hogy kiírjuk az első elemét, majd utána felsoroljuk az azonos elemekből álló részsorozatok hosszait.

31. Adott egy szövegfile, amiben a bekezdéseket üres sorok választják el egymástól. Számoljuk meg, hogy a szöveg hány bekezdésből áll.

32. Adott egy szövegfile, ami egy bekezdésekre tagolt szöveget tartalmaz. Határozzuk meg azoknak a bekezdéseknek a sorszámait, amelyek tartalmaznak kérdőjelet!

33. Adott egy szövegfile, ami egy bekezdésekre tagolt szöveget tartalmaz. Határozzuk meg azoknak a bekezdéseknek a sorszámait, amelyek tartalmazzák az “alma” szót!

34. Adott egy szövegfile, ami egy Modula-2 rekorddefiníciót tartalmaz. Döntsük el, hogy a rekorddefiníció szintaktikusan helyes-e. (Megengedett művelet: egy karakter olvasása.)

35. Adott egy szövegfile, ami egy Modula-2 program forrásszövegét tartalmazza. Válogassuk ki egy file-ba a programban szereplő eljárásneveket az alábbi módon: Írjuk ki, hogy eljárásdeklarációt vagy eljáráshívást találtunk-e, írjuk ki az eljárás nevét és annak a sornak a számát, amelyikben az eljárásnevet megtaláltuk. (Megengedett művelet: egy karakter olvasása.)

36. Adott egy szövegfile, ami egy Modula-2 forrásprogramot tartalmaz. Másoljuk át egy másik file-ba úgy, hogy a nyelv kulcsszavai elé és mögé egy-egy adott karaktersorozatot másolunk be. A program tördelését ne változtassuk meg, tehát minden sor ugyanazon a pozíción kezdődjön, ahol az eredeti file-ban.

37. Adott egy szövegfile, ami egy színdarabot tartalmaz. A szereplők neveit mindig új sorban találhatjuk, kapcsoszárójelek közé zárva. Készítsük el egy adott szereplő szövegkönyvét végszavazással, azaz ne csak az ő szövegét írjuk ki, hanem az előtte szóló szövegének utolsó sorát is.

38. Adott egy szövegfile, ami hexadecimális alakban felírt számokat tartalmaz. A számokat elhatároló jelek választják el egymástól. Keressük meg a legnagyobb számot.

39. Adott egy szövegfile, amelyben a szövegen belül telefonszámokat találhatunk. (Telefonszámnak tekintünk minden olyan karaktersorozatot ami pontosan hét számjegyet tartalmaz úgy, hogy a számjegyek között csak kötőjel szerepelhet.) Másoljuk át a file-t úgy, hogy a benne szereplő telefonszámokat XXX-XXXX formára hozzuk.

40. Adottak az x szekvenciális file-ban (megengedett művelet az sx, dx, x : read) egy évfolyam hallgatóinak adatai. Egy elem a hallgató nevét, csoportszámát, és tíz db osztályzatot (a nulla azt jelöli, hogy az osztályzat hiányzik) tartalmaz. A file a csoportszámok szerint növekvően rendezett. Állítsuk elő az y sorozatot, ami a hallgatók nevét, csoportszámát és átlagát, valamint a z sorozatot ami a csoportátlagokat tartalmazza!

41. Adottak az x és b sorozatok (x.dom ≫ b.dom), amelyek egész számokat tartalmaznak. Fektessük b-t folyamatosan x-re egymás után ahányszor csak lehet, és az egymás feletti két szám összeadásával állítsuk elő az eredménysorozat elemeit! (Az eredmény ugyanolyan hosszú lesz, mint x volt.) Készítsünk legalább két megoldást!

42. Az x vektor csak a 0 és 1 értékeket tartalmazza. Transzformáljuk x elemeinek értékét úgy, hogy x[i] = 0 legyen, ha az i-edik elem és az (i+1)-edik elem megegyezett, különben x[i] = 1 teljesüljön!

43. Adott n db egész számokat tartalmazó rendezett file. Számoljuk meg, hogy egy-egy szám hányszor szerepel, és ezt írjuk ki egy fileba rendezett számpárok (szám, darabszám) alakban.

44. Egy szövegfile egy Modula-2 forrásprogramot tartalmaz. Töröljük ki a megjegyzéseket a programból!

45. Adott az x szekvenciális file (megengedett művelet az sx, dx, x : read), ami egy szöveget tartalmaz . A szövegben a szavakat tetszőleges számú szóköz választhatja el. Másoljuk át a szöveget egy másik szekvenciális file-ba úgy, hogy mindegyik szót megfordítjuk!

46. Adott egy évfolyam nyilvántartás névsor szerint a következő adatokkal: név, csoportszám, átlag. Félévenként módosítják az adatbázist, ekkor az alábbi változások történhetnek:

– jöhetnek új hallgatók az évfolyamra

– elmehetnek hallgatók

– változhat a hallgatók átlaga

– megváltozhat a hallgatók csoportszáma A változások is névsor szerint rendezett file-ban vannak. Végezzük el az adatbázis frissítését.

47. Végezzük el egy áruház osztályain kintlévő árukészlet nyilvántartásának napi frissítését. Az adatbázisban az árukról nyilván van tartva melyik osztályon árusítják, mi a neve, mennyi az ára, és hány db van belőle a boltban. A nyilvántartás osztályok szerint, azon belül árunév szerint rendezett. Egy módosítófile tartalmazza ugyanígy rendezve a napi fogyást, az új szállítmányokat, és az árváltozásokat.

48. Adott egy szövegfile sorszámokkal (szigorúan növekedő), melyek között lehetnek ugrások is (pl. egy BASIC program). A file javítását egy másik fileban írjuk le. Egy javítási utasítás (sor, pozíció, művelet, karakter) adatokból áll. A módosító file sorszám szerint rendezett, és egy sorra legfeljebb egy utasítás vonatkozik. Végezzük el a file-ban az előírt módosításokat. A műveletek:

– karakter módosítása adott sor adott pozícióján

– karakter beszúrás adott sor adott pozíciójára – karakter törlése adott sor adott pozícióján – új (üres) sor beszúrása

– egy teljes sor törlése

49. Oldjuk meg az előző feladatot úgy, hogy a műveleteket kibővítjük az alábbiakkal, és ugyanarra a sorra több művelet is vonatkozhat, ekkor ezek pozíció szerint rendezettek soron belül. Sortörlések után jöhetnek ugyanarra a számra vonatkozó beszúrások és az üres sor beszúrások után is jöhetnek arra a sorra vonatkozó karakter beszúrások.

– blokktörlés (pozíciótól pozícióig)

– adott sortól n db sor törlése

– n db üres sor beszúrása

50. Adott egy raktárnyilvántartás (áru,mennyiség) adatokkal, névsor szerint rendezve. Minden nap érkezik három file:

– a gyártótól: szállítás; melyik áruból menynyit hozott

– a boltból: igénylés; melyik áruból mennyit rendel a bolt

– a főnöktől: selejtezés; csak áruneveket tartalmaz, amiket törölni kell a nyilvántartásból

Végezzük el az adatok módosítását. Ha nincs annyi áru amennyit a bolt igényel, akkor ezt jelezzük, de amennyit lehet adjunk ki a boltnak. Ha egy áru mennyisége 0-ra csökken, akkor töröljük ki a nyilvántartásból. Ha a gyártó olyan árut hoz, amilyen még nincs, azt fel kell venni az adatbázisba.

51. Adott a virágokról egy nyilvántartás (virágnév, szín, magasság) adatokkal, virágnév szerint növekvően rendezve egy x fileban. Adott továbbá három ugyanilyen szerkezetű módosító file (a, b, c). Végezzük el az x file időszerűsítését a következők szerint:

– Ha egy virág benne van a-ban, akkor szúrjuk be x-be.

– Ha egy virág benne van b-ben, akkor módosítsuk x-et a b-beli rekorddal.

– Ha egy virág benne van c-ben, akkor töröljük x-böl.

Ha egy rekord több módosítófileban is benne van, akkor a módosításokat a fenti sorrendben kell elvégezni (először a, majd b és c).

52. Adott egy évfolyamnévsor, ami a hallgatókról tartalmazza a következő adatokat: név, csoportszám, tanulmányi átlag. A sorozat a csoportszám szerint növekvően rendezett. Válogassuk ki azoknak az adatait, akiknek az átlaga legalább 3.00, és határozzuk meg a csoportátlagokat!

53. Helyezzünk el n darab vezért egy n × n méretű sakktáblán úgy, hogy egyik vezér se támadjon másikat!

54. Hányféleképpen helyezhetünk el n darab vezért egy n × n méretű sakktáblán úgy, hogy egyik vezér se támadjon másikat!

55. Hányféleképpen helyezhetünk el n darab vezért egy n × n méretű sakktáblán úgy, hogy egyik vezér se támadjon másikat! A forgatással, tükrözéssel egymásba átvihető elrendezéseket csak egyszer számoljuk!

56. Legfeljebb hány vezért lehet egy n × n méretű tórikus sakktáblán elhelyezni úgy, hogy egyik vezér se támadjon másikat!

57. Adott n fiú és ugyanennyi lány. Egy t logikai mátrixban tároljuk a fiúk és lányok közötti szimpátiát (ez egy szimmetrikus reláció) a következőképpen: t[i][j] igaz, ha az i-edik fiú és a j-edik lány szimpatizál egymással, hamis ellenben. A feladat az, hogy ha lehet, akkor párosítsuk (házasítsuk) össze őket úgy, hogy minden párban a felek szimpatizáljanak!

58. Adott egy n×m méretű sakktábla (i, j) mezején egy huszár. Végig lehet-e vezetni a táblán úgy, hogy minden mezőre lép, de csak egyszer, és minden lépése szabályos (huszár lépés)?

59. Hányféleképpen lehet n forintot kifizetni m különböző címletű pénzből?

60. Hányféleképpen lehet n forintot kifizetni m különböző címletű pénzből, ha legfeljebb d_{1}, d_{2} … d_{m} használható fel?

61. Adott a természetes számok egy S véges részhalmaza. Kiválasztható-e ebből n darab elem úgy, hogy az összegük m legyen?

Typeset by AMS-TEX