OO1PP2 – DZ3                                                                                   Rok za izradu: 29.05.2008.

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:

  1. u zadatom stringu ispravlja sve greške u kucanju tipa „TWo INitial CAps“ (npr. BAnana promeniti u Banana), a zatim sve bele znakove između dve reči zamenjuje jednim znakom razmaka;
  2. u zadatom stringu ispravlja sve greške u kucanju tipa accidental cAPS LOCK usage (npr. jABUKA promeniti u Jabuka), a zatim sve bele znakove između dve reči zamenjuje jednim znakom razmaka;
  3. u zadatom stringu uklanja sva suvišna sukcesivna pojavljivanja nekog slova u reči (npr. Ppivvo promeniti u Pivo, vodddaaa u voda);
  4. uklanja sve HTML tagove iz zadatog stringa; HTML tagovi su oblika <tag> ili </tag> (npr. <head>, <title>, </body>);
  5. pronalazi najveća dužina reči u datom stringu, a zatim iz stringa izbacuje sve reči koje imaju tu dužinu i ispisuje ih na glavnom izlazu;
  6. u zadatom stringu, vrši zamenu reči ili dela reči sa odgovarajućom reči za zamenu; reč koju treba zameniti i odgovarajuću zamenu korisnik unosi sa glavnog ulaza;

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. Pre odbrane, 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 RC ETF, u četvrtak, 29.5.2008. 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;

14.05.2008. godine                                                                                                  sa predmeta