Osnove programiranja - priručnik za laboratorijske vježbe

Page 1


PRIRUČNIK ZA LABORATORIJSKE VJEŽBE IZ KOLEGIJA

OSNOVE PROGRAMIRANJA

dr.sc. Oliver Jukić, prof.v.š pred. Ivan Heđi, dipl.ing.

Virovitica, listopad 2013.


©

Oliver Jukić Ivan Heđi, 2013.

Urednik dr. sc. Oliver Jukić, prof.v.š. Materijal nije recenziran i služi samo za internu uporabu Grafička priprema pred.Ivan Heđi, dipl.ing.

Niti jedan dio ove knjige ne smije se umnožavati i preslikavati na bilo koji način, bez pismenog odobrenja autora

2


OSNOVNE UPUTE 

Laboratorijske vježbe iz kolegija ″Osnove programiranja″ održavaju se u trajanju od dva školska sata tjedno.

Vježbe se održavaju u računalnim dvoranama prema unaprijed definiranim grupama. Molimo studente da se pridržavaju rasporeda po grupama zbog određenog broja računala u dvorani. Promjenu grupe je moguće izvršiti na zahtjev asistentu u slučaju da se pronađe zamjena.

Nazočnost na vježbama je obavezna, prema pravilima koja se nalaze na službenoj stranici kolegija.

Student koji ne odradi sve vježbe neće moći prisupiti polaganju ispita.

Student može opravdano ili neopravdano izostati sa jedne vježbe koja se može nadoknaditi na kraju semestra.

Nakon završetka vježbi potrebno je pobrisati sve svoje radne datoteke sa računala i ugasiti sve svoje programe i restartati računalo.

Računalo ugasite samo ako asistent to zatraži (ukoliko iza vas ima još grupa, nije potrebno gasiti računalo).

Nije dozvoljeno na laboratorijska računala instalirati vlastite programe.

Nakon što riješite sve zadatke predviđene za vježbu, pozovite asistenta da pregleda odrađeno te evidentira izvršavanje vaših obveza.

3


SADRŽAJ 1. Laboratorijska vježba ........................................................................................................................... 5 2. Laboratorijska vježba ......................................................................................................................... 15 3. Laboratorijska vježba ......................................................................................................................... 18 4. Laboratorijska vježba ......................................................................................................................... 21 5. Laboratorijska vježba ......................................................................................................................... 24 6. Laboratorijska vježba ......................................................................................................................... 27 7. Laboratorijska vježba ......................................................................................................................... 30 8. Laboratorijska vježba ......................................................................................................................... 34 9. Laboratorijska vježba ......................................................................................................................... 36 10. Laboratorijska vježba ....................................................................................................................... 39

4


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

1. Laboratorijska vježba Sadržaj vježbe:  Upoznavanje sa kompajlerom  Moj prvi, drugi i treći C++ program  Funkcija main()  Izvorne (cpp) i zaglavne (h) datoteke  Osnove sintakse  Ulazno-izlazne naredbe

Upoznavanje s kompajlerom Uključite računalo, i pokrenite prevodilac (kompajler) Microsoft Visual C++ 6.0 iz glavnog start izbornika, slika 1.

Slika 1. Pokretanje kompajlera Microsoft Visual C++ 6.0 Ovaj kompajler služi za prevođenje programa pisanih u programskom jeziku C odnosno C++. Njegova zadaća je učitati datoteku(e) u kojima se nalazi izvorni kôd, te iste prevesti i povezati (linkati), kako bi se dobila jedna datoteka u kojoj se nalazi izvršni kod (exe 5


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

datoteka). Tu exe datoteku (program) možemo pokrenuti na bilo kojem računalu sa instaliranim Windows operacijskim sustavom. Izgled kompajlera možete vidjeti na slici 2.

Slika 2. Kompajler Microsoft Visual C++ 6.0. Osim klasičnih C/C++ programa, ovaj kompajler omogućava kreiranje i programa u jeziku Visual C/C++. To je u stvari alat koji omogućava kreiranje grafičkih sučelja pomoću predefiniranih konstrukata (gumbi, radio-buttoni, meniji, ...). Svakom konstruktu moguće je dodati neki kôd »u pozadini«, koji se izvršava nakon određene akcije (npr. pritisnemo određeni gumb na grafičkom sučelju). O ovom programskom jeziku biti će više govora na narednim vježbama. Nakon što se pokrenuli kompajler, možemo kreirati prvi program. Prije nego što to napravimo, definirat ćemo nekoliko pojmova koji su tipični za ovaj kompajler:

workspace radna okolina, koji u sebi može sadržavati više projekata. Podaci o workspaceproject

sourcefile

u nalaze se u dadoteci s ekstenzijom dsw. to je projekt, koji u stvari predstavlja sve datoteke izvornog koda koje sudjeluju kod izrade jednog programa (jedne exe datoteke). Najjednostavniji projekt imat će samo jednu datoteku izvornog koda, ali je kod složenijih programa nužno izvorni kôd »razbiti« na više datoteka. Podaci o projektu nalaze se u datoteci s ekstenzijom dsp. to je opći naziv za datoteku u kojoj se nalazi izvorni kôd programa i ima ekstenziju cpp kod ovog, a i većine drugih, kompajlera

6


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

headerfile

to je opći naziv za zaglavnu datoteka koja se »uključuje« u izvornu datoteku i u koju se pišu deklaracije funkcija, globalnih varijabli, definiraju se konstante, uključuju druge zaglavne datoteke i sl.

Moj prvi C++ program Odaberite iz glavnog padajućeg izbornika File odaberite New, slika 3.

Slika 3. Kreiranje nove radne okoline (1) Nakon toga se prikazao prozor koji se može vidjeti na slici 4. Odaberite karticu Workspaces. S desne strane unesite ime radne okoline oblika vaše prezime i oznaka vježbe (npr. Hedji_LV1). Radna okolina se mora nalaziti na D disku računala. Poželjno je na D disku računala kreirati vlastiti direktorij.

7


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

Slika 4. Kreiranje nove radne okoline (2) Nakon toga pritisnite OK. S lijeve strane radne površine se pojavila radna okolina (linija Workspace 'Hedji_LV': 0 projects). Desnom tipkom miša pritisnite na tu liniju te odaberite Add new project to workspace, slika 5.

Slika 5. Kreiranje novog projekta unutar radne okoline (1) Nakon toga se otvorio prozor prikazan na slici 6.

8


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

Slika 6. Kreiranje novog projekta unutar radne okoline (2) Tip projekta je Win32 Console Application, a za ime projekta unesite redni broj zadatka u nastavnim materijalima za laboratorijske vježbe (npr. zadatak1, zadatak2...). To je tip projekta kod kojega programer komunicira sa programom uz pomoć tekstulanog prozora nalik komandnoj liniji. Nakon toga pritisnite OK. Pojavio se prozor prikazana na slici 7.

Slika 7. Kreiranje novog projekta unutar radne okoline (3) Kao prvi program potrebno je odabrati već postojeći program pod nazivom „Hello, World!“ application, te pritisnuti Finish. Na slijedećem prozoru su prikazane osnovne postavke (slika 8.), potrebno je pritisnuti OK.

9


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

Slika 8. Kreiranje novog projekta unutar radne okoline (4)

Upravo ste kreirali prvi C++ program, slika 9.

Slika 9. Moj prvi C++ program

10


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

Obratite pažnju na datoteke koje se nalaze unutar vašeg projekta. Programski kod pisat ćete u datoteci zadatak1.cpp, slika 10.

Na donjoj strani nalazi se nekoliko tabova:

Slika 10. Datoteke projekta Neka za sada uvijek bude odabran FileView. Prevedite vaš prvi program biranjem meni opcije Build->Rebuild All. Isto možete napraviti korištenjem funkcijske tipke F7 ili korištenjem ikona na alatnoj traci (slika 11). Nakon prevođenja pokrenite program biranjem meni opcije Build->Start Debug->Go ili pritiskom funkcijske tipke F5 ili korištenjem ikona na alatnoj traci (slika 11).

Slika 11. Ikone alatne trake za prevođenje i pokretanje programa Ovaj način pokreće program iz kompajlera, što omogućava korištenje dodatnih alata za praćenje izvršavanja programa. To može biti vrlo korisno prilikom procesa otklanjanja pogrešaka u izvornom kodu, koje rezultiraju nekorektnim radom izvršnog programa. Drugi način je da program pokrenete kao exe datoteku koju je kompajler generirao. Pokušajte i to napraviti (dva puta kliknite na datoteku u Windows Exploreru). Obratite pažnju da vaš prvi C++ program ima samo jednu funkciju. To je: int main(int argc, char* argv[]) Svaki C ili C++ program mora imati točno jednu main funkciju! Ta funkcija se prva izvršava prilikom pokretanja programa.

