4. praktikum - Reeturite nimekiri (itv0020)
Sõber Raal andis sulle ülesande kirjutada programm Sisejulgeoleku poolt avastatud reeturite väljastamiseks. Töö käik on järgmine: Ametnik trükib konsoolil ükshaaval sisse kõikide reeturitest kodanike nimed, seejärel ühe tühja rea, et minna päringureziimi. Oled kuulnud (reeturite ja keelatud kuulujutte), et reetureid võib olla tuhandeid.
Päringureziimis sisestab teine ametnik programmile ühetähelisi päringuid, mille peale prindib konsool kõik selle tähega algavad nimed.
Kuna väljatrükke töötlev ametnik töötab kommunistide terroriakti tõttu väga suitsuses ruumi, on vaja kõik nimed väljastada suurtähtedega.
Tähtajaks on määratud väga lahkelt 2 nädalat ning tähtaja ületamisel lisab ametnik teid vastavasse nimekirja käsitsi.
Ülesanne
Taas: testimiseks paigutage oma programm kataloogi:
/home/t0xxxxx/CPRAK/prak4
Seekordse ülesande eesmärk on tekitada situatsioon, kus kõigepealt tuleb andmeid koguda, ning seejärel neid andmeid kasutada. Selleks peab funktsiooniga malloc() mälu küsima ja seda vajadusel realloc() funktsiooniga juurde küsima.
Kirjutada programm, mis loeb standardsisendist kuitahes palju (kuitahes pikki) ridu ning jätab nad meelde. See tähendab, et rea lugemisel peab jälgima, et rida mällu ära mahuks ja et ridade lugemisel tuleb ka aeg-ajalt mälu juurde küsida.
Kui loetud rida on tühi, minnakse sisestusrežiimilt päringurežiimi.
Päringurežiimis väljastatakse kõik sisendi esimese tähega algavad read standardväljundisse SUURTE TÄHTEDEGA. Tühjasid ridu ignoreeritakse.
Kui päringule vastavaid ridu ei ole, ei väljastata midagi.
Programmi nimeks pange "traitorlist", kirjutage sellele makefile (võtke eelmiste laborite makefile'id eeskujuks).
Soovituslikult võiks luua stringipointerite massiivi (char** array näiteks), milles on viited igale loetud reale ja igale reale siis eraldi mälu küsida. Rida võib olla kuitahes pikk ning ridu võib omakorda olla kuitahes palju.
Programm ei pea olema väga tõhus ega kiire.
Näide 1
Sisend
Aksel Kaarel Ellu Elmar e a k
Väljund
ELLU ELMAR AKSEL KAAREL
Näide 2 (veaolukorrad)
Sisend
Aksel Jaan Juss Ants J b Aaare
Väljund
JAAN JUSS AKSEL ANTS
Veel testsisendeid
Testimiseks saate sisendfaile juurde kui kirjutate:
tar -xzvf /export/samba/itv0020/praks4_sisend.tar.gz
Testimisest
Testimiseks peab programm olema kataloogis:
/home/t0xxxxx/CPRAK/prak4
Kuna programmi tuleb ise testida, siis paar vihjet. Näidis-sisendi andmiseks programmile kasutage sisendi ümbersuunamist:
./traitorlist < sisendfail.txt
Väljundi ümbersuunamiseks võite anda käsu:
./traotorlist < sisendfail.txt > väljund.out
Kahe faili võrdlemiseks on (kui on väikesed failid) võimalik kasutada käsku diff:
diff testsisend_out.txt väljund.out
Võite võrrelda ka programmiga md5sum, mis arvutab igale failile unikaalse numbri (räsi). Kui kaks faili on identsed, on nende räsid identsed. Üks viis testida on kontrollida, kas näidissisendile vastav näidisväljund on identne teie programmi näidisväljundiga.
Kui soovite testida oma programmi, käivitage dijkstra masinas (XXXXXX asendage matriklinumbriga):
/export/samba/itv0020/prak4.sh XXXXXX