Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1

Величина: px
Почињати приказ од странице:

Download "Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1"

Транскрипт

1 Programiranje predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1/95

2 Sadržaj predavanja Funkcije: Definicija funkcije. Naredba return. Funkcija tipa void. Funkcija bez argumenata. Deklaracija funkcije. Prijenos argumenata po vrijednosti. Vraćanje vrijednosti preko argumenata. Funkcije bez prototipa (ne koristiti!). Primjeri funkcija za algoritme na cijelim brojevima. Rekurzivne funkcije. Prog1 2016, 10. predavanje p. 2/95

3 Informacije Praktični kolokvij Praktični kolokvij prvi krug kreće sljedeći tjedan: srijeda, , četvrtak, subota, , je uključena (prazni praktikumi). Svi termini će biti poznati do kraja ovog tjedna. Prijava za PK = zauzimanje termina kreće u ponoć izmedu nedjelje i ponedjeljka, tj. u ponedjeljak, u 0:00 sati, preko aplikacije za zadaće! Sami birate termin (i praktikum) po sistemu tko prije.... Prijave za termin se zatvaraju dan prije termina, u 12:00 sati. Prog1 2016, 10. predavanje p. 3/95

4 Praktični kolokvij upute: vježbajte! Zapamtite: Vrijeme za rješenje je 45 minuta. Zadaci su objavljeni na webu pod Materijali, 3. točka. U praktični kolokvij ulaze svi zadaci! Smijete koristiti funkcije (lakše je), ali ne morate, a nizovi nisu potrebni. Korisno je odmah pogledati i početi vježbati, ako već niste. Bilo bi vrlo lijepo da na praktičnom znate nakucati nešto, prevesti to (compile), isprobati (run),... i još dobiti točne rezultate samo to provjeravamo. Dakle, vježbajte! Prog1 2016, 10. predavanje p. 4/95

5 Praktični kolokvij upute: pripremite se! Barem dan dva prije praktičnog kolokvija provjerite: da vam account štima, da se znate logirati, da znate naći IDE u kojem mislite raditi. Uz svaki ponudeni termin piše i praktikum u kojem se radi, tj. sami birate termin i praktikum. Dakle, imate dovoljno vremena za isprobati (na licu mjesta) je l vam sve radi. Ako vam account ne radi na praktičnom kolokviju, ili si ne znate password, ili ne znate naći/koristiti compiler,... to je vaš problem. Što se nas tiče to je pad. Prog1 2016, 10. predavanje p. 5/95

6 Informacije Na webu imate dodatak ovom predavanju o funkcijama za neke probleme: provjera je li broj prost i prosti faktori broja, binomni koeficijenti i Pascalov trokut, obično i binarno potenciranje. Tema sljedećeg predavanja je Ulaz i izlaz podataka. Na mom webu, pod dodatnim materijalima za Prog1 i Prog2, nalazi se tekst in_out.pdf (7 stranica, 59 kb), koji sadrži detaljan opis funkcija za formatirani ulaz i izlaz podataka. Pogledajte za sljedeće predavanje! Prog1 2016, 10. predavanje p. 6/95

7 Funkcije Prog1 2016, 10. predavanje p. 7/95

8 Sadržaj Funkcije: Definicija funkcije. Naredba return. Funkcija tipa void. Funkcija bez argumenata. Deklaracija funkcije. Prijenos argumenata po vrijednosti. Vraćanje vrijednosti preko argumenata. Funkcije bez prototipa (ne koristiti!). Primjeri funkcija za algoritme na cijelim brojevima. Rekurzivne funkcije. Funkcije s varijabilnim brojem argumenata. Prog1 2016, 10. predavanje p. 8/95

9 Definicija funkcije Funkcija je programska cjelina koja uzima neke ulazne podatke, izvršava odredeni niz naredbi, i vraća rezultat svog izvršavanja na mjesto poziva. Slično kao u matematici: domena, kodomena, pravilo. Definicija funkcije ima oblik: tip_podatka ime_funkcije(tip_1 arg_1,..., tip_n arg_n) { tijelo funkcije } Prog1 2016, 10. predavanje p. 9/95

10 Definicija funkcije (nastavak) Opis pojedinih dijelova definicije funkcije: tip_podatka je tip podatka koji će funkcija vratiti kao rezultat svog izvršavanja (opis kodomene funkcije). ime_funkcije je identifikator. Unutar okruglih zagrada, iza imena funkcije, nalazi se deklaracija formalnih argumenata funkcije (ako ih ima). Prvi argument arg_1 je lokalna varijabla tipa tip_1, drugi argument arg_2 je lokalna varijabla tipa tip_2, i tako redom. Formalni argumenti opisuju domenu funkcije. Deklaracije pojedinih argumenata medusobno se odvajaju zarezom (to nije zarez operator). Prog1 2016, 10. predavanje p. 10/95

11 Definicija funkcije (nastavak) Prvi dio definicije funkcije, ispred tijela, tip_podatka ime_funkcije(tip_1 arg_1,..., tip_n arg_n) katkad se još zove i zaglavlje funkcije. Okrugle zagrade ( ) moraju se napisati, čak i kad nema argumenata (v. malo kasnije), jer signaliziraju da je riječ o funkciji, a ne o nečem drugom (na pr. obična varijabla). Na kraju definicije, iza zaglavlja, nalazi se tijelo funkcije. Tijelo funkcije piše se unutar vitičastih zagrada i ima strukturu bloka, odnosno, složene naredbe. Prog1 2016, 10. predavanje p. 11/95

12 Tijelo funkcije Svaki blok ili složena naredba u programu sastoji se od deklaracija objekata (varijabli, tipova) i izvršnih naredbi, koje se izvršavaju ulaskom u blok. Isto vrijedi i za tijelo funkcije, a izvršavanje počinje pozivom funkcije. Za bilo koji blok, pa tako i za tijelo funkcije, vrijede sljedeća pravila o redoslijedu deklaracija i izvršnih naredbi. Po standardu C90, deklaracije svih objekata moraju prethoditi prvoj izvršnoj naredbi. Standard C99 dozvoljava deklaracije objekata bilo gdje u bloku, samo da su prije prvog korištenja objekta. (Detaljnije u poglavlju Struktura programa na Prog2.) Prog1 2016, 10. predavanje p. 12/95

13 Formalni argumenti kao varijable Formalni argumenti arg_1,..., arg_n, deklarirani u zaglavlju tip_podatka ime_funkcije(tip_1 arg_1,..., tip_n arg_n) tom deklaracijom postaju lokalne varijable u toj funkciji. Smijemo ih normalno koristiti, ali samo lokalno, unutar tijela te funkcije. Razlika izmedu ovih varijabli i ostalih varijabli, deklariranih u tijelu funkcije: formalni argumenti dobivaju vrijednost prilikom poziva funkcije iz stvarnih argumenata (navedenih u pozivu). Prog1 2016, 10. predavanje p. 13/95

14 Formalni argumenti kao varijable (nastavak) To je kao kad zadajemo točku u kojoj treba izračunati vrijednost funkcije. Na primjer, pišemo algoritam za računanje vrijednosti sin(x) u bilo kojoj zadanoj točki x (probajte smisliti algoritam). Algoritam možemo realizirati kao funkciju s imenom sin, kojoj će zadana vrijednost x biti formalni argument, a cijeli postupak pišemo u terminima te varijable x, bez obzira na stvarnu vrijednost te varijable. Kod poziva te funkcije, moramo zadati pravu (konkretnu) vrijednost za x u kojoj želimo izračunati vrijednost funkcije. Ta vrijednost u pozivu je stvarni argument. Na primjer, u pozivu sin(2.35), stvarni argument je Prog1 2016, 10. predavanje p. 14/95

15 Povratna vrijednost funkcije Što sve može biti vrijednost funkcije, tj. što se smije navesti kao tip_podatka u zaglavlju? Pravilo. Funkcija može vratiti aritmetički tip, strukturu, uniju, ili pokazivač, ali ne može vratiti drugu funkciju ili polje. Medutim, može vratiti pokazivač na funkciju ili na polje (prvi element polja). Usput, ako tip_podatka nije naveden (što je dozvoljeno), pretpostavlja se da funkcija vraća podatak tipa int. Nemojte to koristiti prevoditelj to radi samo zbog kompatibilnosti s prastarim C programima (pisanim u prvotnom C-u prema KR1, prije ANSI/ISO standarda). Prog1 2016, 10. predavanje p. 15/95

16 Naredba return Funkcija vraća rezultat svog izvršavanja naredbom return. Opći oblik te naredbe je: return izraz; Izraz se može staviti u okrugle zagrade, ali to nije nužno. return (izraz); Ako je tip vrijednosti izraza u naredbi return različit od tipa podatka koji funkcija vraća, vrijednost izraza će biti pretvorena u tip_podatka. Naredba return, ujedno, završava izvršavanje funkcije. Prog1 2016, 10. predavanje p. 16/95

17 Što se zbiva nakon return? Izvršavanje programa nastavlja se tamo gdje je funkcija bila pozvana, a vraćena vrijednost (ako je ima) uvrštava se umjesto poziva funkcije. Primjer. Poziv funkcije sin u sklopu složenog izraza double y, phi, r;... r = 6.81; phi = 2.35; y = r * sin(phi); Trigonometrijske funkcije postoje u standardnoj biblioteci. Pripadna datoteka zaglavlja je <math.h>. Prog1 2016, 10. predavanje p. 17/95

18 Korištenje povratne vrijednosti Ako funkcija vraća neku vrijednost, povratna vrijednost se ne mora iskoristiti na mjestu poziva, već se može i odbaciti. Primjer. Standardne funkcije scanf i printf, takoder, vraćaju neku vrijednost (više na sljedećem predavanju). Uobičajeni pozivi tih funkcija odbacuju vraćenu vrijednost! scanf("%d", &n); printf(" n = %d\n", n); Ako nam vraćene vrijednosti trebaju, smijemo napisati procitano = scanf("%d", &n); napisano = printf(" n = %d\n", n); Prog1 2016, 10. predavanje p. 18/95

