veleuČiliŠte u varaŽdinu - velv.hrvelv.hr/~mmikac/pa2-1-6.pdf · veleuČiliŠte u varaŽdinu...

43
VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“ Zadaci i upute za laboratorijske vježbe VARAŽDIN, 2009.

Upload: vuongdiep

Post on 05-Feb-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU

ELEKTROTEHNIKA

PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika

„Uvod u C++“

Zadaci i upute za laboratorijske vježbe

VARAŽDIN, 2009.

Page 2: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

LABORATORIJSKE VJEŽBE – OPĆENITE NAPOMENE I BODOVANJE .............................................. 2

RAZVOJNO OKRUŽENJE................................................................................................................................. 5

VJEŽBA 1 – UPOZNAVANJE RAZVOJNOG OKRUŽENJA........................................................................ 6

PROGRAMSKI PROJEKT U VC++........................................................................................................................... 6 OBRADA (UNOS) IZVORNOG C++ KODA............................................................................................................... 9 POKRETANJE PROGRAMA................................................................................................................................... 10 OBLIKOVANJE KODA ......................................................................................................................................... 10 OTKRIVANJE POGREŠAKA U KRIVO UNESENOM KODU........................................................................................ 12

VJEŽBA 2 – OSNOVNI TIPOVI PODATAKA. ANALIZA IZVOðENJA PROGRAMA. ........................ 13

OSNOVNI TIPOVI PODATAKA.............................................................................................................................. 13 ANALIZA IZVOðENJA – DEBUGGER .................................................................................................................... 15

VJEŽBA 3 – STANDARDNE ULAZNO-IZLAZNE OPERACIJE. UVJETNO GRANANJE.................... 19

STANDARDNI ULAZ I IZLAZ ................................................................................................................................ 19 SPECIFIČNOSTI UNOSA ZNAKOVNIH NIZOVA ...................................................................................................... 19 MOGUĆNOSTI MANIPULACIJE ZNAKOVNIM NIZOVIMA ....................................................................................... 20 OSNOVE PRETVORBE BROJEVA U ZNAKOVNE NIZOVE I OBRNUTO ...................................................................... 21 KONTROLA TOKA – UVJETNO GRANANJE (IF-ELSE, SWITCH-CASE) .................................................................... 22 ZADACI.............................................................................................................................................................. 23

VJEŽBA 4 – PETLJE I KONTROLA PETLJI................................................................................................ 24

PETLJA FOR........................................................................................................................................................ 24 PETLJE WHILE I DO-WHILE ................................................................................................................................. 25 NAREDBE BREAK I CONTINUE ............................................................................................................................ 25 KORISNE UGRAðENE NUMERIČKE I MATEMATIČKE FUNKCIJE ............................................................................ 26 ZADACI.............................................................................................................................................................. 28

VJEŽBA 5 – PRIMJENA STEČENOG ZNANJA. .......................................................................................... 30

VJEŽBA 6 – POLJA. FUNKCIJE. .................................................................................................................... 31

POLJA ................................................................................................................................................................ 31 FUNKCIJE........................................................................................................................................................... 34 ZADACI.............................................................................................................................................................. 36

KONTROLNA VJEŽBA 1 ................................................................................................................................. 38

VJEŽBA 8 – OBRADA PODATAKA – TIP/RAZRED STRING ..................................................................... 2

VJEŽBA 9 – RAD S DATOTEKAMA I.............................................................................................................. 3

VJEŽBA 10 – RAD S DATOTEKAMA II .......................................................................................................... 4

VJEŽBA 11 – PRIMJENA STEČENOG ZNANJA. .......................................................................................... 5

KONTROLNA VJEŽBA 2 ................................................................................................................................... 6

Laboratorijske vježbe – općenite napomene i bodovanje Trajanje laboratorijskih vježbi:

12 tjedana – početak od 2. tjedna predavanja

Bodovanje vježbi:

svaka vježba – 10 bodova dvije kontrolne vježbe po 50 bodova ukupno 200 bodova

Page 3: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

Laboratorijske vježbe – općenite napomene i bodovanje 3

Plan laboratorijskih vježbi:

1. Upoznavanje razvojnog okruženja 2. Razvojno okruženje - debugiranje. Osnovni tipovi podataka. 3. Standardne ulazno-izlazne operacije. Kontrola toka – uvjetno grananje. 4. Kontrola toka - petlje 5. Primjena stečenog znanja 6. Polja. Funkcije. 7. KONTROLNA VJEŽBA 1 8. Obrada podataka – tip string 9. Rad s datotekama I 10. Rad s datotekama II 11. Primjena stečenog znanja 12. KONTROLNA VJEŽBA 2 13. Nadoknade

����

Laboratorijske vježbe su obavezne za svakog studenta. Student je obavezan doći u svakom od termina laboratorijskih vježbi. U slučaju izostanaka student može u tjednu nadoknada nadoknaditi do najviše dva termina vježbi. Dolazak na kontrolnu vježbu je obavezan. Izostanak s kontrolne vježbe se može bodovati negativnim brojem bodova te onemogućava studentu oslobañanje od pismenog i usmenog ispita.

Plan prema datumima

Tjedan Vježba Tjedan Vježba

12.10.-17.10. 1 30.11.-05.12. 8

19.10.-24.10. 2 07.12.-12.12. 9

26.10.-31.10. 3 14.12.-19.12. 10

02.10.-07.11. 4 11.01.-16.01. 11

09.10.-14.11. 5 18.01.-23.01. KONTROLA 2

16.10.-21.11. 6 25.01.-30.01. NADOKNADE

23.10.-28.11. KONTROLA 1

Page 4: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

Laboratorijske vježbe – općenite napomene i bodovanje 4

Uvjet za potpis iz kolegija

Kako bi stekao pravo na potpis student mora sakupiti minimalno 80 bodova tijekom laboratorijskih vježbi. Oslobañanje od pismenog i usmenog ispita

U slučaju kada student tijekom semestra urednim izvršavanjem zadataka sakupi više od 130 bodova oslobaña se polaganja pismenog i usmenog dijela ispita te mu se dodjeljuje ocjena sukladna tablici:

Bodova Ocjena 130 – 150 Dovoljan (2) 151 – 175 Dobar (3) 176 – 190 Vrlo dobar (4) 191 – 200 Odličan (5)

Ovako formirana ocjena upisuje se na prvom ispitnom roku nakon održanih vježbi. Student je

dužan prijaviti ispit za prvi ispitni rok na kojem mu se ocjena upisuje u indeks.

Prvim izlaskom na pismeni ispit student gubi pravo na oslobañanje od pismenog i usmenog ispita. Pismeni i usmeni ispit

Ukupan broj bodova koje student može dobiti polaganjem pismenog i usmenog dijela ispita je 100:

� 50 bodova za pismeni ispit � 50 bodova za usmeni ispit

Dobiveni bodovi se zbrajaju s bodovima vježbi. Ocjena se formira prema slijedećoj tablici:

Bodova Ocjena 120 – 200 Dovoljan (2) 201 – 250 Dobar (3) 251 – 275 Vrlo dobar (4) 276 – 300 Odličan (5)

Page 5: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

Razvojno okruženje 5

Razvojno okruženje

Cilj laboratorijskih vježbi iz kolegija „Programski alati II“ je omogućiti studentima savladavanje osnova programskog jezika C++ i učiniti ih sposobnima samostalno implementirati odreñene funkcionalnosti korištenjem nekog od dostupnih razvojnih okruženja. Na laboratorijskim vježbama se koristi besplatna inačica Microsoftovog Visual C++ razvojnog okruženja – Visual C++ 2008 Express Edition.

Alternativna besplatna razvojna okruženja koje studenti mogu proučiti i koristiti u razvoju su Dev C++, Turbo C++ Builder, te dodaci za C++ programiranje u primarno Java razvojnim okruženjima NetBeans i Eclipse.

����

NAPOMENA: Sve vježbe u laboratoriju se odrañuju u Visual C++ Express Edition, te je to jedino okruženje koji studenti koriste – sve zadatke je potrebno realizirati u tom okruženju, neovisno od toga što se koristi u slobodno vrijeme ili za vježbu! Budući da se prilikom ocjenjivanja meñu ostalim ocjenjuje i snalažljivost i korištenje razvojnog okruženja, mole se studenti da o tome vode računa!

����

Adrese za preuzimanje besplatnih razvojnih okruženja: Visual C++ 2008 Express Edition – http://www.microsoft.com/Express/VC/ Dev C++ - http://www.bloodshed.net/devcpp.html Turbo C++ Builder Explorer – http://www.turboexplorer.com/cpp NetBeans C++ - http://www.netbeans.org/features/cpp Eclipse C++ - http://www.eclipse.org/cdt

Preporuka za online čitanje http://msdn.microsoft.com/en-us/beginner/cc305129.aspx Literatura: Schildt: „C++: The Complete Reference“,McGraw-Hill/Osborne, 2003. Stroustrup: „The C++ Programming Language“, Addison-Wesley, 1997.

Page 6: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 6

VJEŽBA 1 – Upoznavanje razvojnog okruženja

Razvojno okruženje koje se koristi na laboratorijskim vježbama je Visual C++ 2008 Express (u nastavku VC++). Radi se o profesionalnom razvojnom alatu tvrtke Microsoft koji uključuje sve osnovne funkcije potrebne za razvoj.

U prvoj vježbi, studenti se upoznaju sa korisničkim sučeljem i osnovnim funkcijama razvojnog okruženja. Nakon uspješno završene vježbe, studenti bi trebali biti sposobni:

- samostalno otvoriti novi projekt - samostalno obrañivati i korektno oblikovati izvorni kod programa - samostalno pokrenuti program i uočiti i ispraviti eventualne pogreške u kodu

Bodovanje (maksimalno 10 bodova) će provesti asistent prema procjeni snalaženja u

razvojnom okruženju i prema sposobnostima snalaženja i izvršenju postupaka opisanih u tekstu vježbe. S razumijevanjem pročitati kompletne upute za provoñenje vježbe!

Programski projekt u VC++

� Na Moodle stranicama kolegija je dostupan Flash video prikaz otvaranja novog projekta

VC++ se pokreće iz Start izbornika, stavkom Programs – Microsoft Visual C++ 2008

Express Edition ili korištenjem prečice postavljene na Desktop. Osnovno korisničko sučelje kod prvog pokretanja VC++ prikazuje slika 1.

