4. praktikum - Reeturite nimekiri (itv0020)

Allikas: Lambda
Süsteemprogrammeerimine keeles C

Praktikumid

Laborid

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