19 Primjer funkcije Primjer. Sljedeća funkcija pretvara mala slova engleske abecede u velika. Ostale znakove ne mijenja. Formalni argument je samo jedan (c) i tipa je char. Vraćena vrijednost je tipa char. Ime funkcije je malo_u_veliko. char malo_u_veliko(char c) { char znak; znak = ( a <= c && c <= z )? ( A + c - a ) : c; return znak; } Prog1 2016, 10. predavanje p. 19/95

20 Objašnjenje algoritma Algoritam. Možemo pitati znak po znak, ali to nije potrebno. Za sve standardne kôdove znakova (na pr. ASCII) u tipu char vrijedi sljedeće. Mala slova engleske abecede dolaze u bloku jedno za drugim: a, b,..., z, tj. pripadni kôdovi rastu za po jedan, počev od a. Potpuno isto vrijedi i za velika slova: A, B,..., Z. A sad iskoristimo da je tip char, zapravo, cjelobrojni tip, pa postoji usporedivanje i aritmetika znakova. Zato test je li c malo slovo glasi: a <= c && c <= z (usporedivanje znakova). Prog1 2016, 10. predavanje p. 20/95

21 Objašnjenje algoritma (nastavak) Nadalje, odgovarajuće malo slovo (c) i veliko slovo (znak) mora biti jednako pomaknuto (ili udaljeno) u odnosu na odgovarajuće početno slovo a, odnosno, A. Za ove pomake koristimo aritmetiku znakova. Pomak malog slova c od slova a = c - a. Pomak velikog slova znak od slova A = znak - A. Kad ih izjednačimo, slijedi znak - A = c - a. Onda je znak = A + c - a (to tražimo). Prednosti ovog algoritma: Nije bitno jesu li velika slova ispred malih, ili obratno! Ne moramo znati pripadne kôdove znakova. Prog1 2016, 10. predavanje p. 21/95

22 Poziv funkcije Funkcija se poziva navodenjem imena funkcije i liste (popisa) stvarnih argumenata u zagradama. Primjer. Poziv funkcije malo_u_veliko može izgledati ovako: veliko = malo_u_veliko(slovo); Ovdje je varijabla slovo jedini stvarni argument u pozivu funkcije. Trenutna vrijednost te varijable se prenosi u funkciju, kao početna vrijednost formalnog argumenta c. Prog1 2016, 10. predavanje p. 22/95

23 Primjer poziva funkcije Primjer. Glavni program (funkcija main) s pozivom funkcije malo_u_veliko iz prethodnog primjera (v. p_01.c). int main(void) { char malo, veliko; } printf(" Unesite malo slovo: "); scanf("%c", &malo); veliko = malo_u_veliko(malo); printf("\n Veliko slovo = %c\n", veliko); return 0; Za ulaz: d, dobijemo izlaz: D. Prog1 2016, 10. predavanje p. 23/95

24 Poziv funkcije izraz kao stvarni argument Stvarni argument funkcije može biti izraz. Sasvim općenito, stvarni argument je uvijek izraz. Prvo se računa vrijednost tog izraza, a zatim se ta vrijednost prenosi u funkciju dodjeljuje formalnom argumentu. Primjer. Poziv trigonometrijske funkcije sin(2 * x + y). Primjer. Pozivi funkcije malo_u_veliko mogu biti i ovo: veliko = malo_u_veliko( a + 3); veliko = malo_u_veliko(veliko + 3); Rezultati su: D i G (v. p_01a.c). Uočite da u drugom pozivu nema pretvaranja u veliko slovo. Prog1 2016, 10. predavanje p. 24/95

25 Primjer funkcije varijante zapisa Funkciju malo_u_veliko možemo napisati na razne načine. Cijeli uvjetni izraz možemo odmah napisati u return naredbi, tako da nam varijabla znak uopće ne treba (v. p_02.c). char malo_u_veliko(char c) { return ( a <= c && c <= z )? ( A + c - a ) : c; } Okrugle zagrade, takoder, nisu potrebne, zbog niskog prioriteta uvjetnog operatora. Služe samo za preglednost. Prog1 2016, 10. predavanje p. 25/95

26 Primjer funkcije varijante zapisa (nastavak) Usput, ako obrišemo okrugle zagrade, dobijemo ovo: char malo_u_veliko(char c) { return a <= c && c <= z? A + c - a : c; } Pa vi probajte pročitati! Izgleda prilično odurno, zar ne, iako uredno radi (v. p_03.c). Napomena. Naša funkcija malo_u_veliko radi isto što i standardna funkcija toupper iz <ctype.h>. U toj datoteci zaglavlja postoji još hrpa funkcija za testiranje znakova (v. drugi semestar). Prog1 2016, 10. predavanje p. 26/95

27 Višestruke return naredbe Ako se programski tok grana unutar funkcije, onda smijemo imati više return naredbi unutar iste funkcije. Primjer. Funkcija koja pretvara mala u velika slova, napisana if-else naredbom (v. p_04.c). char malo_u_veliko(char c) { if ( a <= c && c <= z ) return ( A + c - a ); else return c; } Prog1 2016, 10. predavanje p. 27/95

28 Funkcija bez rezultata tipa void Ako funkcija ne vraća nikakvu vrijednost, onda se za tip vraćene vrijednosti koristi ključna riječ void ( prazan ). Primjer. Ispis maksimalnog od dva cijela broja (v. p_maxi.c). void ispisi_max(int x, int y) { int max; max = (x >= y)? x : y; printf(" Maksimalna vrijednost = %d\n", max); return; } Naredba return nema izraz. Ako je na kraju funkcije, može biti izostavljena. No, bolje ju je zadržati, radi preglednosti. Prog1 2016, 10. predavanje p. 28/95

29 Funkcija bez rezultata (nastavak) Kod poziva takve funkcije (tipa void) treba malo paziti. Zato što funkcija ne vraća nikakvu vrijednost, povratna vrijednost se ne smije iskoristiti na mjestu poziva. Primjer. Na pokušaj korištenja povratne vrijednosti, poput m = ispisi_max(x, y); prevoditelj bi se trebao pobuniti i javiti grešku. Ako ne javi grešku i prevede takav program, dodijeljena vrijednost je sigurno neko smeće. Isto vrijedi i za prevoditelj! Prog1 2016, 10. predavanje p. 29/95

30 Funkcija bez argumenata Funkcija koja nema nikakve argumente definira se ovako: tip_podatka ime_funkcije(void) { tijelo funkcije } Ključna riječ void (unutar zagrada) označava da funkcija ne uzima argumente. Napomena. Ovakve funkcije nisu besmislene. Na primjer, standardna funkcija getchar za čitanje jednog znaka (sa standardnog ulaza) nema argumenata (v. sljedeće predavanje). Osim toga, glavni program funkcija main, takoder, bar zasad, nema argumenata. Može ih imati (v. drugi semestar). Prog1 2016, 10. predavanje p. 30/95

31 Funkcija bez argumenata poziv Poziv takve funkcije ima praznu listu stvarnih argumenata u zagradama. Primjer. Poziv funkcije bez argumenata. varijabla = ime_funkcije(); Zagrade () su obavezne, jer informiraju prevoditelj da je identifikator ime_funkcije ime funkcije, a ne nešto drugo (na pr. obična varijabla). Prog1 2016, 10. predavanje p. 31/95

32 Deklaracija funkcije Do sad smo odvojeno pisali funkciju i glavni program (main) u kojem se poziva funkcija. Pitanje: Kako se funkcije spajaju u cijeli program, tj. kojim redom se pišu funkcije u programu? Svaka bi funkcija, prije prvog poziva u programu, trebala biti deklarirana navodenjem tzv. prototipa. Mogućnost da se to ne napravi ostavljena je samo zbog kompatibilnosti s prastarim C programima, i ne treba ju koristiti! Osim toga, u jeziku C++ više nije dozvoljena. Zato: trebala bi mora! Prog1 2016, 10. predavanje p. 32/95

33 Deklaracija funkcije (nastavak) Dakle, jednostavno smatrajte da svaka funkcija mora biti deklarirana prije poziva u programu. Svrha deklaracije (prototipa) je kontrola ispravnosti svih poziva funkcije prilikom prevodenja programa. Deklaracija informira prevoditelj o: imenu funkcije, broju i tipu argumenata, te tipu vrijednosti kojeg funkcija vraća. U nastavku, kao primjer funkcije, koristimo varijantu funkcije ispisi_max, koja ispisuje maksimalni od dva realna broja (tipa double). Prog1 2016, 10. predavanje p. 33/95

34 Definicija funkcije kao deklaracija Ako je funkcija definirana u istoj datoteci u kojoj se poziva, i to prije prvog poziva te funkcije, onda definicija služi i kao deklaracija, pa posebna deklaracija nije potrebna. U svim ostalim slučajevima, funkcija se mora posebno deklarirati. Kako se to radi kad se funkcija nalazi u drugoj datoteci, bit će riječi u poglavlju Struktura programa na Prog2. Do tada, sve programe pišemo u jednoj datoteci. Prog1 2016, 10. predavanje p. 34/95

35 Primjer deklaracija nije potrebna Primjer. Funkcija je definirana prije prvog poziva (u main), tj. ispred funkcije main (v. p_maxd_1.c). #include <stdio.h> void ispisi_max(double x, double y) { double max; max = (x >= y)? x : y; printf(" Maksimalna vrijednost = %g\n", max); return; } Prog1 2016, 10. predavanje p. 35/95