11


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

Također obratite pažnju da svaka naredba u programskom jeziku C/C++ mora završavati znakom »;«. Odgovorite na sljedeća pitanja: 1) Koje sve vrste datoteka je kompajler kreirao u folderu projekta (popišite njihove ekstenzije). Da li možete prepoznati barem neke od njih – čemu služe te datoteke? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 2) Što će napraviti vaš prvi C++ program nakon što ga pokrenete? _____________________________________________________________________ _____________________________________________________________________ 3) Pokušaje modernizirati vaš prvi C++ program na sljedeći način:  deklarirajte tri cjelobrojne varijable: a, b i c  varijablama a i b pridjelite unutar programa neke vrijednosti  definirajte varijablu c kao c = a/b  ispišite varijablu c, te na kraju dodajte liniju koda koja će čekati da pritisnete <ENTER> prije nego program završi – prisjetite se auditornih vježbi. Evo primjera kako to može biti napravljeno: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int a=2; int b=4; float c=a/b; cout << c <<endl; getchar(); return 0; }

Obratite pažnju da smo uključili još jednu zaglavnu datoteku, u kojoj je definirana naredba cout. To je datoteka iostream.h. Znakovi <> unutar kojih je smješteno ime datoteke označavaju da se radi o standardnoj zaglavnoj datoteci koju je kompajler prilikom instalacije kopirao na računalo. Datoteka stdafx.h je dio samo ovog projekta, tako da je stavljena unutar navodnih znakova. Unutar datoteke stdio.h nalazi se opis funkcije getchar.

12


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

4) Ovaj program ispisat će na ekranu znak 0, mada je varijabla c deklarirana kao realni broj (float). Zašto je to tako? Koju poruku će ispisati kompajler prilikom prevođenja ovog programa, ukoliko napravimo Rebuild All? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 5) Prepravite program tako da na ekranu bude ispisan pravi rezulat (0.5). Što ste morali napraviti? Da li je nestala poruka koju je ispisivao kompajler prilikom prevođenja? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 6) Prepravite vaš drugi C++ program tako da varijablama a i b ne zadajete vrijednost unutar programa, već da vrijednost unosite sa tipkovnice. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int a,b; cout << "Unesite prvi broj" << endl; cin >> a; cout << "Unesite drugi broj" << endl; cin >> b; float c=(float)a/b; cout << "Rezultat je " << c << endl; getchar(); return 0; }

13


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 1

7) Napišite program koji će omogućiti unos 3 različite cjelobrojne varijable (x,y,z) a na njima primjenite barem dvije od matematičkih operacija (+,-,*,/) po vlastitom nahođenju, na primjer Rezultat = (x-y)/z*y-x. Ispišite izvorni kod vašeg programa.

8) Napišite program koji će omogućiti unos 2 različite realne varijable te izračunati i na ekran ispisati prosječnu vrijednost unešenih brojeva. Ispišite izvorni kod vašeg programa.

14


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 2

2. Laboratorijska vježba Sadržaj vježbe:  if naredba  switch naredba Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV2). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

If naredba 1) Kako glasi osnovna sintaksa if naredbe? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 2) Napišite program koji će provjeriti da li je 2*3 isto što i 4*3. Ukoliko jeste, ispišite na ekran tekst »Istina«. Napišite objašnjenje svake linije koda. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { if(2*3 == 4*3) { cout << "Istina" << endl; } getchar(); return 0; }

3) Dopunite prethodni program tako da se ukoliko navedeni izraz nije istinit na ekran ispiše tekst »Laz«. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

15


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 2

4) Napišite jednostavan program koji sa tipkovnice učita jedan cijeli broj, te nakon toga ispisati na ekranu u obliku tekstualne poruke da li je broj paran ili neparan (»Broj je paran«, »Broj je neparan«).

