OO1PP2 – DZ3 Rok za izradu: 08.05.2009.
PRAKTIKUM IZ PROGRAMIRANJA 2
- domaći zadatak broj 3 -
Sastaviti program na programskom jeziku C kojim se vrši određena vrsta obrade nad znakovnim nizom (u daljem tekstu, string). Program treba da repetitivno učitava sve potrebne ulazne podatke, ispisuje ih po učitavanju, izvršava zahtevanu obradu, ispisuje sve dobijene rezultate, i ponavlja navedene korake sve dok korisnik za ulazni string ne unese "Dosta, Brus Li!".
Zavisno od rednog broja problema, sastaviti jedan od sledećih programa, koji:
0. menja u ulaznom stringu sve identifikatore kod kojih je više reči u nazivu odvojeno znakom _ tako što sve reči u nazivu identifikatora spaja, i to tako da svaka reč osim prve počinje velikim slovom (npr. empty_row_count menja sa emptyRowCount);
1. radi izmenu inverznu onoj u tački 0; u svakom identifikatoru svako veliko slovo znači početak nove reči; prva reč u izmenjenom stringu treba da ima veliko početno slovo (npr. RowCount se menja u Row_count, iADDFunc u I_a_d_d_func);
2. slova u labeli menja u velika, izbacuje blanko simbole između labele i dvotačke, te poravnava kod iza labele tako da počinje na dvanaestoj koloni (npr. lab1 : add ax, bx se menja sa LAB1: add ax, bx); labele nisu duže od 10 karaktera;
3. svaki string koji predstavlja for petlju napisanu na jeziku Pascal menja for petljom na jeziku C (npr. FOR i:=100 DOWNTO a-b do se menja sa FOR(i=100; i>=a-b; i--)); pretpostaviti da svaki string koji počinje rečju FOR predstavlja FOR naredbu;
4. ključne reči jezika Pascal (FOR, TO, DOWNTO, DO, WHILE, REPEAT, UNTIL, IF, THEN, ELSE) menja tako da budu ispisane svim velikim slovima; ako je bilo koje slovo u ulaznom stringu udvojeno, treba izbaciti jednu pojavu (npr. whhille i<j Do se menja u WHILE i<j DO, FORR i:=0 to 5 do u FOR i:=0 To 5 DO);
5. koriguje brojeve u ulaznoj liniji tako da se znaci !, @, #, $, %, ^, &, *, (, ) unutar broja zamenjuju ciframa 1, 2, ..., 0, respektivno; reč je broj ako počinje dekadnom cifrom; ako reč sadrži slovo, treba ga ukloniti (npr. 1@ se menja sa 12, 1(v4f sa 194).
Dimenzije stringa nisu poznate unapred. Memorija predviđena za string mora biti dinamički alocirana. Količina memorije koja je odvojena za string mora biti takva da iskorišćenje bude potpuno (ni bajt više, ni bajt manje). Realokaciju vršiti uvek kada je potrebno, i prilikom unosa stringa i prilikom obrade. U toku rada, prilikom svake alokacije ili realokacije dinamičke memorije, proveravati uspešnost poziva alloc funkcije. U slučaju neuspešne dodele dinamičke memorije, u glavnom programu ispisati poruku o grešci i prekinuti izvršavanje. Nakon svakog ciklusa programa (unos, ispis unetih podataka, obrada, ispis dobijenih rezultata) dealocirati svu dinamičku memoriju. Smatrati da korisnik string zadaje u jednom redu teksta putem standardnog ulaza (u string ulaze svi znakovi do '\n', ne uključujući i '\n'). Obradu treba vršiti nad kopijom stringa, a pri ispisu rezultata na izlaz ispisati i neizmenjeni original i izmenjenu kopiju. Priložiti na listu papira makar tri suštinski različita test primera i očekivane rezultate.
Važno: po uspešnom rešavanju osnovnog zadatka, modifikovati osnovni program tako da, nakon osnovne obrade, od početnog stringa formira dinamički niz stringova koji će sadržati reči iz početnog stringa, a zatim sortirati formirani niz reči u leksikografskom poretku. Smatrati da su reči razdvojene belim znakovima.
Napomene:
1. Odbrana trećeg domaćeg zadatka je u lab. 26, u četvrtak, 7.5.2009. godine, prema rasporedu koji je dostupan preko sistema WebLab.
2. Formula za redni broj problema i koji treba rešavati je sledeća (R – redni broj indeksa, G – poslednje dve cifre godine upisa): i = (R + G) mod 6
3. Kao rešenje domaćeg zadatka potrebno je na odbrani pokazati sledeće datoteke:
· dz3.c, koja sadrži izvorni tekst osnovnog programa na programskom jeziku C;
· dz3_ubl.c, koja sadrži izvorni tekst modifikovanog programa na programskom jeziku C;
30.04.2009. godine sa predmeta