36 Primjer deklaracija nije potrebna (nastavak) int main(void) { double x, y; } printf(" Unesite dva realna broja: "); scanf("%lg %lg", &x, &y); ispisi_max(x, y); return 0; U trenutku prvog poziva prevoditelj zna da je ispisi_max funkcija koja ima dva argumenta tipa double, i ne vraća ništa. Prog1 2016, 10. predavanje p. 36/95

37 Deklaracija ili prototip funkcije Ako definiciju funkcije smjestimo nakon poziva funkcije, moramo tu funkciju deklarirati prije prvog poziva. Deklaracija ili prototip funkcije ima oblik: tip_podatka ime_funkcije(tip_1 arg_1,..., tip_n arg_n); Dakle, deklaracija sadrži samo zaglavlje funkcije, bez bloka u kojem je tijelo funkcije. Imena argumenata arg_1,..., arg_n mogu biti izostavljena, jer se tip argumenata vidi i bez toga. tip_podatka ime_funkcije(tip_1,..., tip_n); Prog1 2016, 10. predavanje p. 37/95

38 Deklaracija ili prototip funkcije (nastavak) Deklaracije objekata istog tipa vrijednosti mogu se spojiti, slično kao za obične varijable. Primjer. int n, f(double), g(int, double); U ovoj deklaraciji, n je varijabla tipa int, a f i g su funkcije koje vraćaju vrijednost tipa int. Obično se deklaracija piše na početku datoteke, ili u funkciji u kojoj je poziv. Prog1 2016, 10. predavanje p. 38/95

39 Primjer deklaracija potrebna Primjer. Funkcija je definirana iza prvog poziva (u main), a deklaracija je unutar funkcije main (v. p_maxd_2.c). #include <stdio.h> int main(void) { double x, y; void ispisi_max(double, double); /* Dekl. */ } printf(" Unesite dva realna broja: "); scanf("%lg %lg", &x, &y); ispisi_max(x, y); return 0; Prog1 2016, 10. predavanje p. 39/95

40 Primjer deklaracija potrebna (nastavak) void ispisi_max(double x, double y) { double max; max = (x >= y)? x : y; printf(" Maksimalna vrijednost = %g\n", max); return; } U ovom primjeru, deklaracija (prototip) funkcije je void ispisi_max(double, double); Mogli smo napisati i void ispisi_max(double x, double y); Prog1 2016, 10. predavanje p. 40/95

41 Primjer deklaracija potrebna (nastavak) Primjer. Deklaracija funkcije može biti i izvan funkcije gdje je poziv na primjer, na početku datoteke (v. p_maxd_3.c). #include <stdio.h> void ispisi_max(double, double); /* Deklaracija */ int main(void) { double x, y; printf(" Unesite dva realna broja: "); scanf("%lg %lg", &x, &y); ispisi_max(x, y); return 0; } Prog1 2016, 10. predavanje p. 41/95

42 Primjer deklaracija potrebna (nastavak) void ispisi_max(double x, double y) { double max; max = (x >= y)? x : y; printf(" Maksimalna vrijednost = %g\n", max); return; } Prednost ove globalne deklaracije na početku datoteke, izvan svih funkcija: funkcija ispisi_max može se pozvati u svim funkcijama iza deklaracije. Ovo se često koristi za sve funkcije u programu (osim main), jer ne ovisi o poretku pisanja funkcija iza toga. Prog1 2016, 10. predavanje p. 42/95

43 Načini prijenosa argumenata Formalni i stvarni argumenti (ili parametri): Argumenti deklarirani u definiciji funkcije nazivaju se formalni argumenti. Izrazi koji se pri pozivu funkcije nalaze na mjestima formalnih argumenata nazivaju se stvarni argumenti. Veza izmedu formalnih i stvarnih argumenata uspostavlja se prijenosom argumenata prilikom poziva funkcije. Sasvim općenito, postoje dva načina prijenosa (ili predavanja) argumenata prilikom poziva funkcije: prijenos vrijednosti argumenata engl. call by value, prijenos adresa argumenata engl. call by reference. Prog1 2016, 10. predavanje p. 43/95

44 Prijenos argumenata po vrijednosti Kod prijenosa vrijednosti argumenata funkcija prima kopije vrijednosti stvarnih argumenata, što znači da funkcija ne može izmijeniti stvarne argumente. Stvarni argumenti mogu biti izrazi. Prilikom poziva funkcije, prvo se izračuna vrijednost tog izraza, a zatim se ta vrijednost prenosi u funkciju, i kopira u odgovarajući formalni argument. Prog1 2016, 10. predavanje p. 44/95

45 Prijenos argumenata po adresi Kod prijenosa adresa argumenata funkcija prima adrese stvarnih argumenata, što znači da funkcija može izmijeniti stvarne argumente, tj. sadržaje na tim adresama. Stvarni argumenti, u principu, ne mogu biti izrazi, već samo varijable, odnosno, objekti koji imaju adresu. Prog1 2016, 10. predavanje p. 45/95

46 Prijenos argumenata u C-u U C-u postoji samo prijenos argumenata po vrijednosti. Svaki formalni argument ujedno je i lokalna varijabla u toj funkciji. Stvarni argumenti u pozivu funkcije su izrazi (izračunaj vrijednost, kopiraj ju u formalni argument). Ako funkcijom želimo promijeniti vrijednost nekog podatka (tzv. varijabilni argument ), pripadni argument treba biti pokazivač na taj podatak, tj. njegova adresa! Tada se adresa prenosi po vrijednosti kopira u funkciju (promjena te kopije ne mijenja stvarnu adresu), ali smijemo promijeniti sadržaj na toj adresi, koristeći operator dereferenciranja *. Prog1 2016, 10. predavanje p. 46/95

47 Primjer prijenos po vrijednosti Primjer. Prijenos argumenata po vrijednosti. #include <stdio.h> void f(int x) { x += 1; printf("unutar funkcije: x = %d\n", x); return; } Funkcija f povećava vrijednost argumenta za 1. Medutim, to povećanje x za 1 dogada se u lokalnoj varijabli x, pa nema traga izvan funkcije f. Prog1 2016, 10. predavanje p. 47/95

48 Primjer prijenos po vrijednosti (nastavak) int main(void) { int x = 5; printf("prije poziva: f(x); printf("nakon poziva: return 0; } x = %d\n", x); x = %d\n", x); Rezultat izvršavanja programa (arg1_1.c) je: Prije poziva: x = 5 Unutar funkcije: x = 6 Nakon poziva: x = 5 Prog1 2016, 10. predavanje p. 48/95

49 Primjer prijenos po adresi Primjer. Prijenos argumenata po adresi preko pokazivača. Jednostavno, u funkciji f, svagdje dodamo * ispred x. void f(int *x) { *x += 1; printf("unutar funkcije: x = %d\n", *x); return; } Ovdje povećavamo sadržaj na adresi x za 1, pa ima traga izvan funkcije f. Pokazivač (adresa) je lokalna varijabla x. Promjena te varijable (tj. adrese) i dalje nema traga izvan funkcije f. Prog1 2016, 10. predavanje p. 49/95

50 Primjer prijenos po adresi (nastavak) U prvom primjeru void f(int x) x je lokalna varijabla tipa int. U drugom primjeru void f(int *x) x je lokalna varijabla tipa int *, tj. pokazivač na int. Nije lijepo da se razne stvari isto zovu! Na primjer, ime px je puno bolje u drugom primjeru, zato da asocira na pokazivač. void f(int *px) { *px += 1; printf("unutar funkcije: x = %d\n", *px); return; } Prog1 2016, 10. predavanje p. 50/95

51 Primjer prijenos po adresi (nastavak) int main(void) { int x = 5; printf("prije poziva: x = %d\n", x); f(&x); /* Stvarni argument je pokazivac. */ printf("nakon poziva: x = %d\n", x); return 0; } Rezultat izvršavanja programa (arg1_2.c, arg1_3.c) je: Prije poziva: x = 5 Unutar funkcije: x = 6 Nakon poziva: x = 6 Prog1 2016, 10. predavanje p. 51/95

52 Primjer završni komentar o pozivima Kod prijenosa po vrijednosti, poziv funkcije f u glavnom programu može glasiti i ovako: f(x + 2); tj. stvarni argument smije biti izraz. Za razliku od toga, kod prijenosa adrese, poziv funkcije f u glavnom programu ne smije biti: f(&(x + 2)); jer izraz nema adresu (v. arg1_4.c)! Ali, smije se napisati f(&x + 2); aritmetika pokazivača! Sami pogledajte sljedeća dva primjera (arg2_1.c, arg2_2.c). Prog1 2016, 10. predavanje p. 52/95

53 Primjer 2 (zadaća) prijenos po vrijednosti #include <stdio.h> void f(int x, int y) { x += y; y += x; printf("unutar funkcije: x=%d, y=%d\n", x, y); return; } int main(void) { int x = 2, y = 3; printf("prije poziva: x=%d, y=%d\n", x, y); f(y, x + y); printf("nakon poziva: x=%d, y=%d\n", x, y); return 0; } Ispisane vrijednosti: Prog1 2016, 10. predavanje p. 53/95

54 Primjer 2 (zadaća) prijenos po adresi #include <stdio.h> void f(int *x, int *y) { *x += *y; *y += *x; printf("unutar funkcije: x=%d, y=%d\n", *x, *y); return; } int main(void) { int x = 2, y = 3, z; z = x + y; printf("prije poziva: x=%d, y=%d\n", x, y); f(&y, &z); printf("nakon poziva: x=%d, y=%d\n", x, y); return 0; } Ispisane vrijednosti: Koliko je z na kraju? Prog1 2016, 10. predavanje p. 54/95