Switch naredba 5) Kako glasi osnovna sintaksa switch naredbe? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 6) Koji uvjet mora imati ispunjavati izraz (u ovom slučaju: varijabla) koji koristimo za uvjet kod naredbe switch? Da li je moguće u naredbi switch birati case na osnovu tekstualnog izraza? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 7) Napišite program koji će izračunati izraz 34+37*(23-8)-22*23. Nakon toga, ovisno o rezultatu izraza, ispišite sljedeći tekst: »Nula« ukoliko je rezultat 0 »OsamdesetTri« ukoliko je rezultat 83 »Nepoznat« inače Napišite objašnjenje svake linije koda.

16


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 2

Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int i = 34+37*(23-8)-22*23; switch(i) { case 0: cout << "Nula" << endl; break;

Naredbom break prekida se izvođenje naredbi u switch bloku i program nastavlja od prve naredbe iza bloka. Svaki case uvjet mora sadržavati break naredbu koja služi za prekidanje grananja ako je uvjet zadovoljen. case 83: cout << "OsamdesetTri" << endl; break; default: cout << "Nepoznat" << endl; break; } getchar(); return 0; }

8) Napišite program koji sa tipkovnice učitava jedan cijeli broj. Korištenjem switch naredbe, ovisno o unešenom broju, ispišite na ekran tekst: »jedan«, »dva«, »tri«, »cetiri«, »pet« ili »nepoznat broj« u slučaju da se unese broj koji nije u zadanom rasponu od 1 do 5.

17


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 3

3. Laboratorijska vježba Sadržaj vježbe:  for petlja Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV3). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

For petlja 1) Kako glasi osnovna sintaksa for petlje? Objasniti. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 2) Napišite program koji ispisuje brojeve od 1 do 10 na ekran uz pomoć for petlje.Napišite objašnjenje svake linije koda. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int i; for(i=1;i<=10;i++) { cout<<i; } getchar(); return 0; } 3) Prepravite program da se brojevi ispisuju jedan ispod drugoga sa jednim praznim redom između. 4) Da li se uvjet izvođenja kod naredbe for provjerava prije ili poslije izvođenja petlje? _____________________________________________________________________ _____________________________________________________________________ 18


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 3

5) Napišite program koji računa faktorijel broja 10 korištenjem for petlje koja ima kontrolnu varijablu i.Napišite objašnjenje svake linije koda. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h>

int main(int argc, char* argv[]) { int i; int nFact = 1; for(i=1;i<=10;i++) { nFact *= i; } cout << "10!=" << nFact << endl; getchar(); return 0; } 6) Unutar for petlje izbrišite izraz prirasta i ostavite samo prazno mjesto. Unutar bloka naredbi napišite izraz prirasta. Kako se ponaša promijenjeni program? Da li je ovakav način promjene kontrolne varijable preporučljiv? Komentirajte odgovore! _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 7) Napišite program koji računa faktorijel broja 10 korištenjem for petlje koja ima kontrolnu varijablu i. Ispišite vrijednost kontrolne varijable i pri svakom prolasku petlje, kao i međuvrijednost izračunatog faktorijela.

19


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 3

8) Napišite program koji ispisuje brojeve od 10 do 1 na ekran uz pomoć for petlje.¸

20


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 4

4. Laboratorijska vježba Sadržaj vježbe:  while petlja  do-while petlja Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV4). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

While petlja 1) Kako glasi osnovna sintaksa while petlje? Objasniti. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 2) Napišite program koji računa faktorijel broja 10 korištenjem while petlje koja ima kontrolnu varijablu i. Napišite objašnjenje svake linije koda. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int i=1; int nFact = 1; while(i<=10) { nFact *= i++; } cout << "10!=" << nFact << endl; getchar(); return 0; }

3) Da li se uvjet izvođenja kod naredbe while provjerava prije ili poslije izvođenja petlje? _____________________________________________________________________ 4) Da li je kod naredbe while dozvoljeno mijenjati kontrolnu varijablu unutar bloka naredbi? _____________________________________________________________________ 21


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 4

Do-while petlja 5) Kako glasi osnovna sintaksa do-while petlje? Objasniti. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 6) Napisati program koji će raditi sljedeći algoritam:  unesi dva cijela broja  izračunaj umnožak dva unešena broja  ispiši vrijednost umnoška na ekran  ponavljaj sve dok je umnožak veći od 6 Napišite objašnjenje svake linije koda. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int a,b,umnozak; do { cout<<"Unesi prvi broj... "; cin>>a; cout<<"Unesi drugi broj... "; cin>>b; umnozak=a*b; cout<<"Umnozak broja "<<a<<" i "<<"broja "<<b<<" je "<<umnozak<<endl; } while(umnozak>6); getchar(); return 0; }

