PROGRAMIRANJE U CU Teorija STRUKTURA PROGRAMA NAPISANOG U















































- Slides: 47
PROGRAMIRANJE U C-U Teorija
STRUKTURA PROGRAMA NAPISANOG U C-U Prije početka programa potrebno je pretprocesorskom naredbom #include< ime biblioteke> najaviti biblioteke funkcija koje će se u programu koristiti. Funkcija printf(), scanf() nalazi se u biblioteci funkcija stdio. h – biblioteka za ulaz i izlaz podataka. Program u C-u sastoji se od niza povezanih funkcija od kojih je jedina obavezna funkcija main() koja označava mjesto gdje počinje izvršavanje programa
ISPIS TEKSTA NA ZASLON Prva C funkcija s kojom ćemo se detaljnije upoznati je funkcija za ispis. C koristi nekoliko funkcija za ispis. Konkretno, za ispis teksta na zaslon najčešće koristimo funkciju za formatirani ispis printf(); Opći oblik (sintaksa) je: printf("tekst koji želimo ispisati na zaslon");
PRIMJER 1: printf("Ovo je veliki trenutak! Pisem svoj prvi program!"); Program bi izgledao: #include<stdio. h> main(){ printf("Ovo je veliki trenutak! Pisem svoj prvi program!"); }
ISPIS VRIJEDNOSTI Za ispis vrijednosti također se koristi funkcija printf(), samo malo drugačijeg oblika. Kod ispisa vrijednosti, osim primjene funkcije za ispis, potrebno je definirati format ispisa. Formatom se definira način ispisa vrijednosti, a usko je vezan uz tipove podataka.
ISPIS VRIJEDNOSTI Format %c Značenje %d oznaka formata za ispis jednog znaka ispis cijelog broja %f ispis realnog broja %lf ispis realnog broja tipa double %s ispis niza znakova %e ispis realnog broja u E-notaciji
ZNAKOVNE KONSTANTE ZA KONTROLU ISPISA Znakovne konstante sastoje se od dva znaka. Prvi znak je , a drugi slovo koje kontrolira ispis. Neke konstante koje se češće koriste su: b – pomak za jedno mjesto udesno r – povratak na početak reda f – nova stranica n –novi red v – vertikalni tabulator t – horizontalni tabulator
VARIJABLE I KONSTANTE Izrada programa od nas traži i rad s različitim podacima. Podaci u programu mogu biti: �varijable ili �konstante Varijable su podaci čije se vrijednosti tijekom izvođenja mijenjaju, a konstantama su podaci čije se vrijednosti tijekom izvođenja ne mogu
TIPOVI PODATAKA Da bi naši programi davali što točnije rezultate i pri tom optimalno koristili memoriju, podatke osim po vrsti (varijable i konstante) moramo podijeliti i po tipu. C razlikuje pet osnovnih tipova podataka: � int(cijeli broj), � char (znak), � float (realan broj), � double (realan broj dvostruke preciznosti) i � void (tip podatka koji ne sadrži vrijednost.
ARITMETIČKI OPERATORI Aritmetički operatori koriste se kada program treba izračunati rezultate osnovnih matematičkih funkcija. C poznaje pet aritmetičkih operatora: Operacija zbrajanje oduzimanje množenje dijeljenje Modulo (ostatak cjelobrojnog dijeljenja) Operator + * / %
FUNKCIJE ZA UNOS PODATAKA Za unos podataka koriste se funkcije za unos. Najčešće korištena funkcija je funkcija za formatirani unos, scanf(); Opći oblik (sintaksa) funkcije scanf je: scanf("lista_formata", lista_varijabli);
FUNKCIJE ZA UNOS PODATAKA Kao i kod funkcije za ispis u listu formata upisujemo oznake formata za tip varijabli. One su jednake onima koje se koriste u ispisu. U listi varijabli navodi se popis imena varijabli istim redoslijedom kao u popisu formata. Varijable navedene u listi varijabli međusobno se odvajaju zarezom. Budući da se u C-u vrijednosti prenose preko adrese, ispred imena svake varijable treba dodati i operator za dodjeljivanje adrese, & (adresni operator)
FUNKCIJE ZA UNOS PODATAKA Važno: Obratite pažnju na način na koji se odvajaju formati u listi formata (na primjer, zarezom: "%d, %f"). Na isti način korisnik treba odvajati vrijednosti prilikom unosa. Primjer : printf("Upisite dva cijela broja odvojena razmakom: "); scanf("%d %d", &a, &b);
DEKLARACIJA (NAJAVA) VARIJABLI U svakom programu C traži najavu varijabli koje će se koristiti u programu. Varijable najčešće najavljujemo na početku programa, no nije pravilo. Bitno ih je najaviti prije njihovog prvog korištenja! Opći oblik najave varijabli: tip_podataka lista varijabli navedenog tipa; Najavom varijable u memoriji se za nju zauzme mjesto. Zbog toga je vrlo važno najavljivati samo one varijable koje će se u programu stvarno i koristiti.
DEKLARACIJA (NAJAVA) VARIJABLI Zbog preglednosti kôda, većina varijabli najčešće se najavljuje na samom početku programa. Mjesto na kojem je varijabla najavljena utječe na njezino područje djelovanja. Ako je varijabla najavljena izvan svih funkcija ona je dostupna svim funkcijama i kažemo da je globalna. Lokalne varijable najavljuju se unutar funkcije ili bloka naredbi u kojem se koriste. Izvan područja u kojem su najavljene nisu dostupne. U programu može biti više lokalnih varijabli istog imena.
KOMENTAR U PROGRAMU Dio programa između znakova /*i */naziva se komentar. Komentari služe programeru za lakše snalaženje u programu. Programeri najčešće komentiraju bitne dijelove programa kako bi im kasniji zahvati na programu bili jednostavniji. Prilikom prevođenja programa komentari se preskaču.
DEFINICIJA KONSTANTI Konstante su vrijednosti koje se zadaju jednom i ne mijenjaju se tijekom izvođenja programa. Razlikujemo cjelobrojne, realne i znakovne konstante. Prije korištenja konstanti potrebno ih je definirati zadavanjem imena i vrijednosti. Možemo ih definirati predprocesorskom naredbom #define Opći oblik (sintaksa) je: #define ime_konstante vrijednost npr. # define pi 3, 14159
NAREDBA PRIDRUŽIVANJA Naredbom pridruživanja se varijablama pridružuju ili mijenjaju vrijednosti! Operator pridruživanja u programskom jeziku C je =. Njegova uloga je vrijednost izraza s desne strane pridružiti varijabli na lijevoj strani. Operator pridruživanja ima najniži prioritet izvršavanja. To znači da će se najprije izračunati vrijednost izraza s desne strane i tek onda rezultat pridružiti varijabli na lijevoj strani. Opći oblik naredbe za pridruživanje vrijednosti je: varijabla=izraz; Npr. a = 10;
MATEMATIČKE FUNKCIJE Matematičke funkcije nisu sastavni dio C-a, već dolaze u bibliotekama. Biblioteka u kojoj se nalazi najveći broj standardnih matematičkih funkcija je math. h. One postaju dostupne uključivanjem te biblioteke naredbom #include<>. Neke od standardnih matematičkih funkcija prikazane su u sljedećoj tablici:
F-ja u C-u Tip argumenta Tip rezultata Matematička f-ja Standardna biblioteka stdlib. h abs(x) int Apsolutna vrijednost labs(x) longint acos(x) double(-1 do 1) double(0 do ) acosl(x) long double asin(x)* double(-1 do 1) double atan(x)* double sin(x)* double cos(x)* double(-1 do 1) tan(x)* double exp(x)* double eksponencijalna funkcije math. h log(x)* double prirodni algoritam(ln) math. h log 10(x)* double logaritam s bazom 10 math. h sqrt(x)* double Drugi korijen pozitivnog broja math. h pow(x, y) double Računa vrijednost x math. h Trigonometrijske funkcije math. h
GRANANJE U PROGRAMU Tijekom pisanja programa često ćete imati potrebu određene naredbe izvršiti ovisno o tome je li ili nije ispunjen određeni uvjet. Postoje naredbe za jednostruko i naredbe za višestruko grananje.
RELACIJSKI OPERATORI Operacija Operator manje od veće od jednako manje ili jednako < > = = <= veće ili jednako >= različito !=
JEDNOSTRUKO GRANANJE Jednostruko grananje koristi se u slučajevima u kojima je naredbu ili blok naredbi potrebno izvršiti jedino ako je dani uvjet ispunjen - kada je vrijednost zadanog relacijskog ili aritmetičkog izraza različita od nule. Za jednostruko grananje koristi se naredba if. Opći oblik (sintaksa) naredbe je: if (uvjet) naredba; Uvjet može biti relacijski ili aritmetički izraz. Naredba unutar if će se izvršiti jedino ako je uvjet različit od nule. Ako je uvjet jednak nuli, naredba iza if se preskače i izvršava se prva sljedeća naredba.
PRIMJER: Program ispisuje vrijednost drugog korijena pozitivnog realnog broja. #include<stdio. h> #include<math. h> main(){ float x; printf("Upisite pozitivan realan broj: "); scanf("%f", &x); if (x>=0){ printf ("Vrijednost drugog korijena broja %. 2 f je %. 2 f", x, sqrt(x)); } }
LOGIČKI OPERATORI • U slučajevima u kojima je potrebno zadovoljiti uvjete oblika: (uvjet 1 i uvjet 2) ili (uvjet 1 ili uvjet 2) koriste se logičke funkcije i logički operatori. Operacija logička negacija (NOT) logički i (AND) logički ili (OR) Operator ! && | |
PRIMJER – IF NAREDBA Rastavljanje na znamenke i ispis rezultata samo ako korisnik upiše troznamenkasti broj. #include<stdio. h> #include<math. h> main() { int a, prva, druga, treca; printf("Unesite troznamenkasti broj: "); scanf("%d", &a); if (a>99 && a<1000) { prva=a/100; druga=a/10%10; treca=a%10; printf("znamenke unesenog broja su %d, %d", prva, druga, treca); } }
VIŠESTRUKO GRANANJE U praksi se vrlo rijetko programi granaju samo u jednom smjeru. Najčešće su u pitanju dva ili više smjerova.
VIŠESTRUKO GRANANJE - IF-ELSE NAREDBA Opći oblik (sintaksa) je : if (uvjet) naredba_1; else naredba_2; Naredba radi na sljedeći način: Ako je uvjet ispunjen izvršava se naredba_1 i program se nastavlja prvom naredbom iza if-else naredbe. � Ako uvjet nije ispunjen izvršava se naredba_2 i program se nastavlja sljedećom naredbom. �
VIŠESTRUKO GRANANJE - IF-ELSE NAREDBA Grafički prikazano to izgleda ovako:
PRIMJER - IF-ELSE NAREDBA Rastavljanje na znamenke i ispis rezultata samo ako korisnik upiše troznamenkasti broj. #include<stdio. h> #include<math. h> main(){ int a, prva, druga, treca; printf("Unesite troznamenkasti broj: "); scanf("%d", &a); if (a>99 && a<1000) { prva=a/100; druga=a/10%10; treca=a%10; printf("znamenke unesenog broja su %d, %d", prva, druga, treca); } else printf("Niste upisali troznamenkasti broj"); }
SWITCH-CASE NAREDBA Zadaci koji u sebi sadrže različite izbornike u praksi se ne rješavaju pomoću if-elseif naredbe. Postoji naredba prilagođena ovakvim problemima - switch-case naredba. Njezina sintaksa izgleda ovako: switch (izraz){ case konstanta_1: blok naredbi_1; break; case konstanta_2: blok naredbi_2; break; . . . case konstanta_n-1: blok naredbi_n-1; break; default: blok naredbi_n; break; }
SWITCH-CASE NAREDBA Naredba switch-case izvršava se na sljedeći način: � Računa se vrijednost izraza unutar zagrade � Dobivena vrijednost uspoređuje se sa nizom konstanti (konstanta_1 do konstanta_n-1). � Ako je vrijednost jednaka jednoj od konstanti, izvršava se blok naredbi pridružen toj konstanti � Ako dobivena vrijednost nije jednaka niti jednoj od navedenih konstanti, izvršit će se blok naredbi pridružen opciji default. � Izvršavanje bloka naredbi prekida se naredbom break. Ako se blok naredbi u case ne završi s break, nastavlja se izvršavati blok naredbi sljedećeg case. � Opcija default može se i izostaviti ukoliko za njom ne postoji potreba!
PRIMJER - SWITCH - CASE NAREDBA #include<stdio. h> main() { int x, y, rez, izbor; printf("Upisite dva cijela broja: "); scanf("%d %d", &x, &y); printf("Zelite li izracunati: n 1) zbrojn 2) razlikun 3) umnozakn 4) kvocijentnunesenih brojeva? "); printf("n. Upisite broj za izbor: "); scanf("%d", &izbor); switch(izbor) { case 1: rez=x+y; break; case 2: rez=x-y; break; case 3: rez=x*y; break; case 4: rez=x/y; break; default: printf("Kriva operacija!"); break; } if (izbor>0&&izbor<5){ printf("Trazeni rezultat je %d", rez); } }
UVJETNI OPERATOR Nednostavniji oblici if-else naredbe mogu se zamijeniti uvjetnim operatorom (? ). Sintaksa uvjetnog operatora: (uvjet) ? naredba_1 : naredba_2; Kad izvršavanje programa dođe do uvjetnog operatora događa se sljedeće: � Izračuna se vrijednost uvjeta. � Ako je izračunata vrijednost različita od nule izvršit će se naredba_1. � Ako je izračunata vrijednost jednaka nuli izvršava se naredba_2.
PRIMJER – UVJETNI OPERATOR Linija kôda: (a%2==0) ? printf("Broj je paran") : printf("Broj je neparan); ispituje je li ostatak pri dijeljenju vrijednosti varijable a sa brojem 2 jednak nuli. Ako je, ispisuje na zaslon tekst "Broj je paran", a ako nije, ispisuje tekst "Broj je neparan".
OPERATORI INKREMENT I DEKREMENT Operator inkrement (++) � je operator koji vrijednost varijable uvećava za jedan. Može se pisati ispred ili iza imena varijable. To znači da umjesto izraza a=a+1 možemo pisati a++ ili ++a. Operator dekrement (--) � je operator koji vrijednost varijable umanjuje za jedan. Kao i inkrement može se pisati ispred ili iza imena varijable: a-- ili --a.
PRIMJERI: Ako je vrijednost varijable a= 5, nakon naredbe a++; njezina će vrijednost biti 6. U ovom je slučaju svejedno jesu li operatori inkrement i dekrement ispred ili iza imena varijable. Ali, ako se koriste u aritmetičkim izrazima, tada to nije svejedno. U izrazu b=++a, vrijednost varijable a najprije će se uvećati i tako uvećana pridružiti varijabli b. Ako je vrijednost varijable a prije izraza bila 5, nakon izraza vrijednost varijabli a i b biti će 6. U izrazu b=a++, vrijednost varijable a (neka to bude 5) najprije će se pridružiti varijabli b (znači, b=5), a nakon toga će se uvećati za jedan (a=6). Znači, nakon izraza b=a++, vrijednost varijable a će biti 6, dok će vrijednost varijable b biti 5. Isto se događa i s operatorom dekrement.
FOR PETLJA Naredba for najčešće se koristi u programima u kojima je broj ponavljanja unaprijed poznat. Opći oblik (sintaksa) naredbe for je: for (inicijalizacija; uvjet; promjena vrijednosti){ naredba (blok naredbi) za ponavljanje; } � Inicijalizacija je postupak postavljanja varijable koja kontrolira ponavljanje na početnu vrijednost � Ponavljanje će se nastavljati sve dok je ispunjen uvjet ponavljanja � Promjena vrijednosti je dio u kojem se definira način promjene stanja kontrolne varijable
GRAFIČKI PRIKAZ:
KAKO SE IZVRŠAVA NAREDBA FOR? Vrijednost kontrolne varijable se (inicijalizacijom) postavi na početnu vrijednost Provjerava se istinitost uvjeta. � Ako je rezultat različit od nule, izvršava se naredba (blok naredbi) unutar for naredbe. � Ako je rezultat jednak nuli, ponavljanje se prekida i program nastavlja s izvršavanjem prvom naredbom iza naredbe for. Vrijednost kontrolne varijable se mijenja na način na koji je zadana promjena vrijednosti. Povratak na korak broj 2
PRIMJER - FOR PETLJA Naredbom: for (i=1; i<=5; i++){ printf("Danas je lijep suncan dan!n"); } na zaslon će se pet puta ispisati tekst "Danas je lijep suncan dan!" (svaki puta u novom redu zbog znakovne konstante n)
WHILE PETLJA Kada broj ponavljanja nije unaprijed poznat, već ovisi o uvjetu i kad se uvjet treba provjeriti na početku bloka naredbi koristi se while naredba oblika: inicijalizacija while (uvjet){ naredba (blok naredbi); } Naredbe unutar while ponavljaju se sve dok je uvjet različit od nule. Prilikom primjene while petlje potrebno je voditi računa o tome da se izbjegne beskonačna petlja
GRAFIČKI PRIKAZ:
PRIMJER - WHILE Program ispisuje sve dvoznamenkaste parne brojeve. #include<stdio. h> main() { int i=10; while (i<100) { printf("%d, ", i); i+=2; } }
PETLJA DO - WHILE Do-while naredba koristi se u slučajevima u kojima se uvjet o kojem ovisi ponavljanje provjerrava tek na kraju bloka naredbi. Opći oblik do-while naredbe: inicijalizacija; do { blok naredbi; }while (uvjet);
GRAFIČKI PRIKAZ:
PRIMJER – DO -WHILE Program ispisuje sve dvoznamenkaste parne brojeve. #include<stdio. h> main() { int i=10; do { printf("%d, ", i); i+=2; } while (i<100) }