OO1PP2 – DZ2                                                                                   Rok za izradu: 22.04.2008.

PRAKTIKUM IZ PROGRAMIRANJA 2

- domaći zadatak broj 2 -

Sastaviti program na programskom jeziku C koji vrši određenu vrstu obrade nad jednom ili više matrica podataka tipa float. 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 neki od podataka ne unese karakterističnu vrednost.

Zavisno od rednog broja problema, sastaviti jedan od sledećih programa, koji:

  1. sve elemente matrice koji zadovoljavaju uslov da u matrici postoji i dva puta manji i dva puta veći element, podigne na stepen koji odgovara zbiru rednih brojeva vrste i kolone;
  2. uređuje vrste ili kolone matrice po nerastućem ili neopadajućem redosledu, na osnovu aritmetičke sredine vrednosti kolona, tako da prva kolona postane ona koja ima najveću vrednost aritmetičke sredine njenih elemenata;
  3. izračunava broj i ispisuje pozicije elemenata matrice koji su jednaki aritmetičkoj sredini svojih suseda (maksimalno 8 suseda);
  4. određuje najveću i najmanju razliku kvadrata korespondentnih elemenata u dve matrice i ispisuje pozicije odgovarajućih elemenata; podrazumevati da su ulazne matrice istih dimenzija;
  5. izračunava razliku proizvoda dve kvadratne matrice A i B: A*BT – B*AT;
  6. izračunava broj i ispisuje pozicije elemenata matrice koji su najmanji ili najveći i u svojoj vrsti i u svojoj koloni;
  7. pronalazi najveću podmatricu u matrici, takvu da je popunjena isključivo elementima različitim od nule, i ispisuje tu podmatricu na glavnom izlazu (ispisati dimenzije i vrednosti elemenata podmatrice, uz očuvanje uređenosti ispisa elemenata po redovima);
  8. izračunava broj i ispisuje pozicije elemenata matrice koji su najveći od svih svojih suseda (maksimalno 8 suseda);

Pri zadavanju matrice, program treba prvo da učita dimenzije, a zatim matricu popuni pseudoslučajnim brojevima, čiji opseg treba da učita sa glavnog ulaza. Kod ispisivanja matrice, program treba da ispiše jednu vrstu po liniji ispisanog teksta. Osmisliti i napisati na papiru nekoliko primera ulaznih podataka sa kojima će program biti testiran, kao i očekivani izlaz za te primere. Kandidati koji ne na odbrani nemaju spremna makar tri suštinski različita test primera ne mogu dobiti maksimalan broj poena.

Važno: po rešavanju osnovnog zadatka, modifikovati osnovni zadatak, tako da program za smeštanje matrice koristi dinamičku memoriju i jedan (i samo jedan!) statički pokazivač odgovarajućeg tipa. U toku rada, prilikom svake alokacije dinamičke memorije, proveravati uspešnost poziva funkcije. U slučaju neuspešne dodele dinamičke memorije, ispisati poruku o grešci i prekinuti izvršavanje programa. Nakon svakog ciklusa programa (unos, obrada, ispis) dealocirati svu dinamičku memoriju.

Napomene:

1.      Odbrana drugog domaćeg zadatka je u RC ETF, u utorak 22. aprila, prema rasporedu koji će biti blagovremeno objavljen 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 8

3.      Kao rešenje domaćeg zadatka potrebno je na odbrani pokazati sledeće datoteke:

·    dz2.c, koja sadrži izvorni tekst osnovnog programa na programskom jeziku C;

·    dz2_mod.c, koja sadrži izvorni tekst modifikovanog programa na programskom jeziku C;

15.04.2008. godine                                                                                               sa predmeta