55 Pravila o argumentima Pravila pri prijenosu argumenata: Broj stvarnih argumenata pri svakom pozivu funkcije mora biti jednak broju formalnih argumenata. Ako je funkcija ispravno deklarirana, tj. prevoditelj pri pozivu zna broj i tip argumenata, stvarni argumenti čiji se tip razlikuje od tipa odgovarajućih formalnih argumenta, pretvaraju se u tip formalnih argumenata, isto kao kod pridruživanja. Redosljed izračunavanja stvarnih argumenata nije definiran i ovisi o implementaciji. Dakle, ne mora biti L D. Ponekad je obratan! Prog1 2016, 10. predavanje p. 55/95

56 Poziv funkcije pretvaranje tipova Primjer. Funkcija sqrt iz zaglavlja <math.h> ima prototip double sqrt(double); Nakon #include <math.h>, poziv funkcije sqrt može biti: int x; double y;... y = sqrt(2 * x - 3); Vrijednost izraza 2 * x - 3 je tipa int. Kod poziva, prvo se ta vrijednost pretvara u double, a zatim se prenosi u funkciju. Varijabla y korektno poprima double vrijednost 2x 3. Prog1 2016, 10. predavanje p. 56/95

57 Funkcije bez prototipa NE KORISTITI Ako zaboravite deklaraciju da znate što se onda zbiva! U programu se mogu koristiti i funkcije koje nisu prethodno deklarirane. U tom slučaju vrijedi: Prevoditelj pretpostavlja da funkcija vraća podatak tipa int i ne pravi nikakve pretpostavke o broju i tipu argumenata. Na svaki stvarni argument cjelobrojnog tipa primjenjuje se integralna promocija (pretvaranje argumenata tipa short i char u int), a svaki stvarni argument tipa float pretvara se u double. Broj i tip (pretvorenih) stvarnih argumenata mora se podudarati s brojem i tipom formalnih argumenata, da bi poziv bio korektan. Prog1 2016, 10. predavanje p. 57/95

58 Primjer funkcija s prototipom Primjer. Probajte s x = 2.0 (kao što piše) i s x = 2.5. #include <stdio.h> int f(double); /* Kljucno - ima prototip! */ int main(void) { float x = 2.0; /* double const --> float */ printf("%d\n", f(2)); /* int --> double */ printf("%d\n", f(x)); /* float --> double */ return 0; } int f(double x) { return (int) x*x; /* int * double --> int */ } Prog1 2016, 10. predavanje p. 58/95

59 Primjer komentar rezultata (prioriteti) Naredba return u funkciji f glasi: return (int) x*x; /* int * double --> int */ Uočite da (int) x*x nije isto što i (int) (x*x). Unarni operator promjene tipa (int) ima viši prioritet od množenja, pa se izraz (int) x*x svodi na int * double i tip vrijednosti je double. Tek na kraju ide pretvaranje u navedeni tip rezultata int. Za x = 2.5 dobivamo (int) x*x = 2 * 2.5 = 5.0, pa je f(2.5) = 5, (int) (x*x) = (int) 6.25 = 6. Prog1 2016, 10. predavanje p. 59/95

60 Primjer funkcija bez prototipa Primjer. Funkcija f stvarno vraća tip int.... /* Nema prototip za f */ int main(void) { float x = 2.0; /* double const --> float */ printf("%d\n", f(2)); /* greska u izvodjenju */ printf("%d\n", f(x)); /* O.K. */ return 0; } int f(double x) { /* tip odgovara pretpostavci */ return (int) x*x; /* int * double --> int */ } Poziv f(2) šalje samo 4 bajta u f za x rezultat je smeće. Prog1 2016, 10. predavanje p. 60/95

61 Primjer funkcija bez prototipa (nastavak) Primjer. Funkcija f stvarno vraća tip double, a ne int.... /* Nema prototip za f */ int main(void) { float x = 2.0; /* double const --> float */ printf("%d\n", f(x)); /* O.K. */ return 0; } double f(double x) { /* greska u prevodjenju: redefinicija simbola f iz int u double */ return x*x; } Prog1 2016, 10. predavanje p. 61/95

62 Primjeri funkcija za algoritme na cijelim brojevima Prog1 2016, 10. predavanje p. 62/95

63 Sadržaj Primjeri funkcija za algoritme na cijelim brojevima: Broj znamenki cijelog broja. Provjera znamenki broja. Najveća zajednička mjera Euklidov algoritam. Potencija broja 2. Prog1 2016, 10. predavanje p. 63/95

64 Broj znamenki broja Primjer. Treba naći broj znamenki nenegativnog cijelog broja n u zadanoj bazi b. Algoritam za brojanje znamenki (od prošli puta) je: brisanje znamenki i to straga, i brojanje obrisanih znamenki. Prog1 2016, 10. predavanje p. 64/95

65 Broj znamenki broja u zadanoj bazi (nastavak) Bitni odsječak programa je izgledao ovako: unsigned int b = 10, n, broj_znam;... broj_znam = 0; while (n > 0) { ++broj_znam; n /= b; } printf(" ima %u znamenki u bazi %u\n", broj_znam, b); Prog1 2016, 10. predavanje p. 65/95

66 Broj znamenki broja u zadanoj bazi (nastavak) Kod realizacije funkcijom, destrukcija ulaznog broja n nije problem, jer uništavamo lokalnu varijablu! unsigned int broj_znamenki(unsigned int n, unsigned int b) { unsigned int broj_znam = 0; } while (n > 0) { ++broj_znam; n /= b; } return broj_znam; Prog1 2016, 10. predavanje p. 66/95

67 Provjera znamenki broja Primjer. Zadan je nenegativni cijeli broj n. Treba naći odgovor na pitanje postoji li znamenka tog broja koja je jednaka 5 (u zadanoj bazi b = 10). Traženu znamenku zovemo trazena. Koristimo skraćeni algoritam provjere, koji idealno odgovara realizaciji funkcijom: čim saznamo odgovor odmah se vratimo! Prog1 2016, 10. predavanje p. 67/95

68 Postoji znamenka...? (nastavak) Bitni odsječak programa je izgledao ovako: odgovor = 0; /* NE, laz */ while (n > 0) { znam = n % b; if (znam == trazena) { odgovor = 1; break; } n /= b; } Prog1 2016, 10. predavanje p. 68/95

69 Postoji znamenka...? (nastavak) Odgovarajuća funkcija je: int odgovor(unsigned int n, unsigned int b, unsigned int trazena) { while (n > 0) { if (n % b == trazena) return 1; n /= b; } return 0; } Za prekid petlje, umjesto break, odmah pišemo return s odgovorom. Prog1 2016, 10. predavanje p. 69/95

70 Najveća zajednička mjera Primjer. Treba naći najveću zajedničku mjeru M(a, b), cijelih brojeva a i b, uz pretpostavku da je b 0. Algoritam se bazira na Euklidovom teoremu o dijeljenju a = q b+r, za neki q Z, gdje je r ostatak, 0 r < b. Ključni koraci: Ako d a i d b, onda d r, pa je M(a,b) = M(b,r) ( smanjujemo argumente, po apsolutnoj vrijednosti). Ako je r = 0, onda je a = q b, pa je M(a,b) = b (kraj). Prog1 2016, 10. predavanje p. 70/95