7) Da li se uvjet izvođenja kod naredbe do-while provjerava prije ili poslije izvođenja petlje? _____________________________________________________________________ 8) Da li je kod naredbe do-while dozvoljeno mijenjati kontrolnu varijablu unutar bloka naredbi? _____________________________________________________________________

22


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 4

9) Napišite program koji računa faktorijel broja 10 korištenjem do - while petlje koja ima kontrolnu varijablu i. Ispišite vrijednost kontrolne varijable i pri svakom prolasku petlje, kao i međuvrijednost izračunatog faktorijela.

10) Napisati program koji će raditi sljedeći algoritam:  unesi dva cijela broja  izračunaj prosječnu vrijednost dva unešena broja  ispiši prosječnu vrijednost na ekran  ponavljaj sve dok je prosječna vrijednost veća od 5

23


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 5

5. Laboratorijska vježba Sadržaj vježbe:  Polja podataka  Statička i dinamička alokacija memorije Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV5). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

Polja podataka 1) Napišite program koji statički deklarira polje int varijabli duljine 5. Sa tipkovnice unesite inicijalnu vrijednost svakog člana, a nakon toga ispišite pojedinačno vrijednost svakog od članova korištenjem: a) indeksa polja b) pokazivača Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <iostream.h> #include <stdio.h> int main(int argc, char* argv[]) { int i,a[5]; for(i=0;i<5;i++) { cout << "Unesite " << i+1 << ". clan polja: "; cin >> a[i]; } cout << "Ispisujem preko indeksa" << endl; for(i=0;i<5;i++) { cout << i+1 << ". clan polja: " << a[i] << endl; } cout << "--------------------------" << endl; cout << "Ispisujem preko pokazivaca" << endl; for(i=0;i<5;i++) { cout << i+1 << ". clan polja: " << *(a+i) << endl; } getchar(); return 0; }

24


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 5

2) Koje vrijednosti može poprimiti indeks polja u gornjem primjeru? _____________________________________________________________________ 3) Prepravite prethodni program tako da se polje deklarira dinamički. Dio koda kojeg treba dodati: int *p; p = new int[5]; delete [] p;

4) Zašto prilikom dinamičke alokacije programer mora sam osloboditi memorijski prostor? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

5) Napišite program koji statički alocira polje od 10 varijabli tipa int. Unutar for petlje popunite vrijednost svih članova polja na 0. Ispišite vrijednost svih članova polja na ekran preko indeksa.

25


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 5

6) Napišite program koji statički alocira polje od 20 varijabli tipa int. Unutar for petlje popunite vrijednost svih članova polja sa parnim indeksom na 0 a neparnim na 1. Ispišite vrijednost svih članova polja na ekran preko indeksa.

26


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 6

6. Laboratorijska vježba Sadržaj vježbe:  Rad sa datotekama Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV6). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

Otvaranje i zatvaranje datoteke 1) Napišite program koji će otvoriti datoteku i odmah nakon toga datoteku zatvoriti. Koristite klasu ifstream, a kao argumente kod kreiranja uzmite samo punu putanju do željene datoteke. Moguće rješenje prikazano je ovdje: #include "stdafx.h" #include <fstream.h> #include <iostream.h>

#include <stdio.h> int main(int argc, char* argv[]) { ifstream datoteka; datoteka.open("D:\\Temp\\test.txt"); datoteka.close(); cout << "Datoteka otvorena i zatvorena" << endl; getchar(); return 0; }

2) Prevedite program i pokrenite ga. Da li je datoteka kreirana na željenoj lokaciji? _____________________________________________________________________ _____________________________________________________________________ 3) Otvorite kreiranu datoteku u Notepadu i upišite u nju neki tekst. Pohranite promjene, zatvorite Notepad i ponovno pokrenite program. Da li je tekst koji ste upisali Notepadom u datoteku nakon izvršavanja programa nestao iz nje? _____________________________________________________________________ _____________________________________________________________________ 4) Modificirajte program tako da kod otvaranja koristite opciju ios::in | ios::trunc 27


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 6

5) Da li je tekst unutar datoteke sada nestao nakon otvaranja? Komentirajte odgovor: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

