Seminarske iz predmeta Programski jeziki – 1. del

(programski jezik C)

 

  1. Dana je sestavljenka iz trinajstih kvadratov in pravokotnikov ter praznega prostora velikosti dveh najmanjših kvadratov (glej sliko). Liki so označeni s črkami od A do M in jih premikamo tako, da jih prestavimo na sosednje prazno polje. Cilj igre je prestaviti kvadrat A z začetne pozicije (spodnji desni kot) v spodnji levi kot. Pri tem ni pomembno, kako so na koncu razporejeni ostali liki. Med igro ne sme priti do prekrivanja likov ali jemanja likov s plošče.



    Sestavite program, ki bo omogočal igranje gornje igre: grafični prikaz položaja, premikanje likov (s puščicami), ugotavljanje, ali je igre konec, štetje potez, ponoven za
    četek, zapis opravljenih potez na datoteko, ...
  2. Dana je sestavljenka iz 12 polj: 8 polj je označenih s številkami od 1 do 8, 4 polja pa so prazna. Cilj igre je s čim manj premiki označena polja preurediti tako, kot je prikazano na spodnji sliki. En premik pomeni zamenjavo enega oštevil;enega in sosednjega (po stranici) polja.



    Sestavite program, ki bo omogočal igranje gornje igre: grafični prikaz položaja, premikanje likov (s puščicami), ugotavljanje, ali je igre konec, štetje potez, ponoven začetek, zapis opravljenih potez na datoteko, ...
  3. Dana je pravokotna igralna plošča, razdeljena na m·n polj. Na dveh poljih imata dva igralca postavljeno vsak svojo figuro, v ostalih poljih pa so zapisana naključno izbrana cela števila. Igralca nato izmenično premikata vsak svojo figuro po plošči za eno polje navzgor, navzdol, v levo ali v desno in seštevata števila z obiskanih polj. V vsako že obiskano polje vpišemo ničlo. Igre je konec, ko so v vseh poljih na plošči vpisane ničle (ali pa je preseženo vnaprej predpisano število potez), zmaga pa tisti igralec, ki mu uspe zbrati večjo vsoto.
    Napišite program, ki bo omogočal igranje te igre za dva igralca. Program mora sproti prikazovati stanje na plošči, izpisovati trenutno vsoto za oba igralca, znati mora ugotoviti, kdaj je igra končana, omogočati mora enostavno premikanje figur in prekinitev igre.
  4. Dana je šahovnica velikosti m·n. V zgornji vrsti je n belih, v sopdnji pa n črnih šahovskih konjičkov. Konjičke želimo preurediti tako, da bodo v zgornji vrsti črni, v spodnji pa beli. Napišite program, ki nam bo pomagal pri preurejanju. Program naj omogoča premikanje konjičkov, grafični prikaz trenutnega položaja, vračanje potez, shranjevanje zaporedja opravljenih premikov na datoteko, ...
  5. Napišite program, ki bo omogočal igranje šaha na računalniku namesto na šahovski deski. Program naj zna prikazati trenutni položaj, preveriti pravilnost potez, vračati poteze, ugotoviti, ali je šah, mat, ..., prebrati položaj z datoteke in ga shraniti na datoteko, itn.
  6. Napišite program, ki bo omogočal reševanje IGRE 15 na računalniku. Program naj omogoča premikanje ploščic s puščicami in shranjevanje opravljenih potez na datoteko. Ugotovi naj tudi, kdaj je uganka rešena, seveda pa mora omogočati tudi predčasno prekinitev reševanja.
  7. Dana je datoteka, v kateri so po abecedi urejene besede (vsaka beseda je v svoji vrsti). Napišite program, ki bo to datoteko zapisal v “strnjeni” obliki: Za vsako besedo bo pogledal, koliko začetnih črk ima enakih kot prejšnja beseda. Če bo to število vsaj 2, bo namesto teh začetnih črk zapisal kar število enakih črk. Primer: iz zaporedja abeceda, abeceden, abnormalen, abnormalno, abonent, abonirati, abonma, admiral, admiraliteta, beseda dobimo zaporedje abeceda, 6en, 6nik, 2normalen, 8no, 2onent, 4irati, 4ma, admiral, 7iteta, beseda. Program naj omogoča tudi pretvorbo iz strnjene v običajno obliko ter pripravo kazala in iskanje po stisnjeni datoteki.
  8. Sestavite program, ki z datoteke prebere program v programskem jeziku C in ga statistično analizira. To pomeni, da prešteje, koliko vrstic ima, iz koliko znakov je sestavljen ter kolikokrat v njem nastopi posamezna rezervirana beseda. Pazite, da rezerviranih besed v nizih in v komentarjih ne boste šteli.
  9. Sestavite program, ki prebere besedilo z izbrane datoteke in ga preoblikovanega izpiše na izhodno datoteko. Program naj v besedilu odstrani večkratne presledke, poskrbi, da se stavki začenjajo z veliko začetnico, napolni vrstice do izbrane dolžine, itn.
  10. Napišite program, ki s histogramom v grafičnem načinu (možna naj bosta tako vodoravni kot navpični) predstavi frekvenco pojavitev posameznih črk v izbrani datoteki. Na željo uporabnika naj program loči med malimi in velikimi črkami.
  11. Na dvojiški datoteki imamo podatke o zalogah v skladišču. Podatki o posameznem artiklu imajo naslednjo strukturo: opis (največ osem znakov), količina, ki je v skladišču, in cena artikla. Pojavi se kupec, ki želi kupiti nekaj kosov določenega artikla. Sestavite program, ki bo preveril, ali je artikel na zalogi in koliko bo vreden nakup. Program naj tudi popravi stanje zaloge na datoteki.
  12. Sestavite program, s katerim boste lahko raziskali notranjo predstavitev različnih vgrajenih tipov (int, float, double) v računalniku. Program mora omogočati pretvarjanje med zaporedji ničel in enic ter med vrednostmi, ki jih ti tipi predstavljajo (dvojiški komplement, različni zapisi števil v premični piki). Program naj bo napisan karseda prenosljivo, tako da bo uporaben za različne prevajalnike in za različne računalnike.
  13. Sestavite program za tabeliranje logičnih izrazov. Program naj prebere logični izraz, podan kot niz znakov, in izpiše pripadajočo tabelo vrednosti. Program mora poznati osnovne logične veznike: negacija, in, ali, ..., upoštevati pa mora tudi oklepaje.
  14. Igro VISLICE igrata dva igralca. Prvi si izmisli neko geslo (pregovor, naslov knjige, ...), drugi pa poskuša z uganjevanjem posameznih črk to geslo s čim manj poskusi razkriti. Za vsako pravilno uganjeno črko mu igralec, ki si je izmislil geslo, pokaže, kje v geslu se ta črka pojavlja, za vsako napačno črko pa dobi po eno katensko točko. Kazensko točko dobi tudi v primeru, če kako črko ponovi ali pa se mu izteče čas za izbiro črke. Igre je konec, ko igralec ugane geslo ali pa ko zbere preveč kazenskih točk. Napišite program za igranje igre VISLICE.
  15. Igra CESTA je igra za enega igralca, čigar naloga je krmiljenje avtomobilčka po naključno generirani cesti na računalniškem zaslonu. Pri tem mora seveda paziti, da ne zavije s ceste. Generiranje ceste je zelo enostavno, saj računlanik na vsakem koraku vsebino celotnega zaslona pomakne za eno vrstico navzgor, v spodnji vrstici pa nariše podaljšani levi in desni rob ceste. Pri vožnji je videti, kot da vozimo od vrha zaslona proti spodnjemu robu, zaradi pomikanja ceste navzgor pa je avto v resnici vedno v isti vrstici zaslona. Pri generiranju ceste je treba seveda paziti, da ta ne uide z zaslona in da ne postane preozka. Program naj omogoča tudi nastavljanje težavnosti vožnje: omejitve pri širini ceste in pri velikosti vidnega dela ceste.
  16. NIM je igra za dva igralca, ki poteka takole. Na igralni površini se nahaja nekaj kupčkov kamenčkov. Na različnih kupčkih je lahko različno število kamenčkov. Igralca (v programu bosta to uporabnik in računalnik) izmenoma opravljata poteze. Ko je na potezi, mora igralec z enega od kupčkov vzeti enega ali veš kamenčkov. V isti potezi ne sme vzeti kamenčkov z več kupčkov. Zmaga tisti igralec, ki vzame zadnji kamenček. Kakšna je optimalna igralna strategija, je opisano v članku M. Željko, Igra NIM, Presek 21 (1993-94) št. 3, str. 176–178.
  17. Igro ČOKOLADA igrata dva jedca, ki izmenoma izbirata koščke. Ko se jedec odloči za košček, hkrati z njim odlomi in poje še vse koščke, ki ležijo desno pod njim. Ker je levi zgornji košček zastrupljem, tisti jedec, ki ga poje, igro izgubi. Napišite program, ki bo omogočal igranje igre ČOKOLADA za dva igralca. Program naj ima prijazen uporabniški vmesnik. Dodate lahko tudi možnost igranja proti računalniku.
  18. Napišite program, ki bo omogočal utrjevanje znanja osnovnih računskih operacij. Program naj si izmisli preprost račun, učenec pa mora vtipkati odgovor. Število poskusov in čas čakanja na odgovor naj bosta omejena. V računih naj nastopajo tudi oklepaji.