71 Najveća zajednička mjera (nastavak) Dio programa koji računa M(a,b) (u komentaru je promjena za rezultat M(a,b) > 0): int a, b, ostatak, mjera;... while (1) { ostatak = a % b; if (ostatak == 0) { mjera = b; // mjera = abs(b); break; } a = b; b = ostatak; } Prog1 2016, 10. predavanje p. 71/95

72 Najveća zajednička mjera (nastavak) Odgovarajuća funkcija koja vraća M(a, b): int euklid(int a, int b) { int ostatak; } while (1) { ostatak = a % b; if (ostatak == 0) return b; a = b; b = ostatak; } // return abs(b); Prog1 2016, 10. predavanje p. 72/95

73 Potencija broja 2 Primjer. Za zadani nenegativni cijeli broj n treba naći odgovor na pitanje je li broj n potencija broja d = 2, tj. može li se n prikazati u obliku n = d k, s tim da je eksponent k > 0? Odgovarajuća funkcija mora vratiti: odgovor na pitanje kao povratnu vrijednost funkcije, i eksponent k kroz varijabilni argument. Dakle, pripadni argument za k mora biti pokazivač adresa varijable u koju želimo spremiti k. Prog1 2016, 10. predavanje p. 73/95

74 Potencija broja 2 (nastavak) Bitni odsječak programa je izgledao ovako: unsigned int n, d = 2, k, odgovor; k = 0; /* Sve dok je n djeljiv s d, podijeli ga s d. */ while (n % d == 0) { ++k; n /= d; } /* mora ostati n == 1 */ odgovor = n == 1 && k > 0; Prog1 2016, 10. predavanje p. 74/95

75 Potencija broja 2 (nastavak) Odgovarajuća funkcija: int odgovor(unsigned int n, unsigned int d, unsigned int *pk) { unsigned int k = 0; } while (n % d == 0) { ++k; n /= d; } *pk = k; return n == 1 && k > 0; Prog1 2016, 10. predavanje p. 75/95

76 Rekurzivne funkcije Prog1 2016, 10. predavanje p. 76/95

77 Rekurzivne funkcije Programski jezik C dozvoljava tzv. rekurzivne funkcije, tj. da funkcija poziva samu sebe. U pravilu, rekurzivni algoritmi su kraći, ali izvodenje, u načelu, traje dulje. Katkad puno dulje, ako puno puta računamo istu stvar. Zato oprez! Napomena. Svaki rekurzivni algoritam mora imati nerekurzivni dio, koji omogućava prekidanje rekurzije. Najčešće je to neki if u inicijalizaciji rekurzije. Prog1 2016, 10. predavanje p. 77/95

78 Primjer rekurzivne funkcije faktorijele Primjer. Za računanje faktorijela n! = n = n (n 1)! možemo napisati rekurzivnu funkciju (v. fakt_r.c): long int fakt(int n) { if (n <= 1) return 1L; else return n * fakt(n - 1); } Ali, nemojte to raditi. Zabranjujem! Prog1 2016, 10. predavanje p. 78/95

79 Faktorijele rekurzivno (nastavak) Za n = 4, slika rekurzivnih poziva funkcije izgleda ovako: f(4) f(4) 4f(3) = 24 f(3) f(3) 3f(2) = 6 f(2) f(2) 2f(1) = 2 f(1) f(1) = 1 Osnovni nedostatak ovog primjera: pozivi su linearni i ništa pametno ne rade. Ukupno je potrebno n poziva funkcije da se izračuna n! (uključivo i polazni vanjski poziv). Prog1 2016, 10. predavanje p. 79/95

80 Faktorijele bez rekurzije To ide puno brže nerekurzivno, bez svih tih silnih poziva. Faktorijele, naravno, možemo izračunati u jednoj petlji. Varijanta sa silaznom petljom po n je (v. fakt_p.c): long int fakt(int n) { long int f = 1L; for (; n > 1; --n) f *= n; return f; } To je bitno efikasnije, jer trebamo samo jedan poziv funkcije. Sve ostalo (tj. množenja) traje podjednako kao u rekurziji! Prog1 2016, 10. predavanje p. 80/95

81 Faktorijele bez rekurzije (nastavak) Varijanta s uzlaznom petljom do n, ali trebamo pomoćnu varijablu za faktor u petlji (v. fakt_p1.c): long int fakt(int n) { long int f = 1L; int i; for (i = 2; i <= n; ++i) f *= i; return f; } Drugi klasični primjer kad rekurziju ne treba koristiti su Fibonaccijevi brojevi definirani ovako: F 0 = 0, F 1 = 1, i F i = F i 1 +F i 2, za i 2. Detaljno objašnjenje u Prog2. Prog1 2016, 10. predavanje p. 81/95

82 Primjer rekurzivne funkcije prikaz broja u bazi Primjer. Treba ispisati prikaz prirodnog broja n u zadanoj bazi b sve njegove znamenke, od vodeće do najniže. Što ga to ima s rekurzijom? Polako... Ima štos baš za rekurziju. Ispis znamenki broja mora ići slijeva nadesno ( ), tj. treba početi sprijeda od vodeće znamenke. To znači da prvo treba doći do vodeće znamenke, pa onda ići unatrag. S druge strane, znamenke broja se puno lakše skidaju straga. Medutim, to je naopako od redosljeda za ispis. Prog1 2016, 10. predavanje p. 82/95

83 Prikaz broja u bazi (nastavak) Zato koristimo linearnu rekurziju. Svaki poziv funkcije skine i zapamti svoju znamenku, a piše tu znamenku tek nakon rekurzivnog poziva. Tako jednostavno dobivamo naopaki ispis! Algoritam. Ispis znamenki broja n u bazi b: prvo ispiši sve znamenke od n, osim zadnje, tj. ispiši sve znamenke broja n div b u bazi b (rekurzija), zatim, ispiši zadnju znamenku n mod b. Naravno, to radimo samo ako je n > 0, tj. ima znamenki. Radi jednostavnosti, uzimamo da je b 10, zato da znamenke budu obične numeričke. Prog1 2016, 10. predavanje p. 83/95

84 Prikaz broja u bazi (nastavak) Argumenti funkcije su trenutni broj n i baza b. #include <stdio.h> void ispis_u_bazi(unsigned int n, unsigned int b) { if (n > 0) { ispis_u_bazi(n / b, b); printf("%u", n % b); } return; } Napomena. Bazu b bi trebalo izbaciti, jer se ne mijenja, ali još ne znamo za globalne varijable. Prog1 2016, 10. predavanje p. 84/95

85 Prikaz broja u bazi (nastavak) Glavni program za bazu b = 10 (v. prikaz_1.c): int main(void) { unsigned int b = 10, n; printf(" Upisi nenegativni broj n: "); scanf("%u", &n); printf("\n Prikaz broja %u u bazi %u: ", n, b); ispis_u_bazi(n, b); printf("\n"); return 0; } Za ulaz: , rezultat je: Prikaz broja u bazi 10: Prog1 2016, 10. predavanje p. 85/95

86 Prikaz broja u bazi (nastavak) Glavni program za bazu b = 2 (v. prikaz_2.c): int main(void) { unsigned int b = 2, n; printf(" Upisi nenegativni broj n: "); scanf("%u", &n); printf("\n Prikaz broja %u u bazi %u: ", n, b); ispis_u_bazi(n, b); printf("\n"); return 0; } Za ulaz: 12, rezultat je: Prikaz broja 12 u bazi 2: 1100 Prog1 2016, 10. predavanje p. 86/95

87 Prikaz broja u bazi (nastavak) Pogledajmo kako točno idu pozivi funkcije za n = 12 i b = 2. Prvi (vanjski) poziv: ispis_u_bazi(12, 2) lokalno: n = 12, n / b = 6, znamenka n % b = 0. Drugi poziv: ispis_u_bazi(6, 2) lokalno: n = 6, n / b = 3, znamenka n % b = 0. Treći poziv: ispis_u_bazi(3, 2) lokalno: n = 3, n / b = 1, znamenka n % b = 1. Četvrti poziv: ispis_u_bazi(1, 2) lokalno: n = 1, n / b = 0, znamenka n % b = 1. Peti poziv: ispis_u_bazi(0, 2) odmah se vrati! Uočite da ispis znamenke n % b ide unatraške, nakon povratka iz prethodnog poziva baš u tom je štos! Prog1 2016, 10. predavanje p. 87/95

88 Prikaz broja u bazi zadaci Zadatak. Ako je n = 0, onda naša funkcija ne piše ništa (nema znamenki). Modificirajte funkciju tako da napiše znamenku 0 za n = 0. Oprez, to hoćemo samo kad je ulazni broj n baš jednak 0, tj. ne želimo dodati vodeću nulu svim ostalim brojevima n > 0! Zadatak. Napravite proširenje na veće baze, tako da znamenke mogu biti i slova (to ide do trideset i nešto), ili se znamenke u bazi b pišu kao dekadski brojevi, ali ih onda odvajamo prazninom. Prog1 2016, 10. predavanje p. 88/95

89 Rekurzivne funkcije pravi primjeri Pravi primjeri rekurzivnih algoritama i funkcija su: quicksort i mergesort algoritmi za sortiranje, Hanojski tornjevi, particije broja u pribrojnike. Sve ove algoritme napravit ćemo u drugom semestru većinu odmah na početku, a mergesort kad dodemo na vezane liste. Još nekoliko primjera rekurzivnih algoritama: obrada binarnih stabala i drugih sličnih struktura, sintaktička analiza programa, po gramatičkim pravilima jezika (tzv. parser ). Prog1 2016, 10. predavanje p. 89/95

90 Funkcije s varijabilnim brojem argumenata Već ste vidjeli da funkcije scanf i printf imaju varijabilni broj argumenata. Datoteka zaglavlja <stdarg.h> sadrži niz definicija i makro naredbi koje i nama omogućavaju pisanje funkcija s varijabilnim brojem argumenata. Opširnije u skripti i knjizi KR2. Prog1 2016, 10. predavanje p. 90/95

91 Zadaci o funkcijama Prog1 2016, 10. predavanje p. 91/95

92 Zadaci iz funkcija na cijelim brojevima Zadaci za funkcije s cijelim brojevima: Prebacite u funkcije ostale primjere od prošli puta. Najmanji djelitelj broja, strogo veći od 1 (ako ga ima). Najveći djelitelj strogo manji od broja (ako ga ima). Provjera je li broj prost (n = 1 nije prost). Najmanji/najveći prosti faktor broja (ako ga ima). Dodatak: vratiti i pripadnu potenciju iz rastava broja na proste faktore, kroz varijabilni argument, preko pokazivača. Najmanji prosti broj p veći od zadanog. Najveći prosti broj p manji od zadanog (ako ga ima). Prog1 2016, 10. predavanje p. 92/95

93 Zadaci iz funkcija na cijelim brojevima (nast.) Broj koji se iz n dobiva cikličkom rotacijom njegovih binarnih znamenki za k mjesta udesno, odnosno, ulijevo. Realizacija dijeljenjem/množenjem potencijama od 2, ili operatorima << i >>. Prog1 2016, 10. predavanje p. 93/95

94 Zadaci iz funkcija na realnim brojevima Zadaci za funkcije s realnim brojevima: Najveći cijeli broj manji ili jednak od x, tj. x. Najmanji cijeli broj veći ili jednak od x, tj. x. U matematičkoj biblioteci <math.h> postoje funkcije za to. Zovu se floor i ceil, ali vraćaju vrijednost tipa double, a ne tipa int! Razmislite kako biste signalizirali grešku ako je ulazni broj x tipa double, a korektni rezultat nije prikaziv u tipu int. Razlomljeni dio (nenegativnog) realnog broja x, tj. broj x x. Prog1 2016, 10. predavanje p. 94/95

95 Zadaci iz funkcija na realnim brojevima (nast.) Potenciranje cjelobrojnim eksponentom, tj. za zadane x i n, treba vratiti x n (uz kontrolu greške). Probajte to napraviti bez funkcije pow iz zaglavlja <math.h>. Spora varijanta je ponovljeno množenje. Na pr. x 6 = x x x x x x. Puno brža varijanta je tzv. ponovljeno kvadriranje i množenje, ili binarno potenciranje iz binarnog zapisa eksponenta n. Na pr., 6 = (110) 2, pa je x 6 = ((x 2 ) x) 2 = (x 2 ) (x 2 ) 2. Pogledajte vježbe (zadatak ) i dodatak ovom predavanju. Prog1 2016, 10. predavanje p. 95/95

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4 Programiranje 2 0. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/48 Sadržaj predavanja Ponavljanje onog dijela C-a koji

Више

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6 Programiranje 1 9. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/60 Sadržaj predavanja Osnovni algoritmi na cijelim brojevima:

Више

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2 Programiranje 2 doc.dr.sc. Goranka Nogo PMF Matematički odsjek, Zagreb Kontakt ured: 228, drugi kat e-mail: nogo@math.hr konzultacije: četvrtak, 12:00-14:00 petak, 11:00-12:00 neki drugi termin, uz prethodni

Више

Funkcije predavač: Nadežda Jakšić

Funkcije predavač: Nadežda Jakšić Funkcije predavač: Nadežda Jakšić funkcije delovi programa koji izvršavaju neki zadatak, celinu; dele na ugrađene, korisničke i main funkciju ugrađene funkcije printf,scanf... da bi se one izvršile potrebno

Више

070-ALIP2-udzbenik.indb

070-ALIP2-udzbenik.indb 0. U uvodnom ćemo poglavlju ponoviti osnove programskog jezika C s kojima smo se susreli u. razredu. U kratkom pregledu navedeni su operatori (aritmetički, relacijski i logički), neke od funkcija iz biblioteka

Више

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2 Ulaz i izlaz podataka Ulaz i izlaz podataka Nakon odslušanog bit ćete u stanju: navesti sintaksu naredbi za unos/ispis znakova znakovnih nizova cijelih brojeva realnih brojeva jednostruke i dvostruke preciznosti

Више

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj Programiranje 1 5. predavanje dodatak Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanje dodatak p. 1/60 Sadržaj predavanja dodatka Primjeri

Више

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje, te službeni šalabahter. Kalkulatori, mobiteli, razne neslužbene tablice, papiri i sl., nisu dozvoljeni! Sva rješenja napišite

Више

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje, Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje, te službeni podsjetnik. Kalkulatori, mobiteli, razne neslužbene tablice, papiri i sl., nisu dozvoljeni! Sva rješenja napišite

Више

Funkcije predavač: Nadežda Jakšić

Funkcije predavač: Nadežda Jakšić Funkcije predavač: Nadežda Jakšić do sada su korišćene "gotove" funkcije iz standardnih biblioteka (cin, cout...) one su pozivane iz main funkcije koja je glavna funkcija u programu jer izvršavanje programa

Више

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 07 - Podstrukture, const, reference v2018/2019. Sastavio: Zvonimir Bujanović Podstrukture Član

Више

Programiranje 2 1. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 1. predavanje p. 1/7

Programiranje 2 1. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 1. predavanje p. 1/7 Programiranje 2 1. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 1. predavanje p. 1/75 Dobar dan, dobro došli Prog2 2019, 1. predavanje

Више

Oblikovanje i analiza algoritama 5. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 5. pr

Oblikovanje i analiza algoritama 5. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 5. pr Oblikovanje i analiza algoritama 5. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 5. predavanje p. 1/68 Sadržaj predavanja Nehomogene rekurzije

Више

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić projektni zadatak projektovanje programa (algoritmi) pisanje programskog koda, izvorni kod,

Више

Programiranje 1 3. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/1

Programiranje 1 3. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/1 Programiranje 1 3. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/132 Sadržaj predavanja Osnovni tipovi podataka u računalu

Више

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2 Datoteke nastavak Funkcija fgets Funkcija koja učitava podatke iz datoteke, liniju po liniju, je char *fgets(char *str, int n, FILE *fp); gdje su str pokazivač na dio memorije (string) u koji će ulazna

Више

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2 Pokazivači Pointeri Definicija pokazivača Pokazivač na tip je varijabla koja sadrži adresu varijable tipa tip. Definicija pokazivača: mem_klasa tip * p_var; Primjer: static int * pi; double *px; char*

Више

Slide 1

Slide 1 OSNOVNI POJMOVI Naredba je uputa računalu za obavljanje određene radnje. Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Pisanje programa zovemo programiranje. Programski jezik

Више

Programiranje 1 3. predavanje prošireno Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 3. predava

Programiranje 1 3. predavanje prošireno Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 3. predava Programiranje 1 3. predavanje prošireno Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 3. predavanje prošireno p. 1/120 Sadržaj proširenog predavanja

Више

ALIP1_udzb_2019.indb

ALIP1_udzb_2019.indb Razmislimo Kako u memoriji računala prikazujemo tekst, brojeve, slike? Gdje se spremaju svi ti podatci? Kako uopće izgleda memorija računala i koji ju elektronički sklopovi čine? Kako biste znali odgovoriti

Више

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Računarski praktikum I - Vježbe 03 - Implementacija strukture string Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 03 - Implementacija strukture string v2018/2019. Sastavio: Zvonimir Bujanović Stringovi u C-u String

Више

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije korake. Uz dobro razrađen algoritam neku radnju ćemo

Више

Računarski praktikum I - Vježbe 01 - Uvod

Računarski praktikum I - Vježbe 01 - Uvod Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 01 - Uvod v2018/2019. Sastavio: Zvonimir Bujanović Gradivo i način polaganja Gradivo: osnove jezika

Више

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7 Programiranje 2 7. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/75 Sadržaj predavanja Tipovi i složene deklaracije:

Више

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Microsoft PowerPoint - Bitovi [Compatibility Mode] Оператори над битовима (Јаничић, Марић: Програмирање 2, тачка 5.6) Оператори за рад са појединачним битовима Само на целобројне аргументе: ~ битовска негација & битовска конјункција (и) битовска (инклузивна)

Више

Programski jezik C

Programski jezik C Pojam funkcije Deklaracija i definicija funcije Poziv funkcije Memorijske klase promjenljivih Primjeri. Za kompajliranje koda koristen DEV-C++ 4.9.9.2 Compiler!!!! Moze is koristiti I bilo koji drugi standardni

Више

Programiranje 1 IEEE prikaz brojeva sažetak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, IEEE p

Programiranje 1 IEEE prikaz brojeva sažetak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, IEEE p Programiranje IEEE prikaz brojeva sažetak Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog 208, IEEE prikaz brojeva sažetak p. /4 Sadržaj predavanja IEEE standard

Више

Oblikovanje i analiza algoritama 4. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 4. pr

Oblikovanje i analiza algoritama 4. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 4. pr Oblikovanje i analiza algoritama 4. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 4. predavanje p. 1/69 Sadržaj predavanja Složenost u praksi

Више

2015_k2_z12.dvi

2015_k2_z12.dvi OBLIKOVANJE I ANALIZA ALGORITAMA 2. kolokvij 27. 1. 2016. Skice rješenja prva dva zadatka 1. (20) Zadano je n poslova. Svaki posao je zadan kao vremenski interval realnih brojeva, P i = [p i,k i ],zai

Више

Grananje u programu predavač: Nadežda Jakšić

Grananje u programu predavač: Nadežda Jakšić Grananje u programu predavač: Nadežda Jakšić u okviru linijske strukture izvršavaju se sve naredbe u okviru razgranate strukture uvek se ispituje neki uslov; u zavisnosti od toga da li je uslov ispunjen

Више

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language Niz (array) Nizovi Niz je lista elemenata istog tipa sa zajedničkim imenom. Redosled elemenata u nizovnoj strukturi je bitan. Konkretnom elementu niza pristupa se preko zajedničkog imena niza i konkretne

Више

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007 Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007 2 Sadržaj 1 Programski jezik C 5 1.1 Oblast važenja lokalnih promenljivih..........................

Више

Državna matura iz informatike

Državna matura iz informatike DRŽAVNA MATURA IZ INFORMATIKE U ŠK. GOD. 2013./14. 2016./17. SADRŽAJ Osnovne informacije o ispitu iz informatike Područja ispitivanja Pragovi prolaznosti u 2014./15. Primjeri zadataka po područjima ispitivanja

Више

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode] Сложеност алгоритама (Програмирање 2, глава 3, глава 4-4.3) Проблем: класа задатака истог типа Велики број различитих (коректних) алгоритама Величина (димензија) проблема нпр. количина података које треба

Више

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Microsoft PowerPoint - Datoteke [Compatibility Mode] Датотеке стандардни улаз / излаз Датотека је именовани низ знакова (бајтова) У програмском језику C датотека је везана за улаз и излаз података функције стандардне библиотеке Најједностaвније

Више

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode] Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 03 Zvonimir Bujanović Slaven Kožić Vinko Petričević Mrežno programiranje: SocketAPI Programiramo u aplikacijskom sloju, za ostale se brinu

