1
Dr. Željko Jurić: Tehnike programiranja /kroz programski jezik C++/ Tutorijal 6 Zadaci predviđeni za rad na laboratorijskim vježbama uz pomoć tutora Akademska godina 2014/15 1 Zadaci za Tutorijal 6. NAPOMENA: Studenti bi trebali da razmisle o zadacima koji će se raditi na tutorijalu prije nego što dođu na tutorijal, tako da već u startu imaju osnovne ideje kako riješiti zadatke. U suprotnom, rad na laboratorijskim vježbama neće biti produktivan. Zadatke koje studenti ne stignu uraditi za vrijeme tutorijala, trebali bi ih samostalno uraditi kod kuće. 1. Napišite funkciju sa jednim parametrom n, koja dinamički alocira niz od n cijelih brojeva, popunjava ga sa prvih n stepena broja 2 (stepeni dvojke su redom 1, 2, 4, 8, 16 itd.) i vraća kao rezultat pokazivač na prvi element tako alociranog niza. U slučaju da je n 0, funkcija treba da baci tekst “Broj elemenata mora biti pozitivan” kao izuzetak, a u slučaju da alokacija ne uspije, funkcija treba da baci tekst “Alokacija nije uspjela” kao izuzetak. Napisanu funkciju iskoristite u testnom programu u kojem se sa tastature unosi broj n, zatim poziva napisana funkcija za kreiranje traženog niza, koji se potom ispisuje na ekran, i na kraju se vrši oslobađanje prostora koji je zauzeo niz. Pored toga, u glavnom programu treba predvidjeti hvatanje svih izuzetaka koji bi funkcija eventualno mogla baciti. 2. Napišite generičku funkciju čiji je parametar vektor elemenata proizvoljnog tipa. Funkcija prvo treba da dinamički kreira niz čiji su elementi istog tipa kao i zadani vektor i koji sadrži isti broj elemenata kao i zadani vektor. Funkcija zatim treba prepisati sve elemente vektora u kreirani niz u obrnutom poretku (tj. prvi element vektora treba da postane posljednji element niza itd.) i vratiti pokazivač na prvi element tako kreiranog niza kao rezultat. Napišite i mali testni program u kojem ćete demonstrirati kako se upotrebljava napisana funkcija na vektoru realnih brojeva čiji se elementi unose sa tastature. 3. Napišite funkciju sa jednim cjelobrojnim parametrom n koja vrši dinamičku alokaciju “grbave matrice” sa n redova u kojoj prvi red sadrži samo element 1, drugi red elemente 1, 2 i 1, treći red elemente 1, 2, 3, 2 i 1, četvrti red elemente 1, 2, 3, 4, 3, 2 i 1, itd. Kao rezultat, funkcija vraća dvostruki pokazivač preko kojeg se može pristupiti elementima tako kreirane grbave matrice. Ukoliko je n negativan ili 0, funkcija treba baciti izuzetak tipa “domain_error”, uz odgovarajući prateći tekst koji možete odabrati po volji. U slučaju da alokacija ne uspije, funkcija treba baciti izuzetak tipa “bad_alloc” (što je uobičajeno ponašanje u slučajevima kada alokacija ne uspijeva), pazeći pri tome da ne dođe do curenja memorije ni u kakvim okolnostima. Napisanu funkciju iskoristite u isječku programa koji traži da se sa tastature unese broj n, zatim kreira “grbavu matricu” traženih svojstava sa n redova, te na kraju ispisuje njene elemente red po red nakon čega oslobađa prostor koji je zauzela ta matrica. Predvidite i hvatanje svih izuzetaka koji bi funkcija eventualno mogla baciti. 4. Napišite generičku funkciju koja kao svoj parametar prima dvodimenzionalnu strukturu (recimo matricu, ali pri čemu broj elemenata u svakom redu ne mora nužno biti isti) predstavljenu kao vektor vektōrâ čiji su elementi proizvoljnog tipa. Funkcija prvo treba da dinamički alocira prostor za dvodimenzionalnu strukturu identičnog oblika kao i parametar, zatim da u nju prepiše elemente dvodimenzionalne strukture predstavljene parametrom i, konačno, da kao rezultat vrati dvojni pokazivač preko kojeg se može izvršiti pristup elementima ove strukture. Za alociranje koristite metod fragmentirane alokacije. U slučaju da dođe do problema sa alokacijom memorije, funkcija treba baciti izuzetak (tipa “bad alloc”). Pri tome, ni u kom slučaju ne smije doći do curenja memorije. Napisanu funkciju testirati u testnom programu koji sa tastature unosi elemente matrice formata 3 3 organizirane kao vektor vektōrâ, a nakon toga poziva napisanu funkciju sa ciljem kreiranja odgovarajuće dinamičke matrice i, konačno, ispisuje elemente tako kreirane dinamičke matrice na ekran i oslobađa zauzetu memoriju. U testnom programu predvidite i eventualno hvatanje bačenih izuzetaka. 5. Ponovite prethodni zadatak, ali uz korištenje kontinualne umjesto fragmentirane alokacije.

Tutorijal_6

  • Upload
    amer

  • View
    221

  • Download
    7