Slika 1: Osnovno korisničko sučelje VC++

Page 7: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 7

Da bi započeli s programiranjem, potrebno je napraviti novi projekt (ili učitati neki postojeći ukoliko se nastavlja rad nad nekim već započetim programom). Izrada novog projekta započinje izborom stavke File - New - Project u glavnom izborniku (slika 2).

Slika 2: Izrada novog projekta

Otvara se prozor u kojem se definira tip predloška, naziv projekta i direktorij u koji će se

projekt snimati.

Slika 3: Definiranje tipa i naziva projekta

Bitno je kao tip projekta u popisu Project types odabrati Empty Project kao početni

predložak za sve programe koji će biti izrañivani u okviru ovih laboratorijskih vježbi. Nakon definiranja naziva (Name) projekta i lokacije (Location) na koju će se isti snimati, kliknuti OK. Naziv projekta odrediti u skladu s vježbom i zadacima koji se implementiraju.

����

Sve datoteke s kodom i ostale datoteke koje VC++ koristi snimaju se u direktorij koji se definira u polju Location. Nakon uspješnog prevoñenja (kompajliranja) u tom direktoriju (odnosno Debug i Release poddirektorijima) je moguće pronaći izvršnu .exe datoteku koju je moguće pokrenuti preko komandne linije ili direktno iz Windows Explorera. U radu s probnim programima isprobati pokretanje programa na taj način!

Page 8: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 8

Novi prazni projekt ne sadrži nijednu datoteku, pa je za početak unosa programskog koda potrebno napraviti novu. Desnom tipkom miša iznad naziva projekta odabrati Add – New Item (ili u glavnom izborniku Project – Add New Item), kao što prikazuje slika 4.

Slika 4: Dodavanje nove datoteke projektu

VC++ nudi mogućnost dodavanja različitih tipova datoteka - za unos programskog koda otvaramo novu .cpp datoteku (C++ File), kao što prikazuje slika 4. U donjem dijelu prozora definiramo naziv datoteke.

Slika 5: Dodavanje CPP datoteke projektu, definiranje naziva

Page 9: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 9

Slika 6: Sučelje za unos programskog koda

Po stvaranju nove datoteke otvara se prozor koji omogućava unos programskog koda.

Obrada (unos) izvornog C++ koda

Unesite sljedeći kôd:

#include <iostream> using namespace std; int main() { cout << “Vjezba 1 – Programski alati 2” << endl; return 0; }

Slika 7: Automatsko formatiranje koda

Pri unosu VC++ formatira uneseni kod, bojama označava ključne riječi itd. – sve kako

bi programeru olakšao posao i snalaženje u kodu. Naravno, te korisne funkcije do izražaja dolaze tek kod izrade složenijih programa.

Page 10: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 10

Pokretanje programa

Uneseni program je prije pokretanja potrebno prevesti – programsko okruženje to u

pravilu obavlja za korisnika/programera (iako i dalje postoji mogućnost prevoñenja direktno iz komandne linije). U slučaju VC++ za pokretanje programa je dovoljno pozvati funkciju Start Without Debugging u izborniku Debug (ili skraćeno kombinacijom tipki CTRL + F5).

U slučaju da želimo analizirati izvoñenje programa (Debug), program pokrećemo stavkom Debug – Start Debug u glavnom izborniku (tipka F5).

Da bi se izvršilo prevoñenje programa i stvorila izvršna .exe datoteka potrebno je u izborniku Build pokrenuti stavku Build naziv_projekta odnosno Rebuild naziv_projekta. Kao što je prije navedeno, izvršne datoteke (.exe) se spremaju u direktorij odreñen kod izrade projekta – pokuštajte nakon stvaranja izvršne datoteke pronaći istu i pokrenuti ju iz komandne linije Windowsa i direktno pokretanjem iz Windows Explorera!

Oblikovanje koda

Kratki primjer koda koji smo unijeli predstavlja najjednostavniji mogući C++ program

koji se svodi na ispis odreñenog teksta na standardni izlaz (cout). Čak i funkcija main (prema standardu jezika C, početna tj. ulazna funkcija programa koja se prva izvršava) je pojednostavljena time da ne prima ulazne parametre.

Unesimo sada malo složeniji kod, baš u obliku danom u nastavku: #include<iostream> using namespace std;int main(int argc,char*argv[]) {int a; cout<<"primjer koda"<<endl; cout<<"novi redak (endl) ili \\n\n"; cout<<"\n\n"; cout<<"broj parametara: "<<argc<<endl; cin>>a;return 0;}

Očito je da kod izgleda neobično, neureñeno. Nečitak je već i u ovom jednostavnom

primjeru. Isti kôd oblikovan prema nekim standardnim pravilima mogao bi izgledati kao: #include <iostream> using namespace std; int main(int argc, char *argv[]) { int a; cout << "primjer koda" << endl; cout << "novi redak (endl) ili \\n\n"; cout << "\n\n"; cout << "broj parametara: " << argc << endl; cin.get(); return 0; }

Page 11: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 11

Iz primjera je jasno da je dobro oblikovan mnogo čitljiviji. Samim time, programiranje uz dobro oblikovanje koda je lakše i povećava produktivnost programera. Većina programskih okruženja nudi mogućnost poluautomatskog oblikovanja koda pri unosu. Kod unošenja neoblikovanog koda sa slike, primijetite da VC++ sam započinje formatiranje, tako da je u stvari teže unijeti loše oblikovan od dobro oblikovanog koda. Oba programa (ureñeni i neureñeni kôd) se mogu prevesti i pokrenuti bez ikakvih problema. Ono što nedostaje u gornjem kodu su neophodni razmaci i prazne linije koje bi ga učinile čitljivijim. Unutar pojedine linije kôda čitljivost se može povećati ubacivanjem razmaka izmeñu pojedinih naredbi i znakova. Tako je npr. dio koda: int argc,char*argv[]

sintaksno ispravan no kada bi bio napisan kao int argc, char *argv[]

tada dobiva na svojoj čitkosti. Primijetite ubačene razmake. Navedeni dio kôda biti će sintaksno ispravan i slučaju kada se napiše na slijedeći način: int argc, char * argv []

no ovime njegova čitkost nije povećana. Ključ je u dobroj mjeri. Prvi primjer nema niti jedan razmak te je teško razabrati logičke cjeline dok treći primjer ima previše razmaka te je opet teško prepoznati logičke cjeline. Kôd će znatno dobiti na čitkosti u slučaju kada se unutar linije, ali i unutar kompletnog programa, oblikuje s obzirom na logičke cjeline. Sama struktura programa kada se baci letimični pogled na njega mora odavati njegove logičke cjeline, što u osnovi znači da se operacije i pojmovi koje čine cjelinu grupiraju tako da se iz njihovog fizičkog smještaja može vidjeti logička struktura programa.

Povećanju čitkosti koda posebno doprinosi pravilno uvlačenje blokova koda. Blok koda započinje u novom retku naredbom nakon koje slijedi otvorena vitičasta zagrada „{„ te se nastavlja naredbama koje su uvučene s obzirom na blok koji ih sadržava. Blok završava zatvorenom vitičastom zagradom „}“ koja se nalazi u stupcu naredbe početka bloka. Uputno je na kraj bloka uz vitičastu zagradu staviti komentar u kojem piše kojem bloku pripada vitičasta zagrada. Česta sintaksna pogreška u kôdu je neodgovarajući broj zagrada. Naredbe se tijekom pisanja kôda uvlače koristeći tipku TAB.