Више

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime Test ispravio: () () Ukupan broj bodova:. veljače 04. od 3:00 do 4:00 Ime i prezime Razred Škola Županija Mentor Sadržaj Upute za natjecatelje... Zadaci... Upute za natjecatelje Vrijeme pisanja: 60 minuta

Више

Računarski praktikum I - Vježbe 09 - this, static

Računarski praktikum I - Vježbe 09 - this, static Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 09 - this, static v2018/2019. Sastavio: Zvonimir Bujanović Pokazivač this Kako funkcija članica

Више

PowerPoint Presentation

PowerPoint Presentation V Unos i prikaz podataka Programi čitaju i ispisuju podatke sa spoljašnjih uređaja Postoji prolazni U/I (tastatura i monitor) i trajni U/I podataka (fajlovi) printf i scanf pišu/čitaju na monitor ili sa

Више

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p 1 Rezultati i uvidi u kolokvije: Rezultati u petak 3.5. navečer na webu a uvidi u ponedjeljak 6.5. u 16 sati. Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje te službeni podsjetnik.

Више

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi 3. siječnja 0. od 3:00 do 4:00 RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovitelji Sadržaj Zadaci. 4.... Zadaci 5. 0.... 3 od 8 Zadaci. 4. U sljedećim pitanjima na pitanja odgovaraš upisivanjem

