Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 12. predavanje p. 1
|
|
- Данијела Ивановић
- пре 5 година
- Прикази:
Транскрипт
1 Programiranje predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 12. predavanje p. 1/66
2 Sadržaj predavanja Pretprocesor: Naredba #include. Naredba #define. Parametrizirana #define naredba. Uvjetno uključivanje. Pregled standardne C biblioteke. Standardne datoteke zaglavlja *.h. Matematičke funkcije iz <math.h>. Neke funkcije iz <stdlib.h>. Mjerenje vremena neke funkcije iz <time.h>. Prog2 2019, 12. predavanje p. 2/66
3 Informacije podsjetnik, usmeni Napomena o podsjetniku = šalabahteru na službenom webu: Nemojte ga nositi na kolokvij to je zabranjeno! Dobit ćete ga na kolokviju. Pogledajte unaprijed što sve piše tamo, da se lakše snadete! Ako netko poželi izaći na usmeni (nakon rezultata kolokvija), dogovor za usmeni je u vrijeme uvida u kolokvije. Ako nisam na uvidima javite mi se mailom taj dan! Prog2 2019, 12. predavanje p. 3/66
4 Pretprocesor Prog2 2019, 12. predavanje p. 4/66
5 Općenito o pretprocesoru Prije prevodenja izvornog kôda u objektni ili izvršni kôd izvršavaju se pretprocesorske naredbe. Svaka linija izvornog kôda koja započinje znakom # (osim u komentaru) predstavlja jednu pretprocesorsku naredbu. Pretprocesorska naredba završava krajem linije, a ne znakom ;. Opći oblik pretprocesorske naredbe je #naredba parametri One nisu sastavni dio jezika C, te ne podliježu sintaksi jezika. Neke od pretprocesorskih naredbi su: #include, #define, #undef, #if, #ifdef, #ifndef, #elif, #else, #endif. Prog2 2019, 12. predavanje p. 5/66
6 Naredba #include Naredba #include može se pojaviti u dva oblika: ili #include "ime_datoteke" #include <ime_datoteke> U oba slučaja pretprocesor briše liniju s #include naredbom i uključuje sadržaj datoteke ime_datoteke u izvorni kôd, na mjestu #include naredbe. Ta datoteka smije imati svoje pretprocesorske naredbe, koje će se, takoder, obraditi (= uključi tekst, prodi kroz njega ). Prog2 2019, 12. predavanje p. 6/66
7 Naredba #include (nastavak) Gdje se traži navedena datoteka? Ako je ime_datoteke navedeno unutar navodnika ", onda pretprocesor traži datoteku u direktoriju u kojem se nalazi izvorni program. Ako je ime_datoteke navedeno izmedu znakova < >, to signalizira da se radi o sistemskoj datoteci (poput stdio.h), pa će pretprocesor tražiti datoteku na mjestu odredenom operacijskim sustavom. Prog2 2019, 12. predavanje p. 7/66
8 Naredba #define Naredba #define ima oblik #define ime tekst_zamjene i definira simbol ime kao živi objekt. Ako je zadan i tekst_zamjene (ne mora), onda ime postaje tzv. makro naredba. U tom slučaju, pretprocesor će od mjesta #define naredbe, do kraja datoteke, svaku pojavu imena ime zamijeniti tekstom tekst_zamjene. Do zamjene neće doći unutar znakovnih nizova (string konstanti), tj. unutar para dvostrukih navodnika ", komentara, tj. unutar susjednog para znakova /* i */. Prog2 2019, 12. predavanje p. 8/66
9 Parametrizirane makro naredbe U parametriziranoj makro naredbi, simboličko ime i tekst_zamjene sadrže tzv. formalne argumente. #define ime(argumenti) tekst_zamjene Argumenti se pišu u zagradama ( ) i odvajaju zarezom. Prilikom poziva makro naredbe, ovi formalni argumenti se zamjenjuju stvarnim argumentima navedenim u pozivu. Zamjena ide na razini teksta tekst, umjesto teksta! Makro naredba je efikasnija od funkcije, jer u njoj nema prijenosa argumenata, ali može izazvati neželjene efekte. Prog2 2019, 12. predavanje p. 9/66
10 Primjer parametrizirane makro naredbe Primjer. Makro naredba za nalaženje većeg od dva argumenta #define max(a, B) ((A) > (B)? (A) : (B)) Ovdje su A i B formalni argumenti. Ako se u kôdu pojavi naredba x = max(a1, a2); pretprocesor će je zamijeniti naredbom x = ((a1) > (a2)? (a1) : (a2)); Formalni argumenti (parametri) A i B zamijenjeni su stvarnim argumentima a1 i a2 na razini teksta. Prog2 2019, 12. predavanje p. 10/66
11 Primjer parametrizirane makro naredbe (nast.) Ako na drugom mjestu imamo naredbu x = max(a1 + a2, a1 - a2); ona će biti zamijenjena s x = ((a1 + a2) > (a1 - a2)? (a1 + a2) : (a1 - a2)); Napomena. Sličnost makro naredbe i funkcije može zavarati. Kod makro naredbe nema kontrole tipa argumenata. Supstitucija argumenata je doslovna na razini teksta, što može izazvati neželjene efekte (v. sljedeću stranicu). Prog2 2019, 12. predavanje p. 11/66
12 Razlika makro naredbe i funkcije Ako makro naredbu max pozovemo na sljedeći način x = max(i++, j++); nakon supstitucije dobivamo x = ((i++) > (j++)? (i++) : (j++)); Posljedica: jedna od varijabli i, j neće biti inkrementirana samo jednom (kao kod poziva funkcije) veća varijabla bit će inkrementirana dva puta(!), a rezultat x ovisi o prevoditelju. Napomena. Neke funkcije deklarirane u <stdio.h> su, zapravo, makro naredbe na primjer, getchar i putchar. Isto tako, funkcije u <ctype.h> izvedene su, uglavnom, kao makro naredbe. Prog2 2019, 12. predavanje p. 12/66
13 Makro naredbe i prioritet operacija Primjer. Različite makro naredbe za kvadriranje argumenta. #include <stdio.h> #define SQ1(x) x*x #define SQ2(x) (x)*(x) #define SQ3(x) ((x)*(x)) int main(void) { printf("%d\n", SQ1(1+1)); printf("%d\n", 4/SQ2(2)); printf("%d\n", 4/SQ3(2)); return 0; } Prog2 2019, 12. predavanje p. 13/66
14 Makro naredbe i prioritet operacija (nastavak) Ovaj program ispisuje: Objašnjenje. SQ1: #define SQ1(x) x*x x = 1+1 i doslovnom supstitucijom u SQ1 dobivamo 1+1*1+1 = (prioritet!) = = 3 SQ2: #define SQ2(x) (x)*(x) x = 2 i supstitucijom u 4/SQ2(2) dobivamo 4/(2)*(2) = 4/2*2 = 2*2 = 4 Prog2 2019, 12. predavanje p. 14/66
15 Makro naredbe i prioritet operacija (nastavak) SQ3: #define SQ3(x) ((x)*(x)) x = 2 i supstitucijom u 4/SQ3(2) dobivamo 4/((2)*(2)) = 4/(2*2) = 4/4 = 1 Zato se u parametriziranim makro naredbama koristi gomila zagrada da se osigura korektan prioritet operacija! Tek zadnji SQ3 korektno daje kvadrat argumenta u svim slučajevima, a to se htjelo! Prog2 2019, 12. predavanje p. 15/66
16 Naredba #define i više linija teksta U #define naredbi, tekst_zamjene ide od kraja imena koje definiramo, do kraja linije. Ako želimo da ime bude zamijenjeno s više linija teksta, moramo koristiti obratnu kosu crtu (\) na kraju svakog reda, osim posljednjeg. Kao i prije, \ znači da se red nastavlja na početku sljedećeg. Primjer. Makro za inicijalizaciju polja možemo definirati ovako (nije jako čitljivo i bolje je ne koristiti): #define INIT(polje, dim) for(int i=0;\ i < (dim); ++i) \ (polje)[i] = 0.0; Prog2 2019, 12. predavanje p. 16/66
17 Naredba #undef Definicija nekog imena može se poništiti korištenjem #undef naredbe. Nakon naredbe #undef ime simbol ime više nije definiran ( nije živ ). Primjer. Redefinicija konstante M_PI (vrijednost π u double) #include <math.h> /* math.h definira M_PI kao */ #undef M_PI #define M_PI (4.0*atan(1.0)) Provjeru je li simbol ime definiran ili ne, možemo napraviti naredbama #ifdef, odnosno, #ifndef (v. malo kasnije). Prog2 2019, 12. predavanje p. 17/66
18 Uvjetno uključivanje kôda #if, #endif Pretprocesorske naredbe #if, #endif, #else, #elif služe za uvjetno uključivanje (ili isključivanje) pojedinih dijelova programa. Uvjetno uključivanje kôda naredbama #if, #endif ima oblik: #if uvjet blok naredbi #endif Ako je uvjet ispunjen, onda će blok naredbi izmedu #if uvjet i #endif biti uključen u izvorni kôd koji ide prevoditelju na prevodenje. Ako uvjet nije ispunjen, taj blok neće biti uključen, tj. u prevoditelj ide tekst bez tog bloka kôda. Prog2 2019, 12. predavanje p. 18/66
19 Uvjetno uključivanje kôda (nastavak) Oprez: ovaj #if radi na nivou teksta izvornog kôda i nije zamjena za if naredbu u samom jeziku C. Uvjet koji se pojavljuje u #if naredbi je konstantan cjelobrojni izraz. Nula se interpretira kao laž, a svaka vrijednost različita od nule kao istina. Najčešća svrha uključivanja/isključivanja je uključiti neku datoteku zaglavlja, ako neko ime nije bilo definirano ranije (ime = simbol, ili pretprocesorska varijabla ). Za provjeru definiranosti nekog imena (simbola) služi izraz defined(ime) koji daje 1 ako je ime definirano, a 0 ako nije. Prog2 2019, 12. predavanje p. 19/66
20 Uvjetno uključivanje kôda (nastavak) Najčešće se koristi provjera je li neko ime nedefinirano. Tu smijemo koristiti i operator negacije!!defined(ime) Primjer. Provjera nedefiniranosti nekog privatnog imena za uključivanje odgovarajuće datoteke zaglavlja datoteka.h #if!defined( datoteka.h ) #include "datoteka.h" #endif s tim da se na početku datoteka.h definira privatno ime #define datoteka.h Prog2 2019, 12. predavanje p. 20/66
21 Naredbe #ifdef i #ifndef To je standardna tehnika kojom se izbjegava višestruko uključivanje.h datoteka (i potencijalna beskonačna rekurzija). Konstrukcije #if defined i #if!defined se vrlo često pojavljuju u praksi, pa postoje pokrate u obliku naredbi #ifdef i #ifndef (respektivno). Usput, zagrade oko imena simbola (ime) nisu obavezne. Primjer. Prethodnu provjeru možemo napisati u obliku #ifndef datoteka.h #include "datoteka.h" #endif a na početku datoteka.h se definira ime datoteka.h. Prog2 2019, 12. predavanje p. 21/66
22 Naredbe #else i #elif Složene if naredbe za uključivanje ili isključivanje pojedinih dijelova kôda (u pretprocesoru) grade se pomoću naredbi #else i #elif. Značenje #else je isto kao značenje else u C-u. Značenje #elif je isto kao značenje else if. Oprez: Sve ove naredbe rade na nivou teksta programa i nisu zamjena za odgovarajuće naredbe u samom jeziku C! Prog2 2019, 12. predavanje p. 22/66
23 Uvjetno uključivanje kôda Primjer 1 Primjer. Za kôd koji treba raditi na raznim operacijskim sustavima, testira se koji je operacijski sustav u pitanju, kroz ime (ili simbol) SYSTEM, da bi se uključilo ispravno zaglavlje. #if SYSTEM == SYSV #define DATOTEKA "sysv.h" #elif SYSTEM == BSD #define DATOTEKA "bsd.h" #elif SYSTEM == MSDOS #define DATOTEKA "msdos.h" #else #define DATOTEKA "default.h" #endif #include DATOTEKA Prog2 2019, 12. predavanje p. 23/66
24 Uvjetno uključivanje kôda Primjer 2 Primjer. U fazi razvoja programa korisno je ispisivati razne medurezultate, za kontrolu korektnosti izvršavanja programa. U završnoj verziji programa, sav taj suvišan ispis treba eliminirati. Za to se koristi standardni simbol DEBUG.... scanf("%d", &x); #ifdef DEBUG printf("debug: x = %d\n", x); // testiranje #endif Pitanje. Može li se definirati neki simbol (poput DEBUG) izvana prilikom prevodenja programa? Svi standardni prevoditelji imaju -Dsimbol opciju koja omogućava da se simbol definira na komandnoj liniji. Prog2 2019, 12. predavanje p. 24/66
25 Definiranje simbola kod prevodenja Primjer. Pretpostavimo da je program koji sadrži prikazani dio kôda smješten u prog.c. Tada će prevodenje naredbom cc -o prog prog.c proizvesti program u kojem ispis varijable x nije uključen. Medutim, prevodenje naredbom cc -DDEBUG -o prog prog.c dat će izvršni kôd koji uključuje printf naredbu, jer je simbol DEBUG definiran. Napomena. Ovu mogućnost -Dsimbol ima i Code::Blocks, ali samo kad se radi s projektima. Potražite i probajte! Prog2 2019, 12. predavanje p. 25/66
26 Standardna C biblioteka Prog2 2019, 12. predavanje p. 26/66
27 Općenito o zaglavljima Standardna C biblioteka sadrži niz funkcija, tipova i makro naredbi. Pripadne deklaracije nalaze se u sljedećim standardnim zaglavljima (redom kao u KR2): <assert.h> <float.h> <math.h> <stdarg.h> <stdlib.h> <ctype.h> <limits.h> <setjmp.h> <stddef.h> <string.h> <errno.h> <locale.h> <signal.h> <stdio.h> <time.h> Može biti još toga, poput <complex.h>. Nastavak: Pregled matematičke biblioteke <math.h> i neke korisne stvari iz <stdlib.h> i <time.h>. Prog2 2019, 12. predavanje p. 27/66
28 Matematičke funkcije u <math.h> Konvencija: x i y su tipa double, a n je tipa int. Sve funkcije kao rezultat vraćaju double. Funkcija sin(x) cos(x) tan(x) Značenje sin x cos x tg x asin(x) arcsinx [ π 2, π 2], x [ 1,1] acos(x) arccosx [0,π], x [ 1,1] atan(x) arctgx [ π, ] π 2 2 atan2(y, x) (x, y) su koordinate točke u ravnini, vraća arctg y [ π,π], jer prepoznaje kvadrant x Prog2 2019, 12. predavanje p. 28/66
29 Matematičke funkcije u <math.h> (nastavak) Funkcija Značenje sinh(x) sh x cosh(x) ch x tanh(x) th x exp(x) e x log(x) lnx, x > 0 log10(x) log 10 x, x > 0 pow(x, y) x y greška ako x = 0 i y 0, ili x < 0 i y nije cijeli broj sqrt(x) x, x 0 Prog2 2019, 12. predavanje p. 29/66
30 Matematičke funkcije u <math.h> (nastavak) Funkcija ceil(x) floor(x) fabs(x) ldexp(x, n) Značenje x, u double formatu najmanji cijeli broj x x, u double formatu najveći cijeli broj x x x 2 n frexp(x, int *exp) ako je x = y 2 n, uz y [ 1 2,1, vraća y, a eksponent n sprema u *exp. Ako je x = 0, onda je y = n = 0. Prog2 2019, 12. predavanje p. 30/66
31 Matematičke funkcije u <math.h> (nastavak) Funkcija Značenje modf(x, double *ip) rastavlja x na cjelobrojni i razlomljeni dio, oba istog predznaka kao x. Razlomljeni dio vrati, a cjelobrojni dio spremi u *ip. fmod(x, y) realni (floating point) ostatak dijeljenja x/y, istog znaka kao x. Ako je y = 0, rezultat ovisi o implementaciji. Prog2 2019, 12. predavanje p. 31/66
32 Razlika atan i atan2 Razlika izmedu funkcija double atan(double x); double atan2(double y, double x); atan(x) vraća arctgx [ π 2, π 2 ], atan2(y, x) interpretira argumente (paziti na poredak!) kao koordinate točke (x,y) u ravnini i vraća arctg y x [ π,π], (radi i za x = 0, pita prije dijeljenja!) jer prepoznaje kvadrant u kojem je točka (x,y). Prog2 2019, 12. predavanje p. 32/66
33 Razlika atan i atan2 (nastavak) Primjer. Program #include <stdio.h> #include <math.h> int main(void) { double x = -1.0, y = -1.0; printf("%f\n", atan(y / x)); printf("%f\n", atan2(y, x)); return 0; } ispisuje Točni rezultati su π/4, 3π/4 (treći kvadrant). Prog2 2019, 12. predavanje p. 33/66
34 Funkcije floor i ceil Uočite da funkcije za najmanje i najveće cijelo double floor(double x); double ceil(double x); vraćaju rezultat tipa double, a ne int. Primjer. Rezultat ispisa sljedećeg dijela kôda printf("%g\n", floor(5.2)); printf("%g\n", floor(-5.2)); printf("%g\n", ceil(5.2)); printf("%g\n", ceil(-5.2)); je: 5, -6, 6, -5 (zbog %g formata). Prog2 2019, 12. predavanje p. 34/66
35 Funkcija fmod Funkcija double fmod(double x, double y); vraća realni ostatak pri dijeljenju x/y, s tim da ostatak ima isti predznak kao x. Princip je isti kao kod cjelobrojnog dijeljenja, s tim da je ili x = cjelobrojni kvocijent y +ostatak, ostatak < y, ostatak = x ((int)(x/y)) y. Prog2 2019, 12. predavanje p. 35/66
36 Funkcija fmod (nastavak) Primjer. Sljedeći odsječak kôda ispisuje printf("%g, ", fmod(5.2, 2.6)); printf("%g, ", fmod( 5.57, 2.51)); printf("%g, ", fmod( 5.57, -2.51)); printf("%g, ", fmod(-5.57, 2.51)); printf("%g\n", fmod(-5.57, -2.51)); 0, 0.55, 0.55, -0.55, zbog (int)(5.57/2.51) = 2 i 5.57 = , itd. Prog2 2019, 12. predavanje p. 36/66
37 Funkcija frexp Funkcija double frexp(double x, int *exp); rastavlja broj x na binarnu mantisu i binarni eksponent. Primjer. Sljedeći odsječak kôda ispisuje double x = 8.0; int exp_2; printf("%f, ", frexp(x, &exp_2)); printf("%d\n", exp_2); , 4 Prog2 2019, 12. predavanje p. 37/66
38 Funkcije exp, log, log10 i pow double exp(double x); double log(double x); double log10(double x); double pow(double x, double y); Primjer. Sljedeći odsječak kôda ispisuje printf("%g\n", log(exp(22))); printf("%g\n", log10(pow(10.0, 22.0))); Prog2 2019, 12. predavanje p. 38/66
39 Neke funkcije iz <stdlib> Datoteka zaglavlja <stdlib.h> ima nekoliko vrlo korisnih funkcija. Na primjer: qsort QuickSort algoritam za općenito sortiranje niza podataka, bsearch Binarno traženje zadanog podatka u već sortiranom nizu. U pozivu ovih funkcija, kao stvarni argument, moramo zadati funkciju za usporedivanje podataka u nizu. Prog2 2019, 12. predavanje p. 39/66
40 Funkcija za usporedbu dva objekta Funkcija za usporedbu, nazovimo ju comp, prima pokazivače na dva objekta koje treba usporediti i vraća rezultat tipa int. int comp(const nesto *a, const nesto *b); Vraćeni rezultat odreduje medusobni poredak objekata *a i *b (isto kao kod funkcije strcmp za usporedbu stringova): comp(a, b) < 0 *a < *b (*a je ispred *b), comp(a, b) = 0 *a = *b (*a je jednak *b), comp(a, b) > 0 *a > *b (*a je iza *b). Funkcija qsort sortira niz uzlazno, prema tako zadanom poretku. Za obrnuti (= silazni ) poredak, treba okrenuti predznak rezultata funkcije comp (zamjena ispred iza ). Prog2 2019, 12. predavanje p. 40/66
41 Funkcija qsort Funkcija za sortiranje niza QuickSort algoritmom: void qsort(void *base, size_t n, size_t size, int (*comp) (const void *, const void *)); Primjer. Dio programa za uzlazno sortiranje stringova char rjecnik[3][20] = {"po", "ut", "sri"}; int i; qsort(rjecnik, 3, 20, strcmp); for (i = 0; i < 3; ++i) puts(rjecnik[i]); Funkcija za usporedbu stringova je baš strcmp. Prog2 2019, 12. predavanje p. 41/66
42 Funkcija bsearch Funkcija za binarno traženje zadanog podatka u sortiranom nizu (prema poretku zadanom funkcijom comp): void *bsearch(const void *key, const void *base, size_t n, size_t size, int (*comp) (const void *, const void *)); Vraća pokazivač na nadeni podatak (ako ga ima), ili NULL. Primjer. printf("%s\n", bsearch("ut", rjecnik, 3, 20, strcmp)); Pripadni indeks možemo izračunati aritmetikom pokazivača, samo treba paziti na tipove. Prog2 2019, 12. predavanje p. 42/66
43 Korektno baratanje s tipovima Na ovako napisan program (v. qs_1.c) compiler se buni na nekoliko mjesta, upozorenjem zbog miješanja tipova char * i void *. Program radi korektno, ali... nije lijepo! Popravak. Funkciju strcmp za usporedbu stringova treba zatvoriti u funkciju korektnog prototipa nazovimo ju usporedi, a iznutra pretvorimo tipove pokazivača: int usporedi(const void *a, const void *b) { return strcmp((char *) a, (char *) b); } Prog2 2019, 12. predavanje p. 43/66
44 Korektno baratanje s tipovima (nastavak) Poziv funkcije qsort onda glasi: qsort(rjecnik, 3, 20, usporedi); Sasvim analogno, povratnu vrijednost funkcije bsearch treba propisno castati u char * printf("%s\n", (char *) bsearch("ut", rjecnik, 3, 20, usporedi)); Na popravljeni program (v. qs_1a.c) compiler nema teksta. Napomena. Kod sortiranja rječnika zamjenama pokazivača, a ne stringova (kao ovdje), treba paziti na tipove u usporedi! Prog2 2019, 12. predavanje p. 44/66
45 Elegantnije rješenje = pretvoriti tip u pozivu Elegantnije i čitljivije rješenje je (v. KR2, str ): funkcija za usporedbu ima korektne tipove argumenata, u pozivu qsort i bsearch pretvoriti tip funkcije u zadani. Dakle, funkcija za usporedbu stringova je baš strcmp, a poziv izgleda ovako (v. qs_1b.c): qsort(rjecnik, 3, 20, (int (*) (const void*, const void*)) strcmp); Još preglednije je uvesti ime tipa za funkciju (v. qs_1c.c): typedef int (*Comp_fun) (const void*, const void*); qsort(rjecnik, 3, 20, (Comp_fun) strcmp); Prog2 2019, 12. predavanje p. 45/66
46 Definiranje kriterija sortiranja Primjer. Sortiranje polja cijelih brojeva (v. qs_2c.c, qs_3.c). typedef int (*Comp_fun) (const void*, const void*); int main(void) { int i, polje[4] = {1, 3, -4, 2}; qsort(polje, 4, sizeof(int), (Comp_fun) usporedi); /* Cast funkcije */ } for (i = 0; i < 4; ++i) printf("%d\n", polje[i]); return 0; Prog2 2019, 12. predavanje p. 46/66
47 Funkcija usporedi za uzlazno sortiranje Funkcija usporedi za usporedivanje cijelih brojeva (uzlazno): int usporedi(const int *p_a, const int *p_b) { /* Nije dobro: return *p_a - *p_b; jer rezultat ne mora biti korektno prikaziv! */ } if (*p_a < *p_b) return -1; else if (*p_a > *p_b) return 1; else return 0; Prog2 2019, 12. predavanje p. 47/66
48 Funkcije rand i srand Funkcije za generiranje slučajnih cijelih brojeva: int rand(void); void srand(unsigned int seed); Funkcija rand() vraća tzv. pseudo slučajni cijeli broj u rasponu od 0 do RAND_MAX, s tim da RAND_MAX mora biti barem = (tj. 16 bitni int, bez negativnih). Funkcija srand(seed) postavlja tzv. sjeme za generator pseudo slučajnih brojeva na zadanu vrijednost seed. Standardno sjeme je 1, ako ga ne postavimo sami! Prog2 2019, 12. predavanje p. 48/66
49 Funkcije rand i srand (nastavak) Primjer. unsigned int seed; int i; printf("%d\n", RAND_MAX); /* */ scanf("%u", &seed); srand(seed); for (i = 1; i <= 10; ++i) printf(" %6d\n", rand()); Napomene o svrsi generatora pseudoslučajnih brojeva, ulozi i ispravnom korištenju sjemena (seed). Prog2 2019, 12. predavanje p. 49/66
50 Povećanje raspona slučajnih brojeva Povećanje raspona na dvostruki (kvadratni), ako je prikaziv: int randint(void) { return RAND_MAX * rand() + rand(); } Još bolje daje raspon od 0 do (RAND_MAX+1) 2 1: int randint(void) { static int RAND_BASE = RAND_MAX + 1 return RAND_BASE * rand() + rand(); } Ako znamo da je RAND_MAX = , može s pomakom: int randint(void) { /* int od 0 do 2^30-1 */ return ( rand() << 15 ) + rand(); } Prog2 2019, 12. predavanje p. 50/66
51 Transformacije slučajnih cijelih brojeva Skaliranje nenegativnog randint na zadani interval [l, u]: int randint_interval(int l, int u) { return l + randint() % (u - l + 1); } Za dobivanje uniformno distribuiranih realnih brojeva iz intervala [0, 1], bitno je znati RANDINT_MAX: double rand_double() { return (double) randint() / RANDINT_MAX; } Savjet: Ako vam zaista treba, uzeti bolji generator (ima toga)! Prog2 2019, 12. predavanje p. 51/66
52 Mjerenje vremena Prog2 2019, 12. predavanje p. 52/66
53 Datoteka zaglavlja <time.h> U datoteci zaglavlja <time.h> deklarirani su tipovi i funkcije za manipulaciju danima, datumima i vremenom. Detaljnije ćemo opisati samo funkcije za vrijeme, s ciljem: kako napraviti jednostavnu štopericu za vrijeme izvršavanja pojedinih dijelova programa. Za početak, deklarirana su dva aritmetička tipa za prikaz vremena: time_t za prikaz stvarnog kalendarskog vremena, clock_t za prikaz procesorskog vremena. Razlog za dva različita tipa = različite jedinice! Prog2 2019, 12. predavanje p. 53/66
54 Stvarno vrijeme funkcija time Stvarno kalendarsko vrijeme mjeri se u nekim standardnim jedinicama za vrijeme (recimo, sekundama nije bitno). Funkcija za očitanje trenutnog vremena je: Vraća time_t time(time_t *tp); trenutno vrijeme, ili -1, ako vrijeme nije dostupno. Ako pokazivač tp nije NULL, onda se izlazna vrijednost sprema i u *tp. To je katkad zgodno napraviti radi preglednosti. Prog2 2019, 12. predavanje p. 54/66
55 Razlika vremena funkcija difftime Stvarna vrijednost rezultata nije naročito korisna (uključivo i jedinice). Najčešće je to broj sekundi proteklih od nekog nultog trenutka! Za štopericu realnog vremena treba nam samo razlika vremena: vrijeme na kraju vrijeme na početku. Tome služi funkcija double difftime(time_t time2, time_t time1); koja vraća razliku time2 time1 izraženu u sekundama. Prog2 2019, 12. predavanje p. 55/66
56 Primjer mjerenje realnog vremena Primjer. Treba izabrati neki posao koji dovoljno dugo traje, da nešto i vidimo. Zato koristimo dvije cjelobrojne petlje, da dobijemo kvadratnu složenost. Za demo, radimo oko poziva funkcije rand. Cijeli program za ovaj eksperiment je (v. time_1.c) #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i, j; time_t t1, t2; Prog2 2019, 12. predavanje p. 56/66
57 Primjer mjerenje realnog vremena time(&t1); /* Moze i t1 = time(null); */ for (i = 1; i < ; ++i) for (j = 1; j < i; ++j) rand(); time(&t2); /* Moze i t2 = time(null); */ printf("%g\n", difftime(t2, t1)); } return 0; Na mom računalu (uz Intelov C), rezultat je 96 (sekundi). Prog2 2019, 12. predavanje p. 57/66
58 Procesorsko vrijeme funkcija clock Procesorsko vrijeme mjeri se u broju tzv. otkucaja procesorskog sata. Funkcija za očitanje procesorskog vremena je: Vraća clock_t clock(void); procesorsko vrijeme (u broju otkucaja sata) od početka izvršavanja programa, ili -1, ako vrijeme nije dostupno. Dodatno, simbolička konstanta CLOCKS_PER_SEC sadrži broj otkucaja procesorskog sata u jednoj sekundi. Primjena u štoperici ide po istom principu razlike vremena. Prog2 2019, 12. predavanje p. 58/66
59 Primjer mjerenje procesorskog vremena Primjer. Pretvaranje u sekunde realiziramo funkcijom dsecnd. Cijeli program za ovaj eksperiment je (v. time_2.c) #include <stdio.h> #include <stdlib.h> #include <time.h> double dsecnd (void) { return (double)( clock() ) / CLOCKS_PER_SEC; } int main(void) { int i, j; double t1, t2, time; Prog2 2019, 12. predavanje p. 59/66
60 Primjer mjerenje procesorskog vremena t1 = dsecnd(); for (i = 1; i < ; ++i) for (j = 1; j < i; ++j) rand(); t2 = dsecnd(); time = t2 - t1; printf("%g\n", time); } return 0; Rezultati za dva izvršavanja su , (sekundi). Prog2 2019, 12. predavanje p. 60/66
61 Pametniji primjer trajanje QuickSorta Primjer. Trajanje qsort algortima iz <stdlib.h> na slučajno generiranom polju od 10 7 cijelih brojeva (v. qs_time.c). #include <stdio.h> #include <stdlib.h> #include <time.h> /* Globalno polje x za sortiranje, zato da nema problema s velicinom programskog stoga za automatske varijable u funkcijama. */ #define MAXN /* 10^7 */ int x[maxn]; Prog2 2019, 12. predavanje p. 61/66
62 Trajanje QuickSorta (nastavak) /* Funkcija za procesorsko vrijeme u sekundama. */ double dsecnd (void) { return (double)( clock() ) / CLOCKS_PER_SEC; } /* Slucajni broj iz [0, 2^30-1]. KORISTI da je RAND_MAX = 2^15-1. Dvostruki poziv rand(), uz pomak prvog broja za 15 bitova. */ int randint(void) { return ( rand() << 15 ) + rand(); } Prog2 2019, 12. predavanje p. 62/66
63 Trajanje QuickSorta (nastavak) /* Usporedba cijelih brojeva za qsort. */ int intcomp(const int *p_a, const int *p_b) { /* Opcenito, NIJE dobro: return *p_a - *p_b; jer rezultat ne mora biti korektno prikaziv! */ /* Medjutim, to RADI za brojeve iz [0, 2^30-1], dobivene iz randint. */ } if (*p_a < *p_b) return -1; else if (*p_a > *p_b) return 1; else return 0; Prog2 2019, 12. predavanje p. 63/66
64 Trajanje QuickSorta (nastavak) /* Tip funkcije za usporedbu, kod casta u pozivu qsort. */ typedef int (*Comp_fun) (const void*, const void*); /* Glavni program. */ int main(void) { int n = MAXN; /* Broj elemenata u polju. */ int i; double start, stop; Prog2 2019, 12. predavanje p. 64/66
65 Trajanje QuickSorta (nastavak) /* Generiranje slucajnog polja x s n intova. */ for (i = 0; i < n; ++i) x[i] = randint(); /* Quicksort na polju x, sa stopericom oko poziva. */ start = dsecnd(); qsort(x, n, sizeof(int), (Comp_fun) intcomp); stop = dsecnd(); Prog2 2019, 12. predavanje p. 65/66
66 Trajanje QuickSorta (nastavak) /* Provjera sortiranosti polja x. */ for (i = 1; i < n; ++i) if (x[i-1] > x[i]) printf(" Greska na [%d, %d]\n", i-1, i); /* Ispis vremena. */ } printf(" n = %8d, vrijeme = %9.3f [s]\n", n, stop - start); return 0; Na mom računalu (uz Intelov C), rezultat je (sekundi). Prog2 2019, 12. predavanje p. 66/66
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
Више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 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:
Више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
ВишеProgramiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1
Programiranje 1 10. 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 Sadržaj predavanja Funkcije: Definicija funkcije.
Више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*
Више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
Више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
Више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
Више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
Више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
Више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
Више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 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
Више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
Више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
Више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
Више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 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
Више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
Више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
Више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
Више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
Више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
Више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
Више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
Више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
Више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
Више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
ВишеMicrosoft PowerPoint - Datoteke [Compatibility Mode]
Датотеке стандардни улаз / излаз Датотека је именовани низ знакова (бајтова) У програмском језику C датотека је везана за улаз и излаз података функције стандардне библиотеке Најједностaвније
ВишеMicrosoft PowerPoint - Bitovi [Compatibility Mode]
Оператори над битовима (Јаничић, Марић: Програмирање 2, тачка 5.6) Оператори за рад са појединачним битовима Само на целобројне аргументе: ~ битовска негација & битовска конјункција (и) битовска (инклузивна)
Више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
Више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
Више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
Више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:
Више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 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.
Више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;
ВишеP1.3 Projektovanje makroasemblera
ПРОЈЕКТОВАЊЕ МАКРОАСЕМБЛЕРА Макроасемблер Потребна проширења асемблера 1 МАКРОАСЕМБЛЕР Макроасемблер преводи полазни програм написан на макроасемблерском језику у извршиви машински програм. Приликом израде
Више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
Више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
ВишеMicrosoft PowerPoint - 03-Slozenost [Compatibility Mode]
Сложеност алгоритама (Програмирање 2, глава 3, глава 4-4.3) Проблем: класа задатака истог типа Велики број различитих (коректних) алгоритама Величина (димензија) проблема нпр. количина података које треба
Више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
Више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
Више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
Више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.
Више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
Више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
Више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).
Више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
Више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
ВишеSveucilište u Zagrebu
Proširivanje Pythona programskim jezicima C/C++ Ivo Majić Mentor: Doc. dr. sc. Domagoj Jakobović Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva Ak. god. 2011/12 Ivo Majić (FER) Sveučilište
Више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
Више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
Више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
ВишеMicrosoft Word - 02 Elementi programskog jezika Pascal
Elementi programskog jezika Pascal Osnovni elementi jezika Osnovni simboli U programskom jeziku Pascal sve konstrukcije se grade od skupa osnovnih simbola jezika koji čine slova, cifre i specijalni znaci.
Више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..........................
Више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 - 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
Више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
Више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
Више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
Више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
Више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
Више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
Више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
Више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
ВишеMicrosoft Word - IZVODI ZADACI _2.deo_
IZVODI ZADACI ( II deo U ovom del ćemo pokšati da vam objasnimo traženje izvoda složenih fnkcija. Prvo da razjasnimo koja je fnkcija složena? Pa, najprostije rečeno, to je svaka fnkcija koje nema tablici
Више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
Више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
ВишеPRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste
PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, 5.06.019. godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekstenzija se najčešće koristi za tekstualne datoteke? a)
Више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
Више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
Више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
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 PowerPoint - 11.Programski_Jezik_C_ulaz-izlaz [Compatibility Mode]
Programski jezik C - ulaz i izlaz programa Ulaz i izlaz programa Argumenti komandne linije Standardni tokovi Preusmerenje Funkcije za rad sa ulazom i izlazom Formatiran ulaz/izlaz Datoteke 2 Aргументи
ВишеDvostruki integrali Matematika 2 Erna Begović Kovač, Literatura: I. Gusić, Lekcije iz Matematike 2
vostruki integrali Matematika 2 Erna Begović Kovač, 2019. Literatura: I. Gusić, Lekcije iz Matematike 2 http://matematika.fkit.hr Uvod vostruki integral je integral funkcije dvije varijable. Oznaka: f
Више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
ВишеMergedFile
ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 18.09.2018. Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite Uputstvo pre popunjavanja Obrasca za odgovore. b) Vrednost
ВишеMy_P_Trigo_Zbir_Free
Штa треба знати пре почетка решавања задатака? ТРИГОНОМЕТРИЈА Ниво - Основне формуле које произилазе из дефиниција тригонометријских функција Тригонометријске функције се дефинишу у правоуглом троуглу
Више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
ВишеПрограмирај!
Листе Поред појединачних вредности исказаних бројем или ниском карактера, често је потребно забележити већи скуп вредности које су на неки начин повезане, као, на пример, имена у списку путника у неком
ВишеProgramski jezici i strukture podataka
Programski jezici i strukture podataka 7 ULAZ, IZLAZ I DATOTEKE Ulazno izlazne operacije Programi moraju imati mogućnost da upisuju podatke u datoteke ili da ih ispisuju na izlazni uređaj poput ekrana
ВишеNumerička matematika 1. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb NumMat 2019, 1. pre
Numerička matematika 1. predavanje dodatak Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb NumMat 2019, 1. predavanje dodatak p. 1/102 Sadržaj predavanja dodatka
ВишеDatoteke predavač: Nadežda Jakšić
Datoteke predavač: Nadežda Jakšić svi podaci sa kojima smo do sada radili u programima su smeštani u operativnu memoriju računara i trajali su najduže koliko i sam program; kada program završi sa radom,
Више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
ВишеРачунарска интелигенција
Рачунарска интелигенција Генетско програмирање Александар Картељ kartelj@matf.bg.ac.rs Ови слајдови представљају прилагођење слајдова: A.E. Eiben, J.E. Smith, Introduction to Evolutionary computing: Genetic
Више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
ВишеELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U
ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 02.07.2019. Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite Uputstvo pre popunjavanja Obrasca za odgovore. b) Vrednost
Више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,
ВишеPowerPoint Presentation
II Karakteristike C jezika Programski jezik C je viši programski jezik opšte namene. Tesno je povezan sa UNIX OS uz koji je razvijan. Razvio ga je Dennis Ritchie 1970 u Bell Telephone Laboratories, Inc.
ВишеSkalarne funkcije više varijabli Parcijalne derivacije Skalarne funkcije više varijabli i parcijalne derivacije Franka Miriam Brückler
i parcijalne derivacije Franka Miriam Brückler Jednadžba stanja idealnog plina uz p = nrt V f (x, y, z) = xy z x = n mol, y = T K, z = V L, f == p Pa. Pritom je kodomena od f skup R, a domena je Jednadžba
Више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.
Више07_PJISP_II_Predavanja
Rekurzija i rekurzivne funkcije Informacioni inženjering 1 Rekurzija Rekurzija nastaje kada se pojam definiše pomoću sebe samog Javlja se u različitim oblastima, od lingvistike i logike, preko matematike
Више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
ВишеNumeričke metode u fizici 1, Projektni zadataci 2018./ Za sustav običnih diferencijalnih jednadžbi, koje opisuju kretanje populacije dviju vrs
Numeričke metode u fizici, Projektni zadataci 8./9.. Za sustav običnih diferencijalnih jednadžbi, koje opisuju kretanje populacije dviju vrsta životinja koje se nadmeću za istu hranu, dx ( dt = x x ) xy
ВишеUvod u obične diferencijalne jednadžbe Metoda separacije varijabli Obične diferencijalne jednadžbe Franka Miriam Brückler
Obične diferencijalne jednadžbe Franka Miriam Brückler Primjer Deriviranje po x je linearan operator d dx kojemu recimo kao domenu i kodomenu uzmemo (beskonačnodimenzionalni) vektorski prostor funkcija
ВишеSveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba
Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Baze podataka Tema: Osnovna SELECT naredba Vježbu pripremili:
Више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
Више