blok { naredba1; naredba2; naredba3; unutarnji_blok_razine_1 { naredba4; naredba5; unutarnji_blok_razine_2 { naredba6; naredba7; } // kraj bloka 2 } // kraj bloka 1 } // kraj glavnog bloka

Page 12: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 1 – Upoznavanje razvojnog okruženja 12

Otkrivanje pogrešaka u krivo unesenom kodu

Preduvjet uspješnog prevoñenja jest sintaksna ispravnost programskog koda. Drugim

riječima, kod mora zadovoljavati odreñena pravila definirana standardom (gramatika jezika) – npr. razdvajanje naredbi znakom „;“, dodijeljivanje vrijednosti varijablama sa „=“ i slično. To su pravila koja se provjeravaju prije prevoñenja i ukoliko nisu zadovoljena razvojno okruženje će prijaviti tzv. sintaksne pogreške. Tek kad je kod sintaksno ispravan prelazi se na prevoñenje. Naravno, to ne garantira ispravno funkcioniranje programa jer ono ovisi isključivo o logici ugrañenoj u kod.

VC++ prije pokretanja programa vrši sintaksnu provjeru koda. Ukoliko se uoče nedostaci i pogreške u kodu, to se signalizira programeru. Neka razvojna okruženja osim provjere prije pokretanja prevoñenja programa nude i provjeru sintakse u stvarnom vremenu, pa kod samog upisa programskog koda naznačuju moguće pogreške. Unesite sljedeći kod: #include <iostream> using namespace std int main(int argc, char *argv[]) { int a cout << "primjer koda" << end; cout << "novi redak (endl) ili \\n\n"; cout < "\n\n" cout << "broj parametara: " << argc << endl; cin >> a; return 0; } Pokrenite program sa CTRL+F5. Zbog pogrešaka u kodu kompajliranje nije moguće, te VC++ o tome obavještava u prozoru na dnu ekrana.

Proučite poruke o pronañenim pogreškama i upozorenja i pokušajte ih ispraviti. Ukoliko uspješno ispravite pogreške, program bi se trebao uspješno izvršiti. Što se ispisuje sa cout << "\\n - nacin kako ispisati oznaku za novi red!" ?

Page 13: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa. 13

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa.

U ovoj vježbi studenti se upoznaju s osnovnim tipovima podataka i njihovim korištenjem kroz gotove primjere. Na istim primjerima programskog koda upoznaju se s mogućnostima analize izvoñenja programa i vrijednosti varijabli, korištenjem debuggera ugrañenog u VC++ razvojno okruženje. Nakon uspješno završene vježbe, studenti bi trebali biti sposobni:

- objasniti razliku meñu osnovnim tipovima podataka - samostalno odabrati odgovarajući tip podataka za zadane varijable - samostalno analizirati izvoñenje programa i pratiti vrijednosti varijabli pri izvoñenju

Bodovanje (maksimalno 10 bodova) će provesti asistent prema procjeni snalaženja u

razvojnom okruženju i na temelju znanja koje student pokaže u usmenom ispitivanju. S razumijevanjem pročitati kompletne upute za provoñenje vježbe!

Osnovni tipovi podataka

Programski jezik C++ preuzima osnovne tipove podataka iz C-a. U osnovne tipove se ubrajaju char, int, float i double tipovi, s tim da se u novijim verzijama C-a uvodi tip wchar_t, a C++ dodaje tip bool. Dodatno, osnovne tipove je moguće koristiti uz modifikacije ključnim riječima (tzv. modifieri) signed/unsigned, te im povećavati ili smanjivati broj bita koje koriste za pohranu vrijednosti korištenjem ključnih riječi short i long. Tablica u nastavku daje pregled tipova i modificiranih varijanti, zajedno s uobičajenom veličinom memorije potrebne za pohranu podataka odreñenog tipa (broj bita korištenih za pohranu može ovisiti o arhitekturi računala – npr. na starim računalima int je 16 bitni.)

Tip i varijante Opseg (moguće vrijednosti) Broj bita

bool true/false 8

char signed char unsigned char

-128 .. 127 -128 ... 127

0 .. 255

8

int signed int unsigned int

(long int identično int!)

-231 ... 231-1 -231 ... 231-1 0 ... 232-1

32

short int unsigned short int

-215 ... 215-1 -32768... 32767 0 .. 216-1 0... 65535

16

float 32

double 64

long double 80 (64)

wchar_t 16

Svaka varijabla koja se koristi u programu mora se deklarirati – definira se tip i naziv

varijable. C++ je za razliku od nekih drugih programskih jezika (npr. Pascal, C do standarda C99) po tom pitanju vrlo fleksibilan i omogućava deklaraciju varijabli doslovno na svakom mjestu u programu, s tim da su deklarirane varijable vidljive samo unutar bloka koda u kojem

Page 14: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa. 14

su deklarirane (radi se o lokalnim varijablama, a njihov doseg uključuje samo aktualni blok koda) . Ipak, zbog lakše čitljivosti i boljeg razumijevanja koda preporuka je varijable deklarirati na početku funkcijskih blokova (npr. odmah na početku int main() funkcije).

Osnovni operatori

Operatori u C++ služe za izvršavanje odreñenih operacija meñu varijablama. Osnovni operatori koji se koriste na ovoj vježbi su: operator pridruživanja =, aritmetički operatori +, -, *, /, %, ++, --, logički operatori >, <, ==, != i "posebni" operator ?. Operator ? Je specifičan po tome da omogućava logičku provjeru nekog izraza, te ovisno o tom statusu kao rezultat daje jednu od dvije ponuñene vrijednosti.

Zadatak Unesite navedeni kod i pokrenite program: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

#include <iostream> using namespace std; int main() { char varChar; int varInt; short int varSInt; unsigned short int varUSInt; float varFloat; bool varBoolean; long double varLDouble; varInt=258; varChar=varInt; varLDouble=3.12345678901234567890; varFloat=varLDouble; cout << "varChar = " << varChar << " (int)varChar = " << (int)varChar << endl; cout << "varInt = " << varInt << endl << endl; cout.precision(16); cout << "varLDouble = " << varLDouble << endl; cout << "varFloat = " << varFloat << endl << endl; varInt=60000; varSInt=varInt; varUSInt=varInt; cout << "varInt = " << varInt << endl; cout << "varSInt = " << varSInt << endl; cout << "varUSInt = " << varUSInt << endl; cin.get(); return 0; }

Zapišite i objasnite rezultate ispisa:

Page 15: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa. 15

Zbog čega ispis varijable varChar u retku 20 ne vraća brojčanu vrijednost? Što znači (int) prije ispisa varijable varChar u retku 20? Iskoristite funkciju sizeof() i saznajte broj okteta potrebnih za pohranu odreñenih tipova. Zapišite rezultate funkcije za osnovne tipove – char, short int, int, bool, float, double, long double. Postoje li razlike u odnosu na tablicu s definicijama tipova? sizeof(char) = sizeof(float) = sizeof(short int) = sizeof(double) = sizeof(int) = sizeof(long double) = sizeof(bool) =

Dodajte navedeni kod nakon zadnjeg ispisa u programu (redak 34): varBoolean = (varSInt<0) ? true:false; cout << "varBoolean = " << boolalpha << varBoolean << endl; varBoolean = (varInt<0) ? true:false; cout << "varBoolean = " << varBoolean << endl;

Izvršite program i objasnite dobiveni rezultat unesenog koda! Izvedite isti kod, ali prije izvoñenja uklonite boolalpha naredbu. Opišite razliku.

Koja je maksimalna vrijednost koju je moguće dodijeliti varijabli varChar? Koliko bitova je potrebno za spremanje bool varijable, a koliko ih se koristi u praksi?

Analiza izvoñenja – debugger

Izvoñenje programa moguće je nakon što je programski kod uspješno preveden. Kao što

je opisano u vježbi 1, uspješnom prevoñenju prethodi provjera sintaksne ispravnosti koda. No, izvoñenje programa ne znači da će program od prve dobro funkcionirati. Bez priprema (a i s

Page 16: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa. 16

njima), programer često u radu može naići na probleme – može doći do nehotičnog uvoñenja neke logičke pogreške u kod, odreñeni dijelovi koda mogu zbog pogreške (sintaksno ispravno!) izvesti neplanirane operacije (npr. pogreška u programskoj petlji i slično)...

Zbog toga je prije produkcijske faze (korištenje programa u svrhu za koju je i izrañen) potrebno obaviti testiranja programa. U složenijim programima mogu se koristiti različiti standardni postupci testiranja, no najčešće sve počinje tzv. debuggiranjem – analizom izvoñenja programa i praćenjem ponašanja promjenjivih podataka (varijabli). Sasvim je izvjesno da u slučaju nepravilnog rada programa negdje na putu do rezultata mora postojati neka logička pogreška – budući da programer razumije što je isprogramirao i zna koja su mu očekivanja, praćenjem vrijednosti varijabli kroz izvoñenje programa može u gotovo svim slučajevima utvrditi gdje se u kodu (ili u samom postupku – dakle, u razmišljanju i ideji rješenja problema) nalazi greška.

Pokretanje programa uz analizu izvoñenja (debuggiranje)

je moguće funkcijom Debug – Start Debugging u glavnom izborniku (slika 1), odnosno tipkom F5. Ukoliko programer ne intervenira u samom razvojnom okruženju i ne definira točke u kojima želi da se izvoñenje zaustavi i omogući analiza varijabli i ostalih parametara, izvoñenje će biti identično onom bez debuggiranja (CTRL + F5).

Slika 1: Debug izbornik

Slika 2: Breakpoint oznaka

Točke u kojima se zaustavlja izvoñenje programa nazivaju se breakpoint-ovi. Točke se definiraju jednostavno dvoklikom miša uz lijevi rub koda – oznaka točke izvoñenja je vidljiva na slici 2. Nakon što su točke zaustavljanja postavljene, pokretanjem sa F5, izvoñenje će stati na željenom mjestu, a programeru će se dozvoliti analiza korištenjem proširenog Debug izbornika i pomoćnog padajućeg izbornika u glavnom prozoru. Neke od mogućnosti debuggiranja:

− ukoliko za vrijeme prekida izvoñenja kursor miša dovučemo iznad neke varijable ili parametra u kodu, VC++ daje osnovne informacije o aktualnoj vrijednosti varijable ili neke druge podatke u informativnom prozoru

− moguće je definiranje tzv. watch-eva – definira se izraz po želji (npr. naziv varijable, neka funkcija nad varijablama – npr. 3*varInt+5*varChar), a VC++ u prozoru prikazuje vrijednosti tih izraza (ukoliko ih je moguće odrediti prema stanju izvoñenog programa)

− programer može u potpunosti kontrolirati daljnji tok izvoñenja – dopustiti izvoñenje do sljedeće točke zaustavljanja (Continue F5), nastaviti izvoñenje redak po redak (Step Over F10) i nakon svakog retka iskoristiti mogućnost analize stanja

− ostale mogućnosti uključuju pregled statusa procesorskih registara, ... itd.. što nije nužno za izvoñenje ovih vježbi

Page 17: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa. 17

� Na Moodle stranicama kolegija je dostupan Flash video prikaz analize izvršavanja programa

Zadatak Unijeti kod u nastavku – radi se o programu koji mora na osnovu unesenih duljina stranica pravokutnika izračunati opseg, površinu i duljinu dijagonale pravokutnika. Ispraviti moguće sintaksne greške u kodu, uspješno prevesti i pokrenuti program (CTRL+F5). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

#include <iostream> #include <cmath> using namespace std; int main() { float a,b; double c; cout << "Unesite duljinu stranice a = "; cin >> a; cout << "Unesite duljinu stranice b = "; cin >> b; c=a+2*b; cout << "Opseg pravokutnika = " << c << endl; c=a*a; cout << "Povrsina pravokutnika = " << c << endl; c=sqrt(a+b*b); a=a-1 b=b+1: c=2*a+b; cin.get(); return c; }

Koje sintaksne greške ste pronašli i ispravili? Nakon uspješnog pokretanja i završetka izvoñenja definirajte točke prekida u retku 19 i 23. Pokrenite program, unesite za vrijednosti a=5 i b=4, te analizirajte izvoñenje – koje vrijednosti poprima varijabla c? Prije izvršena linije 19 c =

Nakon izvršenja linije 19 c =

Nakon linije 23 c =

Korištenjem izbornika Debug promatrajte vrijednosti svih lokalnih varijabli (Debug – Windows – Locals), definirajte proizvoljne watch-eve (npr. 2*a+2*b, sqrt(a*a+b*b)).

Page 18: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 2 – Osnovni tipovi podataka. Analiza izvoñenja programa. 18

Ispraviti logičke pogreške u kodu, dodajte kod koji će ispisati duljinu dijagonale. Koje logičke pogreške ste pronašli i ispravili?

Za lakše snalaženje u kodu, preporuča se uključiti prikaz broja redaka – za uključivanje prikaza koristiti Tools – Options u glavnom izborniku, te odabrati Text Editor – All Languages (ili C/C++) kao na slici i uključiti stavku Line numbers.

Page 19: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 3 – Standardne ulazno-izlazne operacije. Uvjetno grananje 19

VJEŽBA 3 – Standardne ulazno-izlazne operacije. Uvjetno grananje

Na dosadašnjim vježbama i predavanjima studenti su upoznati sa osnovnim ulazno-izlaznim operacijama, dovoljnim za samostalnu izradu programa za unos i ispis podataka na ekran (standardni ulaz i izlaz – stdin i stdout, odnosno cin, cout u C++). Dodatno se obrañuju osnove kontrole toka programa. Ovom vježbom od studenata se traži veći angažman nego na prve dvije vježbe, a rezultat bi trebali biti samostalno izrañeni programi prema dodijeljenim zadacima.

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

����

NAPOMENA: Programski kod koji se daje asistentu na pregled, osim ispravne funkcionalnosti, mora zadovoljavati i osnovna pravila oblikovanja koda, dakle biti čitak i jasan. Razumijevanje i znanje studenata provjerava se usmenim ispitivanjem.

Standardni ulaz i izlaz

C++ standard uvodi korištenje tokova (stream) za ulazno-izlazne operacije. Radi se o logičkim modelima ureñaja koji podržavaju ulazno-izlazne operacije. Osnovne predefinirane ulazno-izlazne operacije uključuju dohvat podataka s tipkovnice i prikaz podataka na ekranu računala. Tokovi koji se za to koriste su cin i cout. Dodatno, postoji cerr izlazni tok koji se koristi za ispis pogrešaka. U slučaju spomenutih standardnih tokova radi se o preusmjeravanju na ekran (cout i cerr) odnosno preuzimanju podataka s tipkovnice (cin). Biblioteka za korištenje standardnih ulaza i izlaza u C++ standardu je <iostream> i potrebno ju je uključiti naredbom #include – alternativa je <iostream.h>, no radi se o starijoj inačici prema prije važećim standardima.

Slanje i primanje podataka obavlja se korištenjem operatora << (operator umetanja – insertion operator – koristi se kod izlaznih tokova) i >> (operator izdvajanja – extraction operator – koristi se kod ulaznih tokova).

Pomoćne funkcije za rad s standardnim cout izlazom omogućavaju prilagodbu ispisa

(npr. oktalni ili heksadecimalni ispis cjelobrojnih varijabli, promjena ispisne preciznosti kod brojeva s pomičnim zarezom...). Neke od funkcija je moguće pozivati direktno na ios razredu, a dodatno postoje specijalizirane funkcije tzv. manipulators koje je moguće direktno uključiti u tok. Primjeri manipulatora su, bez detaljnih obrazloženja, dani u odvojenom okviru na kraju vježbe. Primijetite da je već korišteni endl takoñer manipulator!

Specifičnosti unosa znakovnih nizova

U programskom jeziku C++ znakovni niz se prikazuje kao polje znakova (char[]). Polje može biti ograničene ili pak nedefinirane duljine (prevodilac odreñuje duljinu temeljem inicijalizacijskog sadržaja). Prilikom unosa s tipkovnice, na kraj takvog polja automatski se dodaje \0 (ASCII kod 0) što naznačuje kraj niza.

Meñutim, unos pomoću operatora >> ne omogućava unos nizova koji sadrže razmaknicu (space) – kod unosa takvih nizova, samo dio niza do prve razmaknice se izdvaja i dodjeljuje varijabli. Da bi se taj problem eliminirao koristi se funkcija cin.get ili cin.getline.

Page 20: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 3 – Standardne ulazno-izlazne operacije. Uvjetno grananje 20

U standardni jezik ugrañene su različite funkcije koje olakšavaju rad sa znakovnim nizovima (npr. strcmp, strcat, strcpy, strstr...).

Znakovni nizovi su preuzeti iz C-a, a novost u C++ je uvoñenje tipa string. Za korištenje tipa potrebno je uključiti biblioteku sa #include <string>. Radi se o razredu (klasi) koji može sadržavati znakovne nizove, a omogućava lakšu manipulaciju podacima zahvaljujući niz ugrañenih funkcija.

Primjer unosa znakovnih nizova (char[] i string) i rezultati: char chNiz[50]; cout << "Unesite niz: "; cin >> chNiz; cout << "Unos = " << chNiz << endl; cin.get();

Unesite niz: PA2Unesite niz: PA2Unesite niz: PA2Unesite niz: PA2----Elektrotehnika 2009/2010Elektrotehnika 2009/2010Elektrotehnika 2009/2010Elektrotehnika 2009/2010 Unos = PA2Unos = PA2Unos = PA2Unos = PA2----ElektrotehnikaElektrotehnikaElektrotehnikaElektrotehnika

(Primijetite da iako je duljina niza 50, razmaknica prekida unos!)

char chNiz[50]; cout << "Unesite niz: "; cin.get(chNiz,80); cout << "Unos = " << chNiz << endl; cout << "Duljina = " << strlen(chNiz) << endl; cin.get();

Unesite niz: PA2Unesite niz: PA2Unesite niz: PA2Unesite niz: PA2----Elektrotehnika 2009/2010Elektrotehnika 2009/2010Elektrotehnika 2009/2010Elektrotehnika 2009/2010 Unos = PA2Unos = PA2Unos = PA2Unos = PA2----Elektrotehnika 2009/2010Elektrotehnika 2009/2010Elektrotehnika 2009/2010Elektrotehnika 2009/2010

(Uspješni unos!)

Zamijenite cin.get sa cin.getline! Primjećujete li razliku u unosu i/ili izvoñenju programa?! Korištenje tipa string prikazuje sljedeći primjer:

#include <string> obavezno na početku! ... string chNiz; cout << "Unesite niz: "; getline(cin, chNiz); cout << "Unos = " << chNiz << endl; cout << "Duljina = " << chNiz.length() << endl; cin.get();

Mogućnosti manipulacije znakovnim nizovima

Kao što je već navedeno, u C++ je moguć rad sa znakovnim nizovima na dva načina. Korištenjem polja znakova (preuzeti i C-a), te korištenjem tipa string. Preporuka je korištenje tipa (razred) string zbog niza metoda koje olakšavaju manipulaciju. Naravno, sve te metode je moguće implementirati i korištenjem polja znakova. U nastavku su dani primjeri jednostavne manipulacije znakovnim nizovima:

Dohvat pojedinačnog znaka: char niz[20]; niz[0] – prvi znak niz[1] – drugi znak . . niz[strlen(niz)-1] – posljednji znak

string niz; niz.at(0) – poziv metode at – prvi niz.at(1) – drugi znak (moze i niz[1]) niz.at(niz.length()-1) – zadnji - duljina niza – metoda length

Za dohvat podniza tipa string koristi se metoda substr(od, duljina) – definira se početni znak i duljina podniza. Ostale korisne metode razreda string moguće je proučiti u VC++ pomoći ili npr. na http://www.cppreference.com/wiki/string/start.

Page 21: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 3 – Standardne ulazno-izlazne operacije. Uvjetno grananje 21

Osnove pretvorbe brojeva u znakovne nizove i obrnuto

Često u praksi postoji potreba za pretvaranjem unesenog broja u znakovni niz ili obrnuto. U VC++ za pretvorbu cijelih brojeva u znakovni niz koristimo _itoa i _itoa_s funkcije (standardizirane ISO C++ funkcije za razliku od itoa koja je dio C standarda) – parametri koje primaju su redom broj, znakovni niz i baza – npr. _itoa(10,niz,2) će broj 10 u binarnom obliku zapisati u niz.

Jedan od pristupa je i korištenje stringstream razreda. U tok se ubaci broj proizvoljnog tipa, te ga se očita kao string. Primjer:

# include <sstream> ... string pretvoreniBroj; float fBroj; int iBroj; stringstream pom; cin << fBroj; // učitamo float broj pom << fBroj; // ubacimo u stringstream pretvoreniBroj = pom.str(); // očitamo string (metoda str()) cin << iBroj; // učitamo int broj pom << iBroj; // ubacimo u tok pretvoreniBroj = pom.str();

Pretvorba znakovnih nizova u numeričke tipove se takoñer obavlja ili korištenjem

ugrañenih C funkcija (atoi, atof i slično) ili korištenjem stringstream razreda. Primjer pretvorbe znakovnog niza u cijele i realne brojeve (obratite pozornost na

brisanje sadržaja toga metodom str() – clear() ne čisti sadržaj!):

# include <sstream> ... float fBroj; int iBroj; stringstream pom; pom << "123.4567"; // ubacimo tekst u tok pom >> fBroj; // izdvojimo unos kao float pom.str(""); pom.clear(); // čistimo tok i brišemo zastavice (može bez clear) pom << "123.4567"; // ubacimo tekst u tok pom >> iBroj; // izdvajamo unos kao int (123)

Primjeri korištenja manipulatora za formatiranje i kontrolu ispisa Za korištenje je potrebno uključiti <iomanip>!

izraz za ispis rezultat opis cout << hex << 100 << endl; 64 heksadecimalno 100 cout << setfill('*') << setw(10) << 123.45; ****123.45 popunjavanje i širina ispisa cout << left << setfill('*') <<

setprecision(5) << setw(10) << 1234.567; 1234.5**** popunjavanje slijeva cout << scientific << 123.456; 1.23456e+002 sci prikaz decimalnih brojeva cout << fixed << setprecision(2) << 123.4567; 123.46 decimalne znamenke... ostali često korišteni manipulatori (isprobajte!): fixed, setbase(int base – 8,10,16), oct, (no)showbase, (no)showpos, (no)showpoint

Page 22: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 3 – Standardne ulazno-izlazne operacije. Uvjetno grananje 22

Kontrola toka – uvjetno grananje (if-else, switch-case)

Implementacija složene logike programa nije moguća bez kontrole toka. U C++ kontrola toka i uvjetno grananje se obavlja if-else blokovima i switch-case blokovima. Kontrola sa svodi na provjeru logičkih uvjeta (if) ili vrijednosti cjelobrojnih izraza (switch) i izvoñenju različitih blokova naredbi ovisno o uvjetima. Kontrolni blokovi su shematski prikazani na slici.

if (uvjet1) { // zadovoljen prvi uvjet // blok 1 } else if (uvjet2) { // zadovoljen drugi uvjet // blok 2 } else if (uvjet3) { // zadovoljen treci uvjet // blok 3 } else { // svi ostali slucajevi }

switch (izraz) { case vrijednost1: // blok 1 case vrijednost1: // blok 2 case vrijednost1: // blok 3 break; default: // za sve ostale }

Prije spomenuta mogućnost korištenja operatora ? za kontrolu toka u stvari zamjenjuje jednostavni if-else. Sljedeći kod će u oba slučaja dati isti rezultat, ali je varijanta sa operatorom ? kraća. Drugim riječima,

varBoolean = (varSInt<0) ? true:false;

zamjenjuje kod:

if (varSInt<0) {

varBoolean=true; } else {

varBoolean=false; }

Primjer korištenja if-else blokova

U praksi se najčešće koriste složeni uvjeti kontrole toka. Za definiranje složenih uvjeta koriste se logički operatori – I (&&) i ILI (||). Sami uvjeti se provjeravaju operatorima == (jednako), != (različito), >, >= (veće, veće ili jednako), <, <= (manje, manje ili jednako). Na primjer, recimo da imamo definirane tri različite vrijednosti a, b, c i moramo odrediti koja je najveća – lijevi kod prikazuje mogućnost korištenja jednostavnih uvjeta, dok desni ukazuje na mogućnosti kombiniranja uvjeta (voditi računa o zagradama).

if (a>b) { if (a>c) { cout << "najveci A"; } else { cout << "najveci C"; } } else { if (b>c) { cout << "najveci B"; } else { cout << "najveci C"; }

}

if ((a>b) && (a>c)) { cout << "najveci A"; } else if ((b>a) && (b>c)) { cout << "najveci B"; } else if ((c>a) && (c>b)) { cout << "najveci C"; }

Page 23: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 3 – Standardne ulazno-izlazne operacije. Uvjetno grananje 23

Zadaci

Iz svake grupe zadataka studentu se dodijeli 1 zadatak. Zadaci prve grupe donose 1 bod, a druge i treće po 2 boda. Na te bodove (max 5) dodaju se bodovi (max 5) temeljem usmenog ispitivanja od strane asistenta. Kod mora biti korektno oblikovan!

1. Potrošnja goriva – unijeti podatke za dva vozila (naziv i model vozila, registarsku oznaku, broj

prijeñenih kilometara i količinu potrošenog goriva). Izračunajte i ispišite prosječnu potrošnju goriva na 100 km za oba vozila. Ukoliko vozilo troši manje od 6L/100km ispisati "štedljivo vozilo", 6-10L "standardno", iznad 10L "vozilo s visokom potrošnjom".

2. Odreñivanje kamata – odredite iznos kamate koje će dužnik platiti poreznoj upravi na kraju godine – kao parametre unesite iznos duga (glavnica G) i godišnju kamatnu stopu K. Koristite jednostavni kamatni račun. Ukoliko je zbroj duga i kamata veći od 5.000.000 kn, ispisati "veliki dužnik", manji od 10.000 "omiljeni dužnik", za ostalo "dužnik".

3. Odredite struju kroz otpornik – na otporniku otpora R izmjeren je napon U. Omogućite unos vrijednosti otpora i napona, te odredite struju i ispišite struju I koja prolazi otpornikom. Ukoliko je iznos struje manji od 1A, ispišite vrijednost u miliamperima.

4. Unesite ime, prezime i godinu roñenja za 3 osobe. Ispišite popis tako da prvo ispisujete prezime pa ime tako da je maksimalna širina svakog ispisa 10 znakova, zatim godinu roñenja u dekadskom, oktalnom i heksadecimalnom formatu, te na kraju ime sa maksimalnom širinom 12 znakova. Ispišite prosječnu starost unesenih osoba! Odredite najmlañu osobu i ispišite je!

5. Trgovina - unesite naziv i cijenu bez PDV-a za tri proizvoda. Za svaki proizvod unesite prodanu količinu. Ispišite račun – naziv proizvoda slovima maksimalne širine 12 znakova, jediničnu cijenu pozicioniranu desno (širina 10), količinu, ukupnu cijenu i iznos PDV-a za svaku stavku. Na kraju računa ispišite ukupni iznos za naplatu i ukupni iznos PDV-a. Odredite najskuplji proizvod!

6. Putni nalog – tri djelatnika tvrtke vraćaju se s službenog putovanja na kojem su koristili vlastita osobna vozila. Unesite ime i prezime djelatnika, broj preñenih kilometara i iznos priznatih troškova. Ispišite djelatnike te ukupne iznose koje im tvrtka treba isplatiti uz pretpostavku da za svaki preñeni kilometar dobiju 2 kn. Iznose ispišite pozicionirane desno, sa dvije decimalne znamenke. Ispišite djelatnika koji je prošao najdulji put i djelatnika kojem će se isplatiti najveći iznos.

7. JMBG – unesite JMBG osobe i ispišite (znak po znak) datum roñenja osobe! Odredite zbroj brojeva (znamenki) u datumu roñenja, ispišite ga kao cijeli broj i kao znakovni niz.

8. Unesite datum roñenja osobe u formatu DDMMGGGG. Ispišite datum roñenja u formatu DD/MM/GGGG! Odredite zbroj brojeva (znamenki) u datumu roñenja, ispišite ga kao cijeli broj i kao znakovni niz.

9. Unesite tri cijela broja, generirajte niz znakova (dakle, varijablu!) koji sadrži te brojeve razdvojene znakom +. Ispišite niz znakova. Pretvorbu brojeva u znakovni niz izvedite na oba prije opisana načina.

Page 24: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 4 – Petlje i kontrola petlji 24

VJEŽBA 4 – Petlje i kontrola petlji

Petlje se koriste za izvoñenje dijela programa koji se ponavlja. Kao i uvjetna grananja, spadaju u mehanizme kontrole toka izvoñenja. Ovom vježbom studenti se kroz primjere upoznaju s mogućnostima primjene petlji. Dodatno, u okviru vježbi se obrañuju najčešće korištene numeričke i matematičke funkcije.

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

����

NAPOMENA: Programski kod koji se daje asistentu na pregled, osim ispravne funkcionalnosti, mora zadovoljavati i osnovna pravila oblikovanja koda, dakle biti čitak i jasan. Razumijevanje i znanje studenata provjerava se usmenim ispitivanjem.

Petlja for

Petlja for je osnovna petlja prisutna u gotovo svim programskim jezicima. Prema C++ standardu, definira se kao:

for (početna vrijednost; uvjet; promjena) { // blok koji se ponavlja }

Prvi parametar definira početnu vrijednost varijable koja utječe na izvoñenje petlje.

Drugi parametar je uvjet koji mora biti zadovoljen da bi se izveo ponavljajući blok. Treći parametar se koristi za promjenu vrijednosti varijable.

Izvoñenje petlje se ponavlja sve dok je zadovoljen navedeni uvjet. U nastavku su dani primjeri nekoliko for petlji.

Rezultat: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 � for (i=1; i<=10; i++) { cout << i; if (i<10) cout << ','; }

Rezultat: 2, 4, 6, 8, 10 � for (i=1; i<=10; i=i+2) { cout << i; if (i<10) cout << ','; }

Rezultat: 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 � for (i=10; i>=1; i--) { cout << i*10; if (i>1) cout << ','; }

Rezultat: -5,-4,-3,-2,-1,1,2,3,4,5 � for (i=-5; i<=5; i++) { if (i!=0) cout << i; if ((i<5) && (i!=-1)) cout << ','; }

Beskonačna petlja (prekid sa CTRL + BREAK) � for (;;) { cout << "nema kraja" << endl; }

Rezultat kombinirano x – 1…10, y – 10…1 (dvije varijable!) � for (x=1,y=10; x<=10; x++, y--) { cout << x << ' ' << y << '\n'; }

Page 25: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 4 – Petlje i kontrola petlji 25

Petlja bez promjene varijable u parametru – standardni unos + provjera � for (i=0; i!=123; ) { cout << "Unesite broj (123 za prekid):"; cin >> i; }

Petlje while i do-while

Modeli korištenja while i do-while petlji su sljedeći:

while (uvjet) { // blok koji se izvršava // dok je zadovljen uvjet }

do { // blok koji se izvršava } while (uvjet)

Osnovna razlika je u tome što se kod do-while petlje provjera uvjeta obavlja na kraju

bloka – dakle, blok se izvede i tek nakon njega se provjeri uvjet – ukoliko je uvjet zadovoljen blok se ponavlja, u suprotnom se nastavlja izvoñenje programa.

Rezultat: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 � i=1; while (i<=10) { cout<<i; if (i<10) cout<<','; i++; }

i=1; do { cout<<i; if (i<10) cout<<','; i++; } while (i<=10);

Rezultat: 100, 90, 80, 70, 60, 50, 40, 30, 20, 10 � i=100; while (i>=10) { cout<<i; if (i>10) cout<<','; i=i-10; }

i=100; do { cout<<i; if (i>10) cout<<','; i=i-10; } while (i>=10);

Beskonačna petlja: � while (1<2) { cout<<"Bez kraja\n"; }

do { cout<<"Bez kraja\n"; } while (1<2);

Provjera unosa � do { cout << "Unesite broj (123 za prekid):"; cin >> i; } while (i!=123)

Naredbe break i continue

Naredbe break i continue se koriste za dodatnu kontrolu unutar petlje. Naredba break će prekinuti izvoñenje petlje (izaći iz bloka i nastaviti izvoñenje programa iza petlje), dok će naredba continue preskočiti preostali dio bloka unutar petlje i nastaviti s izvoñenjem petlje. Naredbe je moguće koristiti u svim petljama. Što to konkretno znači vidljivo je iz primjera:

Page 26: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 4 – Petlje i kontrola petlji 26

Primjer – for petlja od 1 do 10, ne ispisuje 3, 4, 5, prekida nakon ispisa 8

Rezultat: 1, 2, 6, 7, 8 � for (i=1; i<=10; i++) { if ((i>=3) && (i<=5)) continue; cout << i; if (i==8) break; if (i<10) cout << ','; }

Korisne ugrañene numeričke i matematičke funkcije

Zadaci koji će se izrañivati u sklopu ove vježbe zahtjevaju korištenje matematičkih i numeričkih funkcija koje su ugrañene u C++. Studentima se preporuča korištenje internetskih pretraživača i ugrañenih uputa za detalje – navedene su najbitnije koje predstavljaju tek manji dio korisnih funkcija.

Slučajni brojevi

Bez ulaženja u principe odreñivanja slučajnih brojeva (razdiobe i slično) opisan je način generiranja proizvoljnog broja (pseudo)slučajnih brojeva (razdioba koja se po definiciji koristi jest tzv. jednolika razdioba (uniform distribution), koja u "prijevodu" znači da je vjerojatnost pojavljivanja svakog broja u intervalu jednaka). Funkcija koja se koristi za odreñivanje slučajnog broja je rand(). Rezultat funkcije je cijeli broj iz intervala 0 .. RAND_MAX. U kombinaciji s rand se koristi funkcija srand() koja služi za obnavljanje sekvence pseudoslučajnih brojeva.

Primjer: 10 slučajnih brojeva iz intervalu 0...1 (npr. vjerojatnost nekog dogañaja) � for (int i=0;i<10;i++) { int broj=rand(); float a=broj/RAND_MAX; cout << a << " "; }

Napomena: ponavljanjem pokretanja primjera programa uvijek se dobivaju isti rezultati.

Razlog tome je da se koristi inicijalni pseudoslučajni niz – da bi se dobile uvijek drugačije vrijednost koristi se poziv srand funkcije s jedinstvenim promjenjivim parametrom – npr. vremenom izvoñenja koda (točno vrijeme). Dodajte srand(time(0)); prije poziva funkcije rand() i pokušajte izvesti program. Dodati i #include <ctime> kako bi omogućili korištenje funkcije time. Uočava li se razlika kod ponavljanja pokretanja programa?

Primjer: 7 slučajnih brojevi iz intervala A – B � int A, B, i, sluc, broj; A=1; // od B=39; // do srand(time(0)); // novi pseudoslucajni slijed for (i=1;i<=7;i++) { sluc=rand(); broj=A+(B-A)*((float)sluc/RAND_MAX); cout << " " << broj; }

Page 27: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 4 – Petlje i kontrola petlji 27

Najbitnije matematičke funkcije

Matematičke funkcije su implementirane u <cmath> biblioteci, pa je istu potrebno uključiti sa #include na početku programa ukoliko se neke od njih koriste u programu. U nastavku su navedene najčešće korištene matematičke funkcije:

double sin(double x) sin x, x definirano u radijanima double cos(double x) cos x, x definirano u radijanima double tan(double x) tg x, x definirano u radijanima double pow(double baza, double exp) baza

exp double log(double x) ln x double log10(double x) log x double fabs(double x) |x|, apsolutna vrijednost od x double sqrt(double x) √x, drugi korijen od x

* sve navedene funkcije tipa double postoje i u float i u long double varijanti

Osnovne matematičke operacije

Matematičke operacije se izvode nad numeričkim tipovima (int, float, double...). Standardne su operacije zbrajanje (+), oduzimanje (-), množenje (*) i dijeljenje (/). Meñu osnovnu operaciju možemo uvrstiti i odreñivanje ostatka dijeljenja (operator %) – moguće je korištenje samo za parove cijelih brojeva (djeljenik i djeljitelj) (za decimalne brojeve se koristi standardna C funkcija fmod).

Kod izvoñenja matematičkih operacije bitno je voditi računa o tipovima podataka kako se ne bi izgubilo na preciznosti (automatsko pretvaranje tipa rezultata). Npr. dijeljenjem dva cijela broja rezultat je cjelobrojan osim ukoliko se ne napravi cast.

Primjeri matematičkih operacije i "neobični" slučajevi nastali zbog tipova: �

int A,B,C; float D;

A=1; B=39; cout << "A / B =" << A/B << endl; // ispisat će 0! cout << "(float) A / B ="<< (float)A/B << endl; // ispisat će 0.025..

D=A/B; // iako je float, D=0 !!! trebamo D=(float)A/B; C=A/B; // jasno... int , C=0 C=A%B; // ostatak dijeljenja!, C=1

D=(float)A/B; // castirano na float, D je OK

Page 28: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 4 – Petlje i kontrola petlji 28

Zadaci

Iz svake grupe zadataka studentu se dodijeli 1 zadatak. Zadaci prve grupe donose 1 bod, a druge i treće po 2 boda. Na te bodove (max 5) dodaju se bodovi (max 5) temeljem usmenog ispitivanja od strane asistenta. Kod mora biti korektno oblikovan!

NAPOMENA: Programski kod koji se daje asistentu na pregled, osim ispravne funkcionalnosti, mora zadovoljavati i osnovna pravila oblikovanja koda, dakle biti čitak i jasan. Razumijevanje i znanje studenata provjerava se usmenim ispitivanjem – predaja tuñeg koda i nesposobnost obrazloženja funkcionalnosti sankcionirat će se oduzimanjem bodova!

1. Korištenjem petlji ispišite redom brojeve 5, 10, 20, 25, 30, 40, 45, 50. Ispis realizirajte na dva

načina – korištenjem for petlje i korištenjem neke od while petlji.

2. Korištenjem petlji ispišite redom brojeve 3, 6, 9, 12, 15, 18, 24, 30. Ispis realizirajte na dva načina – korištenjem for petlje i korištenjem neke od while petlji.

3. Korištenjem petlji ispišite redom brojeve 11, 22, 33, 44, 66, 88. Ispis realizirajte na dva načina – korištenjem for petlje i korištenjem neke od while petlji.

4. Korištenjem petlji ispišite redom brojeve 8, 16, 24, 32, 40, 48, 64, 72. Ispis realizirajte na dva načina – korištenjem for petlje i korištenjem neke od while petlji.

5. Unesite broj proizvoda na računu N, te zatim unesite nazive za N proizvoda, jediničnu cijenu bez PDV-a i količinu! Ispišite ukupni broj proizvoda, ukupni iznos računa te iznos PDV-a. Ispišite proizvod (redni broj unosa i naziv) s najvišom jediničnom cijenom (pretpostavimo da svi proizvodi imaju različite cijene).

6. Unesite cijeli broj N. Za svaki broj od N do 1 ispišite umnožak tog broja i svih brojeva manjih od njega. Npr. za N=3 ispis bi trebao izgledati:

3 = = = = = =

-> 3*2 = 6

-> 3*1 = 3

2 = = = = = =

-> 2*1 = 2

1 = = = = = =

7. Unesite cijeli broj N i cijeli broj M. Za svaki broj od 1 do N ispišite niz decimalnih brojeva takvih da izmeñu n i n+1 imate M-1 decimalnih brojeva. Npr. za N=3 i M=5 ispis bi trebao izgledati:

1 = = = = = =

-> 1.2

-> 1.4

-> 1.6

-> 1.8

2 = = = = = =

-> 2.2

-> 2.4

-> 2.6

-> 2.8

3 = = = = = =

-> 3.2

-> 3.4

-> 3.6

-> 3.8

Page 29: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 4 – Petlje i kontrola petlji 29

8. Unesite cijeli broj N. Za svaki broj od 1 do N ispišite niz od 1 do tog broja. Npr. za N=3 ispis bi trebao izgledati:

1 => 1

2 => 1 2

3 => 1 2 3

9. Za sve cijele brojeve u intervalu od 1 do 20 ispišite u prikladnom formatu – broj, drugi korijen broja, kvadrat broja, broj na treću i ostatak dijeljenja broja sa 7. Decimalne brojeve ispišite na tri decimale. Ukoliko je neki od brojeva djeljiv s 3 ispred broja u ispisu dodajte * i zapamtite broj. Nakon izvoñenja petlje ispišite popis brojeva djeljivih s 3 (bez nove petlje!).

10. Za sve cijele brojeve u intervalu od 3 do 150 koji su djeljivi s 3 provjerite i ispišite one koji su djeljivi sa 5, 6 i 7. Program pokušajte realizirati tako da koristite jednu petlju, a nakon petlje možete ponovno ispisati kompletne popise brojeva djeljivih sa 5, 6, 7.

11. Prijestupne godine – unesite početnu i završnu godinu, provjerite da li je završna veća od početne, pa ispišite sve prijestupne godine u tom razdoblju! Godina je prijestupna ukoliko je djeljiva s 4, a nije djeljiva sa 100. Dodatno, godine djeljive sa 400 su prijestupne!

U zadacima u kojima se traži "pamćenje" vrijednosti prema odreñenom kriteriju i naknadni ispis nakon petlje, primijeniti jednostavan postupak – vrijednost dodati u pomoćni znakovni niz i na kraju ispisati! U kasnijim fazama kolegija upoznat ćete se s metodama koje bi se mogle iskoristiti za "pametnije" rješenje tog problema...

Page 30: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 5 – Primjena stečenog znanja. 30

VJEŽBA 5 – Primjena stečenog znanja.

Ova vježba služi kao svojevrsna priprema za kontrolnu vježbu – samostalno se rješavaju kompleksniji zadaci koji uključuju sve dosad obrañene elemente programiranja u VC++. Za izradu zadataka potrebno je osnovno znanje prema temama iz prethodnih vježbi (dakle, standardni ulaz i izlaz, kontrola toka izvoñenja programa (uvjetno grananje i petlje), matematičke operacije i funkcije). Rješavat će se praktični zadaci poput zadatka broj 5 iz vježbe 4. Cilj je nakon identifikacije problema osmisliti rješenje problema i implementirati tj. riješiti programski!

Primjeri zadataka obrañivani na vježbama: "geometrija" - jednadžba pravca (y=ax+b), kružnice (Ax2+By2=C), sjecište pravaca,

točke na koordinatnim osima prosti brojevi – provjera da li je broj prost, ispis prostih brojeva u intervalu od-do "knjigovodstvo" - obračun poreza na dodatnu vrijednost (PDV-a) iz veleprodajne i

maloprodajne cijene, odreñivanje prodajne cijene na temelju osnovice i poreza i obrnuto specifične matematičke definicije - n!, Σn, Σ1/n...

����

Primjeri programskog koda koji rješava neke od navedenih zadataka su dani u dodatnom dokumentu dostupnom na stranicama kolegija. Korištenje tog materijala NIJE DOZVOLJENO na kontrolnoj vježbi!

Page 31: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 6 – Polja. Funkcije. 31

VJEŽBA 6 – Polja. Funkcije.

O okviru ove vježbe obrañuju se dvije neovisne teme – polja i funkcije. Radi se o vrlo korisnim strukturama. Polja predstavljaju podatkovnu strukturu koju koristimo za pohranu veće količine podataka istog tipa, dok se funkcijama kao programskim strukturama koristimo kako bi kvalitetnije strukturirali programski kod i izdvojili u blokove funkcionalne dijelove koda koji se često pozivaju za vrijeme izvoñenja programa.

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

����

NAPOMENA: Programski kod koji se daje asistentu na pregled, osim ispravne funkcionalnosti, mora zadovoljavati i osnovna pravila oblikovanja koda, dakle biti čitak i jasan. Razumijevanje i znanje studenata provjerava se usmenim ispitivanjem.

Polja

Polja su podatkovne strukture koje služe za pohranu informacija istog tipa. Sadrže konačan (i poznat prilikom prevoñenja) broj podataka odreñenog tipa (npr. 100 cijelih brojeva). Pojedini podatak se dohvaća korištenjem cjelobrojnog indeksa (oprez – prvi podatak u polju se dohvaća indeksom 0!).

Polja mogu imati više dimenzija – razlikujemo jednodimenzionalna, dvodimenzionalna itd. Primjer jednodimenzionalnog (8 elemenata) i dvodimenzionalnog polja (3 retka po 5 elemenata) cijelih brojeva: Unutar dvodimenzionalnog polja podaci su spremljeni "matrično" – za dohvat se koriste dva indeksa – indeks retka i indeks stupca. Indeksi poprimaju vrijednosti od 0 do veličine polja.

Deklaracija polja

Sintaksa za deklariranje polja je sljedeća: tip naziv[veličina] Primjer: cjelobrojno polje veličine 8 (sadrži 8 elemenata) se deklarira sa int polje[8], dok dvodimenzionalno polje decimalnih brojeva deklariramo sa float poljef[3][5] pri čemu prvi broj označava broj redaka, a drugi broj stupaca u polju. Kako bi se izbjegli problemi u korištenju, polja je potrebno inicijalizirati (postaviti početne vrijednosti) – u protivnom vrijednosti polja imaju "slučajne" vrijednosti ovisno o stanju memorije...

Inicijalizaciju polja je moguće izvesti na više načina. Primjer deklaracija+incijalizacija: � int polje1[8] = {1,3,4,6,7,2,8,10}; // definiramo velicinu int polje2[] = {1,3,4,6,7,2,8,10}; // prevoditelj sam odredi velicinu float poljef[3][5] = {{1,3,4,6,7}, {4,2,5,6,10,12},

{8,20,14,6,4}};

1 3 4 6 7 4 2 5 10 12 8 20 14 6 4

1 3 4 6 7 2 8 10

Page 32: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 6 – Polja. Funkcije. 32

Pristup elementima polja

Dodjela i čitanje vrijednosti pridruženih odreñenom elementu polja se obavlja preko cjelobrojnog indeksa. Indeks ima vrijednost od 0 do veličine polja. Primjer: dodjela vrijednosti prvom označenom podatku u jednodimenzionalnom polju p[0]=1, odnosno drugooznačenom p[3]=4, dok se u dvodimenzionalnom polju na slici prvooznačena vrijednost dodjeljuje sa p[1][0] itd.

Primjer unosa i ispisa jednodimenzionalnog i dvodimenzionalnog polja: � 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

#include <iostream> #include <iomanip> using namespace std; int main() { // deklaracija i inicijalizacija jednodimenzionalnog polja int polje1D[8]={1,3,4,6,7,2,8,10}; // deklaracaja dvodimenzionalnog polja int polje2D[3][4]; // nije inicijalizirano! int i,j; cout << "Ispis 1D polja" << endl; cout << "==============" << endl; for (i=0;i<8;i++) { cout << "polje1D[" << i << "] = " << polje1D[i] << endl; } cout << endl; cout << "Unos 2D polja" << endl; cout << "=============" << endl; for (i=0;i<3;i++) // redak { for (j=0;j<4;j++) // stupac { cout << "Unesite [" << i << "," << j << "] "; cin >> polje2D[i][j]; } } cout << endl; cout << "Ispis 2D polja" << endl; cout << "==============" << endl; for (i=0;i<3;i++) { for (j=0;j<4;j++) { cout << "[" << i << "," << j << "]=" << setw(6); cout << polje2D[i][j] << "\t"; } cout << endl; // novi redak } }

Znakovni nizovi

U prethodnim vježbama već su spomenuti znakovni nizovi (char[]). Iako ih se u C++ nastoji zamijeniti naprednijim tipom string, znakovni nizovi su često korišteni. Implementirani su kao polja znakova koja završavaju znakom \0 (tzv. null-terminated string).

p[0][0] p[0][1] p[0][2] p[0][3] p[0][4]

1 3 4 6 7 p[1][0] p[1][1] p[1][2] p[1][3] p[1][4]

4 2 5 10 12 p[2][0] p[2][1] p[2][2] p[2][3] p[2][4]

8 20 14 6 4

p[0] p[1] p[2] p[3] p[4] p[5] p[6] p[7]

1 3 4 6 7 2 8 10

Page 33: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 6 – Polja. Funkcije. 33

Sortiranje elemenata jednodimenzionalnog polja

Često je u praksi potrebno poredati podatke po veličini, abecedi i slično. Operacija koju je u tom slučaju potrebno izvesti nad strukturom podataka jest sortiranje. Složenost operacije ovisi o strukturama podataka i principima unosa koji se koriste – za naše potrebe koristit ćemo najsporiju (najviša matematička složenost odnosno očekivano trajanje obrade) ali i najjednostavniju varijantu sortiranja tzv. bubble sort. Recimo da su u polje od 10 članova unesene vrijednosti 1, 3, 2, 9, 4, 8, 7, 5, 5, 6. Rezultat koji tražimo nakon provedenog sortiranja bi trebao biti 1, 2, 3, 4, 5, 5, 6, 7, 8, 9. Postupak se svodi na to da se redom uzimaju elementi polja i usporeñuju sa svim elementima koji slijede – ukoliko je odnos izmeñu elemenata zadovoljen prelazi se na sljedeći element, u suprotnom se zamijeni elemente kako bi se postigao ispravan redoslijed.

Primjer sortiranja jednodimenzionalnog polja: � 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

#include <iostream> #include <iomanip> using namespace std; int main() { int polje[10]={1,3,2,9,4,8,7,5,5,6}; int i,j,temp; for (i=0; i<9; i++) { for (j=i+1; j<10; j++) { if (polje[i]>polje[j]) { temp=polje[i]; polje[i]=polje[j]; polje[j]=temp; } } } for (i=0;i<10;i++) { cout << setw(3) << polje[i]; } }

Osnova postupka sortiranja je usporeñivanje brojeva (ili općenito, vrijednosti – npr. možemo usporeñivati i stringove – svaki znak ima neku ASCII brojčanu vrijednost, pa je u tom slučaju sortiranje takoñer moguće).

Pokazivači (pointeri)

Pokazivači su varijable koje sadrže podatak o memorijskoj adresi. Time pokazuju na lokaciju neke druge varijable u memoriju – otuda im i naziv. Polja se formiraju tako da zauzmu odreñenu lokaciju u memoriji, koja se zatim redom popunjava podacima koje polje sadrži. Pokušajte u primjeru ispisa jednodimenzionalnog polja nakon linije 14 dodati cout << "Adresa polja: " << polje1D << endl; Nakon pokretanja, ispisat će se adresa (pokazivač!) jednodimenzionalnog polja! To je ujedno i adresa prvog elementa u polju (alternativno, adresu odreñenog elementa polja je moguće dohvatiti sa &polje1D[indeks] – npr. ispišemo li &polje1D[3] dobijemo adresu četvrtog elementa polja!). Operator & se koristi za dohvat adrese odreñene varijable ili strukture. Pokazivače deklariramo korištenjem operatora *. Npr. sa int *p1; deklariramo pokazivač naziva p1 na varijablu tipa integer.

Page 34: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 6 – Polja. Funkcije. 34

Funkcije

Funkcije su nezaobilazni strukturni/programski blokovi u bilo kom ozbiljnijem programu. Svaka funkcija prima odreñene ulazne parametre (argumente) i vraća neki rezultat korištenjem naredbe return. Postoje i funkcije koje ne vraćaju rezultat, tzv. void funkcije.

Konkretnu funkciju koja zbraja tri cijela broja prikazuje sljedeći primjer: � int zbroji(int a, int b, int c) // tri ulazna parametra { int uk; // pomocna lokalna varijabla uk = a+b+c; // odredi zbroj return uk; // vraca rezultat tipa int

}

Parametri funkcije

Parametri (argumenti) se u funkciju standardno prosljeñuju po vrijednosti (tzv. call by value poziv funkcije). U tom slučaju, svaki od definiranih parametara se unutar funkcije koristi kao lokalna varijabla. Promjenom vrijednosti tih varijabli, neće se promijeniti i vrijednost varijabli koje se koriste kao parametri kod pozivanja funkcije. Na primjer, u prikazanoj funkciji zbrajanja tri cijela broja moguće promijeniti vrijednosti varijabli a, b i c, no to neće utjecati na varijable glavnog programa. Drugi način prosljeñivanja parametara u funkciju je preko referenci (tzv. call by reference poziv funkcije).

Primjer call-by-value i call-by-reference prosljeñivanja parametara: � 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

#include <iostream> using namespace std; int zbroji(int a, int b, int c) { int rez = a+b+c; a=10; b=20; c=30; return rez; } int zbroji2(int *a, int *b, int *c) { int rez = *a+*b+*c; *a=10; *b=20; *c=30; return rez; } int main() { int A,B,C; A=1; B=2; C=3; cout << "Zbroj (1): " << zbroji(A,B,C) << endl; cout << "A = " << A << " B = " << B << " C = " << C << endl; cout << "Zbroj (2): " << zbroji2(&A,&B,&C) << endl; cout << "A = " << A << " B = " << B << " C = " << C << endl; }

Zbroj (1): 6 A = 1 B = 2 C = 3 Zbroj (2): 6 A = 10 B = 20 C = 30

Page 35: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 6 – Polja. Funkcije. 35

Primijetite da kod pozivanja funkcije zbroji, iako se prije povratka (naredba return u retku 8) mijenjaju vrijednosti varijabli, varijable A, B i C u glavnom programu zadržavaju svoje vrijednosti. To je potpuno logično, budući da se unutar funkcije zbroji koriste lokalne varijable a, b, c koje se zbog call-by-value pozivanja na početku postave na vrijednosti jednake onim varijabli A, B i C u glavnom programu. Meñutim, kod funkcije zbroji2, parametri se proslijeñuju prema referenci (call-by-reference). Vidimo da su parametri funkcije deklarirani kao pokazivači. U glavnom programu operatorom & se u funkciju u stvari proslijede adrese varijabli A, B, C. U funkciji zbroji2 a pokazuje na varijablu A, te se prema tome sa *a direktno mijenja sadržaj vrijednosti varijable A, sa *b vrijednost varijable B, a *c varijable C. Dakle, unutar funkcije zapravo dolazi do promjene vrijednosti varijabli A, B i C, što je i vidljivo iz ispisa u retku 28. Rekurzija Specifični način izvedbe funkcije koji omogućava da se rezultat odredi ponavljanjem poziva iste funkcije uz promijenjene parametre naziva se rekurzija. Rekurzivne funkcije u stvari za odreñivanje rezulata pozivaju same sebe uz promjenu ulaznih parametara. Primjeri u kojima bi se takve funkcije mogle primijeniti su izračun faktorijela, odreñivanje Fibonaccijevih nizova i slično.

Rekurzivna funkcija odreñivanja faktorijela: � int fakt(int k) { if (k<=1) return 1; else return k*fakt(k-1); } Funkcija je trivijalna – ukoliko je vrijednost parametra manja ili jednaka 1 vraća vrijednost 1, dok u ostalim slučajevima vraća umnožak parametra i faktorijele broja manjeg za jedan. Npr. za fakt(3) funkcija prvo vraća 3*fakt(2); fakt(2) se obrañuje i vraća 2*fakt(1), a fakt(1) vraća 1. Ukupno gledajući vraća 3*2*1 što je zapravo definicija faktorijele nekog broja.

Page 36: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 6 – Polja. Funkcije. 36

Zadaci

Svaki student rješava dodijeljeni zadatak (1-4) – zadatak donosi maksimalno 4 boda. Zadatak 5 rješavaju svi studenti – zadatak donosi 1 bod. Na te bodove dodaju se bodovi (max 5) temeljem usmenog ispitivanja od strane asistenta. Kod mora biti korektno oblikovan!

NAPOMENA: Programski kod koji se daje asistentu na pregled, osim ispravne funkcionalnosti, mora zadovoljavati i osnovna pravila oblikovanja koda, dakle biti čitak i jasan. Razumijevanje i znanje studenata provjerava se usmenim ispitivanjem – predaja tuñeg koda i nesposobnost obrazloženja funkcionalnosti sankcionirat će se oduzimanjem bodova!

1. Unesite broj N (najviše 10 – provjerite i ispišite upozorenje ukoliko je broj prevelik!) i

omogućite unos imena i po 5 ocjena za svakog od N učenika.

a. Izračunajte srednju ocjenu za svakog učenika, zapamtite i ispišite popis koji sadrži ime učenika i srednju ocjenu.

b. Ispišite popis učenika (imena) sortirana abecedno.

c. Implementirajte funkciju za izračun srednje ocjene (kao parametri ulaze ocjene, a funkcija vraća srednju ocjenu).

d. Omogućite unos podataka korištenjem funkcije za unos (dodatno uz standardni unos).

Za spremanje imena, ocjena i srednje ocjene koristite polja – za ocjene možete koristiti dvodimenzionalno polje! Vodite računa o tipovima koje koristite!

2. Unesite broj N (najviše 10 – provjerite i ispišite upozorenje ukoliko je broj prevelik!) i omogućite unos N prodanih proizvoda. Za proizvod se unose naziv, veleprodajna cijena (bez poreza!), porezna stopa (npr. 23) i broj prodanih primjeraka (količina).

a. Izračunajte iznos poreza i maloprodajnu cijenu za svaki proizvod, spremite u primjereno polje i ispišite popis svih proizvoda sa stupcima – naziv, osnovica, porez, ukupna cijena. Odredite sveukupni iznos računa i ukupni porez.

b. Ispišite popis proizvoda (imena) sortirana abecedno.

c. Implementirajte funkciju za izračun poreza (kao parametri ulaze veleprodajna cijena i porezna stopa, a funkcija vraća maloprodajnu jediničnu cijenu).

d. Omogućite unos podataka korištenjem funkcije za unos (dodatno uz standardni unos).

Za spremanje naziva, cijene, poreza i količine koristite polja! Vodite računa o tipovima koje koristite obzirom na potrebne kalkulacije!

3. Unesite broj N (najviše 10 – provjerite i ispišite upozorenje ukoliko je broj prevelik!) i omogućite unos ključnih informacija za N putnih naloga. Za nalog se unosi ime djelatnika, naziv vozila, početno i završno stanje kilometarsata, iznos vezanih troškova i tip naloga (službeno ili privatno vozilo).

a. Izračunajte ukupni trošak pojedinog naloga – ukoliko se radi o privatnom vozilu vezanim troškovima se dodaje iznos 2kn po prijeñenom kilometru. Ispišite popis naloga sa svim unesenim podacima i iznosom ukupnog troška.

b. Ispišite popis vozila sortirano abecedno. Ispišite sortirani popis djelatnika.

c. Implementirajte funkciju za izračun troškova (kao parametri ulaze početno i završno stanje kilometara, vezani troškovi i tip naloga, a funkcija vraća ukupni trošak naloga).

d. Omogućite unos podataka korištenjem funkcije za unos (dodatno uz standardni unos).

Za spremanje podataka koristite polja!

Page 37: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

37

4. Unesite broj N (najviše 10 – provjerite i ispišite upozorenje ukoliko je broj prevelik!) i omogućite unos N prodanih proizvoda. Za proizvod se unose naziv, maloprodajna cijena (uključuje porez!), porezna stopa (npr. 23) i broj prodanih primjeraka (količina).

a. Izračunajte iznos poreza i veleprodajnu cijenu za svaki proizvod, spremite u primjereno polje i ispišite popis svih proizvoda sa stupcima – naziv, osnovica, porez, količina, ukupna cijena. Odredite sveukupni iznos računa i ukupni porez.

b. Ispišite popis proizvoda (imena) sortirana abecedno.

c. Implementirajte funkciju za izračun poreza (kao parametri ulaze maloprodajna cijena i porezna stopa, a funkcija vraća veleprodajnu jediničnu cijenu).

d. Omogućite unos podataka korištenjem funkcije za unos (dodatno uz standardni unos).

Za spremanje naziva, cijene, poreza i količine koristite polja! Vodite računa o tipovima koje koristite obzirom na potrebne kalkulacije!

� 1-4

Osim podataka koji se unose preko standardnog ulaza, u polja pohranite i proračunate vrijednosti (porez, troškovi, srednje ocjene...). Podatke spremajte u polja koji su globalne varijable (deklariraju se odmah iza #include naredbi, a ne unutar main funkcije!) Zadatke riješite sa i bez korištenja funkcija! Kod izrade funkcija za unos, jedini parametar funkcije je redni broj unosa (indeks polja) – podatke punite u polja koja su definirana kao globalne varijable!

5. Omogućite unos cijelih brojeva A i B (A mora biti manji od B). Za interval od A do B

odredite maksimalno 30 prostih brojeva, pohranite ih u adekvatno cjelobrojno polje i ispišite sadržaj polja. Polje ispišite od najnižeg do najvišeg broja i obrnuto.

Page 38: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

KONTROLNA VJEŽBA 1 38

KONTROLNA VJEŽBA 1

Kontrolna vježba uključuje samostalnu izradu zadanog programa. Bodovanje (maksimalno 50 bodova) će provesti asistent – ocjenjuje se ispravnost koda, čitkost, korektno korištenje stečenih znanja, snalažljivost studenta u radu, kvaliteta ponuñenog rješenja.

Na kontrolnoj vježbi studenti samostalno rješavaju zadani zadatak - nema konzultacija sa voditeljom vježbi niti sa drugim studentima. Za rješavanje zadatka studenti imaju 45 minuta. Po isteku vremena programi se predaju i čeka usmeno ispitivanje i dodjela bodova.

Kontrolna vježba nosi maksimalno 50 bodova.

Kontrolnom vježbom se ispituju teme obrañene na vježbama 1, 2, 3, 4 i 5. Polja i funkcije ne ulaze u vježbu! Na kontrolnoj vježbi je dozvoljeno imati skriptu za vježbe 1-5. Neće se tolerirati ručno dopunjene skripte i primjeri zadataka...

Page 39: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 8 – Obrada podataka – tip/razred string 2

VJEŽBA 8 – Obrada podataka – tip/razred string

Implementacija složene logike programa nije moguća bez kontrole toka. Ovom vježbom studenti na konkretnim primjerima savladavaju probleme upravljanja tokom programa. Osim toga, obrañuju se petlje – često korišteni modeli...

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

Page 40: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 9 – Rad s datotekama I 3

VJEŽBA 9 – Rad s datotekama I

Implementacija složene logike programa nije moguća bez kontrole toka. Ovom vježbom studenti na konkretnim primjerima savladavaju probleme upravljanja tokom programa. Osim toga, obrañuju se petlje – često korišteni modeli...

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

Page 41: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 10 – Rad s datotekama II 4

VJEŽBA 10 – Rad s datotekama II

Implementacija složene logike programa nije moguća bez kontrole toka. Ovom vježbom studenti na konkretnim primjerima savladavaju probleme upravljanja tokom programa. Osim toga, obrañuju se petlje – često korišteni modeli...

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

Page 42: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

VJEŽBA 11 – Primjena stečenog znanja. 5

VJEŽBA 11 – Primjena stečenog znanja.

Ova vježba služi kao svojevrsna priprema za kontrolnu vježbu – samostalno se rješavaju kompleksni zadaci koji uključuju sve dosad obrañene elemente programiranja u VC++.

Bodovanje (maksimalno 10 bodova) će provesti asistent – do 5 bodova studenti dobivaju temeljem ispravno riješenih zadataka koji im se dodijele na početku vježbe, a preostalih 5 bodova dodjeljuje asistent na temelju znanja koje student pokaže u usmenom ispitivanju.

Page 43: VELEUČILIŠTE U VARAŽDINU - velv.hrvelv.hr/~mmikac/PA2-1-6.pdf · VELEUČILIŠTE U VARAŽDINU ELEKTROTEHNIKA PROGRAMSKI ALATI 2 Stručni studij: Elektrotehnika „Uvod u C++“

VELEUČILIŠTE U VARAŽDINU studij : Elektrotehnika – Programski alati II

KONTROLNA VJEŽBA 2 6

KONTROLNA VJEŽBA 2

Kontrolna vježba uključuje samostalnu izradu zadanog programa. Bodovanje (maksimalno 50 bodova) će provesti asistent – ocjenjuje se ispravnost koda, čitkost, korektno korištenje stečenih znanja, snalažljivost studenta u radu, kvaliteta ponuñenog rješenja.