Pisanje i čitanje iz datoteke 6) Napišite program koji će otvoriti datoteku, u nju upisati vaše ime i odmah nakon toga datoteku zatvoriti. Koristite klasu ofstream, a kao argumente kod kreiranja uzmite samo punu putanju do željene datoteke, pri čemu je potrebno voditi računa da datoteka ne postoji (ukoliko postoji, obrišite sadržaj). 7) Pokrenite program više puta, a nakon toga otvorite datoteku Notepadom. Da li je vaše ime upisano onoliko puta koliko ste program pokrenuli? Komentirajte odgovor: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 8) Modificirajte program tako da datoteku otvarate koristeći opciju ios::in | ios::app 9) Da li sada je vaše ime upisano onoliko puta koliko ste program pokrenuli? Komentirajte odgovor: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 10) Modificirajte program tako da datoteku otvarate koristeći opciju ios::in | ios::ate 11) Da li sada je vaše ime upisano onoliko puta koliko ste program pokrenuli? Komentirajte odgovor: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 12) Napisati program koji će pokušati otvoriti datoteku, te provjeriti da li je datoteka stvarno otvorena. Ukoliko je otvorena, treba istu datoteku i zatvoriti. Ukoliko je datoteka već postojala, prije početka rada s njom program treba pobrisati kompletan njen sadržaj.

28


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 6

Funkcija printf 13) Dolje su ispisana 3 primjera korištenja printf funkcije: a)

b)

c)

int main() { printf("Hello, world!"); getchar(); return 0; }

int main() { printf("%s","Hello, world!"); getchar(); return 0; }

int main() { printf("%s",1); getchar(); return 0; }

Pokrenite svaki za sebe i komentirajte rezultat pokretanja programa. 14) Koji program će generirati pogrešku prilikom izvođenja? Ispravite ga da radi pravilno te napišite izvorni kôd.

29


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 7

7. Laboratorijska vježba Sadržaj vježbe:  Uvod u C++  Definicija razreda (klase)  Deklaracija klase  Objekti  Varijable unutar objekta  Postupci unutar objekta - konstrukcija,destrukcija Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV7). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

Deklaracija klase, konstrukcija, destrukcija 1) Napišite program koji će u sebi imati deklariranu klasu naziva Krug. Klasa treba imati samo jedan public podatkovni član (polumjer kruga). Osim podatkovnog člana, treba imati eksplicitno deklarirane public funkcijske članove konstruktor (sa praznom listom argumenata) i destruktor. Destruktor treba neposredno prije izlaska ispisati vrijednost polumjera. Unutar main funkcije potrebno je dinamički kreirati objekt klase krug (alocirati memoriju) i odmah nakon toga memoriju dealocirati. Moguće rješenje prikazano je ovdje: //krug.h class Krug { public: Krug(); ~Krug(); int m_nPolumjer; }; //krug.cpp #include "stdafx.h" #include "Krug.h" #include <iostream.h> Krug::Krug() { } Krug::~Krug() { cout<<"Vrijednost polumjera je: "<<m_nPolumjer<<endl; }

30


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 7

//main #include #include #include #include

"stdafx.h" "Krug.h" <iostream.h> <stdio.h>

int main(int argc, char* argv[]) { //STATICKI NACIN KREIRANJA OBJEKTA Krug k1(); //DINAMICKI NACIN KREIRANJA OBJEKTA Krug *k1 = new Krug(); // delete k1; return 0; }

2) Prevedite program i pokrenite ga. Koja je vrijednost polumjera ispisana? Komentirajte rezultat: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 3) Promijenite konstruktor klase tako da imate mogućnost već kod kreiranja objekta postaviti vrijednost polumjera. Pokrenite program i provjerite da je vaše rješenje ispravno. Koja je razlika u dinamičkom i statičkom kreiranju objekta? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 4) U main funkciji zakomentirajte dio koji dealocira memoriju. Da li je sada pozvan destruktor? Komentirajte odgovor (nakon toga odkomentirajte dio koji memoriju dealocira): _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

31


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 7