Више

Teorija skupova - blog.sake.ba

Teorija skupova - blog.sake.ba Uvod Matematika je jedan od najomraženijih predmeta kod većine učenika S pravom, dakako! Zapitajmo se šta je uzrok tome? Da li je matematika zaista toliko teška, komplikovana? Odgovor je jednostavan, naravno

Више

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost 1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar. 1.. Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred. 1.7. Bodovna vrijednost (ECTS) 7 1.3. Suradnici 1.8. Način izvođenja nastave

Више

Numerička matematika 11. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb NumMat 2019, 11. p

Numerička matematika 11. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb NumMat 2019, 11. p Numerička matematika 11. predavanje dodatak Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb NumMat 2019, 11. predavanje dodatak p. 1/46 Sadržaj predavanja dodatka

Више

Microsoft Word - 11 Pokazivaci

Microsoft Word - 11 Pokazivaci Pokazivači U dosadašnjem radu smo imali prilike da koristimo promenljive koje smo deklarisali na početku nekog bloka. Prilikom deklaracije promenljiva dobija jedinstveni naziv i odgovarajući prostor u

Више

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode] Osnove programiranja Funkcije - Metode Prenos parametara Po vrednosti Po referenci Po izlazu Sadržaj Opseg važenja promenljive u drugim strukturama Rekurzije Prenos parametara Metoda može vratiti isključivo

Више

PowerPoint Presentation

PowerPoint Presentation Tehnička škola 9. maj Bačka Palanka Programiranje III razred Tok izvršavanja programa Tok izvršavanja programa Dosadašnji kod se izvršavao praktično linearno. Nije postojala nikakva uslovna ili brojačka

Више

Matematika 1 - izborna

Matematika 1 - izborna 3.3. NELINEARNE DIOFANTSKE JEDNADŽBE Navest ćemo sada neke metode rješavanja diofantskih jednadžbi koje su drugog i viših stupnjeva. Sve su te metode zapravo posebni oblici jedne opće metode, koja se naziva

Више

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan realan broj od 0 i 1. Na standardni izlaz ispisati

Више

PowerPoint Presentation

PowerPoint Presentation SVEUČILIŠTE U ZAGREBU Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Vukelićeva 4, Zagreb, HRVATSKA Računalstvo Operatori, pisanje izraza i osnove pseudokôda Izv. prof. dr. sc. Edouard

Више

SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Ivana Šore REKURZIVNOST REALNIH FUNKCIJA Diplomski rad Voditelj rada: doc.

SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Ivana Šore REKURZIVNOST REALNIH FUNKCIJA Diplomski rad Voditelj rada: doc. SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Ivana Šore REKURZIVNOST REALNIH FUNKCIJA Diplomski rad Voditelj rada: doc.dr.sc. Zvonko Iljazović Zagreb, rujan, 2015. Ovaj diplomski