Embed Size (px)

DESCRIPTION

C++ laksi zadaci

Citation preview

  • Dr. eljko Juri: Tehnike programiranja /kroz programski jezik C++/ Tutorijal 6 Zadaci predvieni za rad na laboratorijskim vjebama uz pomo tutora Akademska godina 2014/15

    1

    Zadaci za Tutorijal 6. NAPOMENA: Studenti bi trebali da razmisle o zadacima koji e se raditi na tutorijalu prije nego to dou na tutorijal, tako da ve u startu imaju osnovne ideje kako rijeiti zadatke. U suprotnom, rad na laboratorijskim vjebama nee biti produktivan. Zadatke koje studenti ne stignu uraditi za vrijeme tutorijala, trebali bi ih samostalno uraditi kod kue.

    1. Napiite funkciju sa jednim parametrom n, koja dinamiki alocira niz od n cijelih brojeva, popunjava ga sa prvih n stepena broja 2 (stepeni dvojke su redom 1, 2, 4, 8, 16 itd.) i vraa kao rezultat pokaziva na prvi element tako alociranog niza. U sluaju da je n 0, funkcija treba da baci tekst Broj elemenata mora biti pozitivan kao izuzetak, a u sluaju da alokacija ne uspije, funkcija treba da baci tekst Alokacija nije uspjela kao izuzetak. Napisanu funkciju iskoristite u testnom programu u kojem se sa tastature unosi broj n, zatim poziva napisana funkcija za kreiranje traenog niza, koji se potom ispisuje na ekran, i na kraju se vri oslobaanje prostora koji je zauzeo niz. Pored toga, u glavnom programu treba predvidjeti hvatanje svih izuzetaka koji bi funkcija eventualno mogla baciti.

    2. Napiite generiku funkciju iji je parametar vektor elemenata proizvoljnog tipa. Funkcija prvo treba da dinamiki kreira niz iji su elementi istog tipa kao i zadani vektor i koji sadri isti broj elemenata kao i zadani vektor. Funkcija zatim treba prepisati sve elemente vektora u kreirani niz u obrnutom poretku (tj. prvi element vektora treba da postane posljednji element niza itd.) i vratiti pokaziva na prvi element tako kreiranog niza kao rezultat. Napiite i mali testni program u kojem ete demonstrirati kako se upotrebljava napisana funkcija na vektoru realnih brojeva iji se elementi unose sa tastature.

    3. Napiite funkciju sa jednim cjelobrojnim parametrom n koja vri dinamiku alokaciju grbave matrice sa n redova u kojoj prvi red sadri samo element 1, drugi red elemente 1, 2 i 1, trei red elemente 1, 2, 3, 2 i 1, etvrti red elemente 1, 2, 3, 4, 3, 2 i 1, itd. Kao rezultat, funkcija vraa dvostruki pokaziva preko kojeg se moe pristupiti elementima tako kreirane grbave matrice. Ukoliko je n negativan ili 0, funkcija treba baciti izuzetak tipa domain_error, uz odgovarajui pratei tekst koji moete odabrati po volji. U sluaju da alokacija ne uspije, funkcija treba baciti izuzetak tipa bad_alloc (to je uobiajeno ponaanje u sluajevima kada alokacija ne uspijeva), pazei pri tome da ne doe do curenja memorije ni u kakvim okolnostima. Napisanu funkciju iskoristite u isjeku programa koji trai da se sa tastature unese broj n, zatim kreira grbavu matricu traenih svojstava sa n redova, te na kraju ispisuje njene elemente red po red nakon ega oslobaa prostor koji je zauzela ta matrica. Predvidite i hvatanje svih izuzetaka koji bi funkcija eventualno mogla baciti.

    4. Napiite generiku funkciju koja kao svoj parametar prima dvodimenzionalnu strukturu (recimo matricu, ali pri emu broj elemenata u svakom redu ne mora nuno biti isti) predstavljenu kao vektor vektr iji su elementi proizvoljnog tipa. Funkcija prvo treba da dinamiki alocira prostor za dvodimenzionalnu strukturu identinog oblika kao i parametar, zatim da u nju prepie elemente dvodimenzionalne strukture predstavljene parametrom i, konano, da kao rezultat vrati dvojni pokaziva preko kojeg se moe izvriti pristup elementima ove strukture. Za alociranje koristite metod fragmentirane alokacije. U sluaju da doe do problema sa alokacijom memorije, funkcija treba baciti izuzetak (tipa bad alloc). Pri tome, ni u kom sluaju ne smije doi do curenja memorije. Napisanu funkciju testirati u testnom programu koji sa tastature unosi elemente matrice formata 3

    3 organizirane kao vektor vektr, a nakon toga poziva

    napisanu funkciju sa ciljem kreiranja odgovarajue dinamike matrice i, konano, ispisuje elemente tako kreirane dinamike matrice na ekran i oslobaa zauzetu memoriju. U testnom programu predvidite i eventualno hvatanje baenih izuzetaka.

    5. Ponovite prethodni zadatak, ali uz koritenje kontinualne umjesto fragmentirane alokacije.