5) U main funkciji dodajte liniju kôda koja će na ekran ispisati vrijednost polumjera kruga, direktnim pristupom podatkovnom članu klase. Prepišite liniju: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 6) Promijenite deklaraciju klase tako da podatkovni član postane private, a svi drugi da ostanu public. Pokušajte prevesti (kompajlirati) program. Koju pogrešku javlja prevoditelj, i čime je ona uzrokovana: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 7) Unutar klase Krug dodajte jedan javni funkcijski član povratnog tipa void, koji će imati zadaću ispisati polumjer kruga na ekran. Prepišite dio kôda koji ste mijenjali: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 8) U main funkciji promijenite liniju kôda tako da se na ekran ispiše vrijednost polumjera kruga, korištenjem novododanog funkcijskog člana. Prepišite liniju, i komentirajte razliku u pristupu u odnosu na prethodni slučaj. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

32


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 7

9) Napišite program koji će u sebi imati deklariranu klasu naziva Kocka. Klasa treba imati samo jedan public podatkovni član (brid kocke). Osim podatkovnog člana, treba imati eksplicitno deklarirane public funkcijske članove konstruktor (u kojemo je moguće postaviti vrijednost brida kocke), destruktor te funkcija koja računa volumen kocke (DajVolumen()). Unutar main funkcije potrebno je dinamički kreirati objekt klase kocka (alocirati memoriju) ispisati vrijednost volumena kocke pozivom funkcije te nakon toga memoriju dealocirati.

33


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 9

8. Laboratorijska vježba Sadržaj vježbe:  Elementi klase i kontrola pristupa;  Privatni, zaštićeni i javni članovi;  Operatori; Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV8). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

Elementi klase, kontrola pristupa, privatni, zaštićeni i javni članovi, operatori 1) Napišite klasu "Krug" koja će imati samo jedan podatkovni član (polumjer kruga), a koji će biti inicijaliziran u konstruktoru. U osnovnom programu statički kreirajte dva objekta klase "Krug" sa različitim polumjerima te ispišite vrijednost polumjera. 2) Prevedite program i pokrenite ga. Ispisati vrijednost polumjera kruga, direktnim pristupom podatkovnom članu klase. Koja je vrijednost polumjera ispisana? Komentirajte rezultat: _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 3) Promijenite deklaraciju klase tako da podatkovni član postane private, a svi drugi da ostanu public. Pokušajte prevesti (kompajlirati) program. Koju grešku javlja program? _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 4) Unutar klase Krug dodajte jedan javni funkcijski član DajPolumjer() povratnog tipa int, koji će imati zadaću ispisati polumjer kruga na ekran. Nad klasom definirajte operator + koji će novom krugu pridjeliti polumjer koji je jednak zbroju polumjera dva operanda. Prepišite dio koda je potrebno dodati. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

34


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 9

5) U osnovnom programu statički kreirajte dva objekta klase "Krug" sa različitim polumjerima te jedan objekt koji će biti njihov zbroj. Verificirajte valjanost definiranog operatora ispisom polumjera sva tri objekta. Prepišite dio dodanog koda. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 6) Nad klasom definirajte operator > te definirajte uvjet u main funkciji koji će na ekran ispisivati koji od prva dva kruga ima veći polumjer. _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 7) Napišite klasu "Pravokutnik" koja će imati dva podatkovna člana (stranica a i stranica b), a koji će biti inicijalizirani u konstruktoru. U osnovnom programu statički kreirajte dva objekta klase "Pravokutnik" sa različitim stranicama te ispišite vrijednost stranica. Nakon toga definirajte operator + te novi objekt klase "Pravokutnik" kojemu će stranice biti zbroj stranica prethodnih objekata. Ispišite vrijednost stranica.

35


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 9

9. Laboratorijska vježba Sadržaj vježbe:  Nasljeđivanje klasa;  Polimorfizam; Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV9). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

Nasljeđivanje klasa i polimorfizam 1) Kreirajte jednostavan projekt tipa Win32 Console Application. Unutar projekta uključite sljedeće pretprocesorske definicije i napišite klasu roditelj: Moguće rješenje prikazano je ovdje: #define #define #define #define

CRNA PLAVA SMEDJA ZELENA

1 2 3 4

... class Roditelj { public: int BojaOciju(){return ZELENA;} int BojaKose(){return SMEDJA;} };