Више

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL 2. kolokvij 29. lipnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1. (

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL 2. kolokvij 29. lipnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1. ( MJERA I INTEGRAL. kolokvij 9. lipnja 018. (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni! 1. (ukupno 6 bodova Neka je (, F, µ prostor s mjerom, neka je (f n n1 niz F-izmjerivih funkcija

Више

Microsoft Word - 6ms001

Microsoft Word - 6ms001 Zadatak 001 (Anela, ekonomska škola) Riješi sustav jednadžbi: 5 z = 0 + + z = 14 4 + + z = 16 Rješenje 001 Sustav rješavamo Gaussovom metodom eliminacije (isključivanja). Gaussova metoda provodi se pomoću

Више

PROMENLJIVE, TIPOVI PROMENLJIVIH

PROMENLJIVE, TIPOVI PROMENLJIVIH PROMENLJIVE, TIPOVI PROMENLJIVIH Šta je promenljiva? To je objekat jezika koji ima ime i kome se mogu dodeljivati vrednosti. Svakoj promenljivoj se dodeljuje registar (memorijska lokacija) operativne memorije

Више

8 2 upiti_izvjesca.indd

8 2 upiti_izvjesca.indd 1 2. Baze podataka Upiti i izvješća baze podataka Na početku cjeline o bazama podataka napravili ste plošnu bazu podataka o natjecanjima učenika. Sada ćete izraditi relacijsku bazu u Accessu o učenicima

Више

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar 2016 1 Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova strategija rekurzivno razbija problem na 2 ili više potproblema

Више

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language Deklaracija promenljivih Inicijalizacija promenljivih Deklaracija promenljive obuhvata: dodelu simboličkog imena promenljivoj i određivanje tipa promenljive (tip određuje koja će vrsta memorijskog registra

Више

PASCAL UVOD 2 II razred gimnazije

PASCAL UVOD 2 II razred gimnazije PASCAL UVOD 2 II razred gimnazije Upis-ispis 1. Upis Read(a,b); --u jednom redu Readln(a,b); -- nakon upisa prelazi se u novi red 2. Ispis Write(a,b); -- u jednom redu Writeln(a,b); --nakon ispisa prelazi

Више

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode] Programski jezik C organizacija izvornog programa Prevođenje Pisanje programa izvorni program Prevođenje programa izvršni program Izvršavanje programa rezultat Faze prevođenja Pretprocesiranje Kompilacija

Више

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup prirodnih brojeva? 4.) Pripada li 0 skupu prirodnih brojeva?

Више

PowerPoint Presentation

PowerPoint Presentation Programski jezici i strukture podataka UVOD Izvođači nastave Srđan Popov (JUG 215) Petar Marić (JUG 105) Milena Počuča (JUG 215) Milica Milutinović (JUG 215) Termini konsultacija naknadno Cilj vežbi Sticanje

Више

Uvod u takmičarsko programiranje

Uvod u takmičarsko programiranje 8. čas Uvod u programiranje - naredbe ciklusa Uvežbavamo naredbe ciklusa, naredbe ponavljanja (loop) https://studio.code.org/s/course2/stage/6/puzzle/3 "Talk is cheap. Show me the code." - Linus Torvalds

Више

Uvod u PHP

Uvod u PHP Uvod u PHP Marijan Šuflaj FER, 2018 Sadržaj PHP Općenito Sintaksa Osnove Kontrola toka Zadatci Resursi Općenito Naziv od PHP Hypertext Preprocessor Obično koristi ekstenziju.php Tipovi su dinamički Trenutno

Више

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc Zadaci za samostalno vježbanje 4. Svi zadaci dati ovdje su takvi da se mogu uraditi korištenjem isključivo gradiva prva četiri predavanja i ranije stečenog predznanja na predmetu Osnove računarstva. Zvjezdicom

Више

(Microsoft Word - Rje\232enja zadataka)

(Microsoft Word - Rje\232enja zadataka) 1. D. Svedimo sve razlomke na jedinstveni zajednički nazivnik. Lako provjeravamo da vrijede rastavi: 85 = 17 5, 187 = 17 11, 170 = 17 10, pa je zajednički nazivnik svih razlomaka jednak Tako sada imamo:

Више

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1 Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1 Sadržaj 1 Pokazivači - ponavljanje 3 2 Pokazivači - veza sa nizovima 5 2 1 Pokazivači - ponavljanje 1.

Више

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred Zadaci. 8. U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred točnog odgovora, u za to predviđen prostor. Odgovor Ako želimo stvoriti i pohraniti sliku, ali tako da promjenom

Више

Računarski praktikum I - Vježbe 11 - Funktori

Računarski praktikum I - Vježbe 11 - Funktori Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 11 - Funktori v2018/2019. Sastavio: Zvonimir Bujanović Funkcijski objekti (funktori) Objekt klase

Више

Microsoft PowerPoint - C-4-1

Microsoft PowerPoint - C-4-1 Pregled iskaza u C-u Izraz; Iskaz dodele, serijski komponovani iskaz; blok Uslovni iskazi i izrazi; složeno grananje Iterativni iskazi Iskaz dodele Promena vrednosti a = Ψ; Izračunava vrednost izraza Ψ,

Више

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language Obeležene petlje Obeležene petlje Obeležavanje petlje nekim identifikatorom omogućava da se programski tok usmeri na mesto u programu specificirano tim identifikatorom. Ako se iza naredbi break ili continue

Више

Microsoft Word - predavanje8

Microsoft Word - predavanje8 DERIVACIJA KOMPOZICIJE FUNKCIJA Ponekad je potrebno derivirati funkcije koje nisu jednostavne (složene su). Na primjer, funkcija sin2 je kompozicija funkcija sin (vanjska funkcija) i 2 (unutarnja funkcija).

Више

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić 1. temperatura u stepenima Celzijusa i stepene Farenhajta tf=1.8*tc+32 2. pretvoriti inče u centimetre 1 inč=2.54cm 3. vreme učitano

Више

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL završni ispit 6. srpnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1.

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL završni ispit 6. srpnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1. MJERA I INTEGRAL završni ispit 6. srpnja 208. (Knjige bilježnice dodatni papiri i kalkulatori nisu dozvoljeni!). (8 bodova) Kao na predavanjima za d N sa P d : a b ] a d b d ] : a i b i R a i b i za i

Више

Programiranje 1

Programiranje 1 Sveučilište u Rijeci ODJEL ZA INFORMATIKU Ulica Radmile Matejčić 2, Rijeka Akademska 2018./2019. godina PROGRAMIRANJE 1 Studij: Preddiplomski studij informatike (jednopredmetni) Godina i semestar: 1. godina,

Више

Konstrukcija i analiza algoritama Nina Radojičić februar Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne fun

Konstrukcija i analiza algoritama Nina Radojičić februar Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne fun Konstrukcija i analiza algoritama Nina Radojičić februar 2018. 1 Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne funkcije od argumenta n iz skupa N prirodnih brojeva.

Више

Microsoft Word - 15ms261

Microsoft Word - 15ms261 Zadatak 6 (Mirko, elektrotehnička škola) Rješenje 6 Odredite sup S, inf S, ma S i min S u skupu R ako je S = { R } a b = a a b + b a b, c < 0 a c b c. ( ), : 5. Skratiti razlomak znači brojnik i nazivnik

Више

Logicko projektovanje racunarskih sistema I

Logicko projektovanje racunarskih sistema I PRIMERI SA PREDAVANJA 17 Beta asembler Zadatak 1. Posmatrajmo sledeću funkciju napisanu u programskom jeziku C, za računanje najvećeg zajedničkog delioca dva pozitivna cela broja: int gcd(int a, int b)

Више

Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B.

Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B. Osnove inženjerske informatike II. Uvod u programiranje Vaš prvi program K. F. & V. B. The only way to learn a new programming language is by writing programs in it. Kernighan & Ritchie... and it is well

Више

Pojačavači

Pojačavači Programiranje u fizici Prirodno-matematički fakultet u Nišu Departman za fiziku dr Dejan S. Aleksić Programiranje u fizici dr Dejan S. Aleksić, vanredni profesor Kabinet 307 (treći sprat), lab. za elektroniku

Више

(Microsoft Word - Dr\236avna matura - studeni osnovna razina - rje\232enja)

(Microsoft Word - Dr\236avna matura - studeni osnovna razina - rje\232enja) 1. C. Imamo redom: I. ZADATCI VIŠESTRUKOGA IZBORA 9 + 7 6 9 + 4 51 = = = 5.1 18 4 18 8 10. B. Pomoću kalkulatora nalazimo 10 1.5 = 63.45553. Četvrta decimala je očito jednaka 5, pa se zaokruživanje vrši

Више

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Brkić SI 29/15 Zrenjanin 2018. Softversko inženjerstvo

Више

Fortran

Fortran FORTRAN Uvod Računala su samo strojevi: neznaju ništa, ne razmišljaju ni o čemu, ali mogu izuzetnom brzinom i vrlo točno, slijediti precizno napisane upute. Takve upute moraju se napisati u posebnom jeziku

Више

MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI PROGRAMSKI JEZIK C -SKRIPTA ZA INTERNU UPOTREBU-

MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI PROGRAMSKI JEZIK C -SKRIPTA ZA INTERNU UPOTREBU- MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI PROGRAMSKI JEZIK C -SKRIPTA ZA INTERNU UPOTREBU- Sadržaj 1 Uvod 8 1.1 Programski jezici......................... 8 1.2 Osnove

Више

Sadržaj 1 Diskretan slučajan vektor Definicija slučajnog vektora Diskretan slučajan vektor

Sadržaj 1 Diskretan slučajan vektor Definicija slučajnog vektora Diskretan slučajan vektor Sadržaj Diskretan slučajan vektor Definicija slučajnog vektora 2 Diskretan slučajan vektor Funkcija distribucije slučajnog vektora 2 4 Nezavisnost slučajnih vektora 2 5 Očekivanje slučajnog vektora 6 Kovarijanca

Више

Programski jezik C

Programski jezik C SPR, 2016 Rad sa datotekama Komunikacija sa OS Rad sa datotekama Vrste datoteka Otvaranje / zatvaranje datoteka Pristup datotekama za upis / čitanje Funkcije za rad sa datotekama Ulazno / izlazni tokovi

Више

SKRIPTE EKOF 2019/20 skripteekof.com Lekcija 1: Brojevni izrazi Lekcija 1: Brojevni izrazi Pregled lekcije U okviru ove lekcije imaćete priliku da nau

SKRIPTE EKOF 2019/20 skripteekof.com Lekcija 1: Brojevni izrazi Lekcija 1: Brojevni izrazi Pregled lekcije U okviru ove lekcije imaćete priliku da nau Lekcija : Brojevni izrazi Pregled lekcije U okviru ove lekcije imaćete priliku da naučite sledeće: osnovni pojmovi o razlomcima proširivanje, skraćivanje, upoređivanje; zapis razlomka u okviru mešovitog

Више

Strukture predavač: Nadežda Jakšić

Strukture predavač: Nadežda Jakšić Strukture predavač: Nadežda Jakšić složeni tip podatka; kolekcija promenljivih različitog tipa koje su sakupljene radi lakše manipulacije sintaksa: struct [oznakastrukture] navede { definicija člana strukture;

Више

(Microsoft Word - MATB - kolovoz osnovna razina - rje\232enja zadataka)

(Microsoft Word - MATB - kolovoz osnovna razina - rje\232enja zadataka) . B. Zapišimo zadane brojeve u obliku beskonačno periodičnih decimalnih brojeva: 3 4 = 0.7, = 0.36. Prvi od navedenih četiriju brojeva je manji od 3 4, dok su treći i četvrti veći od. Jedini broj koji

Више

P11.3 Analiza zivotnog veka, Graf smetnji

P11.3 Analiza zivotnog veka, Graf smetnji Поједностављени поглед на задњи део компајлера Међурепрезентација (Међујезик IR) Избор инструкција Додела ресурса Распоређивање инструкција Инструкције циљне архитектуре 1 Поједностављени поглед на задњи

Више

18. ožujka Državno natjecanje / Osnovna škola (6. razred) Primjena algoritama (Basic/Python/Pascal/C/C++) Sadržaj Zadaci... 1 Zadatak: Kineski..

18. ožujka Državno natjecanje / Osnovna škola (6. razred) Primjena algoritama (Basic/Python/Pascal/C/C++) Sadržaj Zadaci... 1 Zadatak: Kineski.. 18. ožujka 2015. Državno natjecanje / Primjena algoritama (Basic/Python/Pascal/C/C++) Sadržaj Zadaci... 1 Zadatak: Kineski... 2 Zadatak: Zmija... 3 Zadatak: Vlakovi... 5 Zadaci U tablici možete pogledati

Више

1 Polinomi jedne promenljive Neka je K polje. Izraz P (x) = a 0 + a 1 x + + a n x n = n a k x k, x K, naziva se algebarski polinom po x nad poljem K.

1 Polinomi jedne promenljive Neka je K polje. Izraz P (x) = a 0 + a 1 x + + a n x n = n a k x k, x K, naziva se algebarski polinom po x nad poljem K. 1 Polinomi jedne promenljive Neka je K polje. Izraz P (x) = a 0 + a 1 x + + a n x n = n a k x k, x K, naziva se algebarski polinom po x nad poljem K. Elementi a k K su koeficijenti polinoma P (x). Ako

Више

JMBAG IME I PREZIME BROJ BODOVA 1. (ukupno 6 bodova) MJERA I INTEGRAL 1. kolokvij 4. svibnja (Knjige, bilježnice, dodatni papiri i kalkulatori n

JMBAG IME I PREZIME BROJ BODOVA 1. (ukupno 6 bodova) MJERA I INTEGRAL 1. kolokvij 4. svibnja (Knjige, bilježnice, dodatni papiri i kalkulatori n 1. (ukupno 6 bodova) MJERA I INTEGRAL 1. kolokvij 4. svibnja 2018. (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) (a) (2 boda) Definirajte (općenitu) vanjsku mjeru. (b) (2 boda) Definirajte

Више

PLAN I PROGRAM ZA DOPUNSKU (PRODUŽNU) NASTAVU IZ MATEMATIKE (za 1. razred)

PLAN I PROGRAM ZA DOPUNSKU (PRODUŽNU) NASTAVU IZ MATEMATIKE (za 1. razred) PLAN I PROGRAM ZA DOPUNSKU (PRODUŽNU) NASTAVU IZ MATEMATIKE (za 1. razred) Učenik prvog razreda treba ostvarit sljedeće minimalne standarde 1. SKUP REALNIH BROJEVA -razlikovati brojevne skupove i njihove

Више

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijski program: Informacioni inženjering Informacioni inženjering 1 Rekurzivne funkcije Binarna stabla Informacioni

Више

Programiranje za UNIX Okruženje unix procesa

Programiranje za UNIX Okruženje unix procesa Programiranje za UNIX Okruženje unix procesa Sadržaj Memorijska slika UNIX procesa Argumenti naredbenog retka i varijable okruženja Životni ciklus procesa Izlazni status procesa 2 Memorijska slika UNIX

Више

Hej hej bojiš se matematike? Ma nema potrebe! Dobra priprema je pola obavljenog posla, a da bi bio izvrsno pripremljen tu uskačemo mi iz Štreberaja. D

Hej hej bojiš se matematike? Ma nema potrebe! Dobra priprema je pola obavljenog posla, a da bi bio izvrsno pripremljen tu uskačemo mi iz Štreberaja. D Hej hej bojiš se matematike? Ma nema potrebe! Dobra priprema je pola obavljenog posla, a da bi bio izvrsno pripremljen tu uskačemo mi iz Štreberaja. Donosimo ti primjere ispita iz matematike, s rješenjima.

Више

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode] Организација извршног програма (Марић, Јаничић: Програмирање 1, 9.3.3) Извршавање програма После успешног превођења (претпроцесирања, компилације, повезивања) програм може да се изврши Извршавање се захтева

Више

0255_Uvod.p65

0255_Uvod.p65 1Skupovi brojeva Skup prirodnih brojeva Zbrajanje prirodnih brojeva Množenje prirodnih brojeva U košari ima 12 jaja. U drugoj košari nedostaju tri jabuke da bi bila puna, a treća je prazna. Pozitivni,

Више

Програмирај!

Програмирај! Листе Поред појединачних вредности исказаних бројем или ниском карактера, често је потребно забележити већи скуп вредности које су на неки начин повезане, као, на пример, имена у списку путника у неком

Више