2) Unutar glavnog programa instancirajte jedan objekt klase Roditelj i za instancirani objekt ispišite na ekran boju kose i očiju. Za ispis koristite funkcijske članove klase. Pokrenite program i pratite ispis na ekranu. Napišite što se prikazalo na ekranu te objasnite. ____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 3) Nakon toga, u programu kreirajte klasu Dijete, koja će javno naslijediti klasu Roditelj i koja neće imati niti jedan funkcijski ili podatkovni član. U glavnom programu uz objekt klase Roditelj, instancirajte još i jedan objekt klase Dijete, te za taj objekt dodajte također ispis boje kose i boje očiju na ekran. U glavnom programu objektu klase Dijete pristupajte isključivo preko pokazivača tipa Roditelj. Pokrenite program i pratite ispis na ekranu, te ukratko obrazložite što je odredilo boju kose i očiju objekta klase Dijete:

36


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 9

Dio koda kojega treba dodati: class Dijete : public Roditelj { };

____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ 4) Modificirajte klasu Dijete, tako da umjesto boje kose i očiju koje nasljeđuje od klase Roditelj na ekran ispisuje vlastitu boju kose i očiju (npr. plave oči i crnu kosu). U glavnom programu objektu klase Dijete pristupajte isključivo preko pokazivača tipa Roditelj. Prepišite dio koda koji ste morali modificirati i ukratko objasnite ovo svojstvo programskog jezika C++. ____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________

37


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 9

5) Klasa "Krug" ima samo jedan podatkovni član (polumjer), koji može biti inicijaliziran u konstruktoru. To je osnovna klasa iz koje javno izvodimo klasu "Valjak". Izvedena klasa sadrži još jedan dodatni podatkovni član koji označava visinu valjka. Izvedena klasa također sadrži samo jedan konstruktor u kojem odmah možemo inicijalizirati polumjer baze i visinu valjka. Napišite klase "Krug" i "Valjak".

38


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 10

10. Laboratorijska vježba Sadržaj vježbe:  Microsoft Visaul C++;  Dialog based aplikacije; Napomena: Odaberite iz glavnog menija opciju File->New. Odaberite kreiranje nove radne okoline (selektiranjem tabaworkspace). S desne strane upišite ime radne okoline – vaše prezime iza kojeg se nalazi oznaka vježbe (prezime_LV10). Odaberite lokaciju u kojoj će biti pohranjena nova radna okolina. Za svaki zadatak potrebno je kreirati novi projekt unutar postojeće radne okoline kako bi se svi zadaci ove vježbe nalazili na jednom mjestu i bili prikladni za pokazivanje asistentu.

Dialog based aplikacija 1) Napraviti jednostavnu MFC dialog based aplikaciju koja će prikazati windows prozor sa jednim gumbom za zatvaranje aplikacije. Na Slici 1 nalazi se prikaz jednog od mogućih rješenja.

Slika 1. Jednostavna windows aplikacija 2) Napraviti MFC dialog based aplikaciju koja će omogućavati izvođenje nekih od osnovnih računskih operacija. U glavnom dijalogu se nalazi izbornik iz kojeg se poziva dijalog u kojem se obavlja računanje. Omogućiti unos dva broja, izbor između osnovnih računskih operacija (zbrajanje, oduzimanje, množenje i dijeljenje), izračun, te ispis rezultata. Na Slici 2 nalazi se prikaz jednog od mogućih rješenja korisničkog sučelja. Kod za računske operacije: void CRacunanje::OnRacunanje() { UpdateData(); float rez;

39


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 10

if(m_operacija=="Zbrajanje") { rez = m_prviBr + m_drugiBr; m_rezultat.Format("%f", rez); UpdateData(false); } if(m_operacija=="Oduzimanje") { rez = m_prviBr - m_drugiBr; m_rezultat.Format("%f", rez); UpdateData(false); } if(m_operacija=="Mnozenje") { rez = m_prviBr * m_drugiBr; m_rezultat.Format("%f", rez); UpdateData(false); } if(m_operacija=="Dijeljenje") { rez = m_prviBr / m_drugiBr; m_rezultat.Format("%f", rez); UpdateData(false); }

Slika 2. Jednostavna windows aplikacija za izvođenje osnovnih operacija 40


Laboratorijske vježe iz kolegija ″Osnove programiranja″

vježba 10

3) Na prethodni zadataka dodajte novi dialog prozor u kojemu će se unositi a i b stranica pravokutnika a potrebno je izračunati opseg i površinu.

41


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.