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 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 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2

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

Uvod u računarstvo 2+2

070-ALIP2-udzbenik.indb

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

Funkcije predavač: Nadežda Jakšić

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

Uvod u računarstvo 2+2

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

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

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

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

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

Funkcije predavač: Nadežda Jakšić

Programski jezik C

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

Tutoring System for Distance Learning of Java Programming Language

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

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

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

Tutoring System for Distance Learning of Java Programming Language

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

PowerPoint Presentation

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

Microsoft PowerPoint - Bitovi [Compatibility Mode]

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

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

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

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

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

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

Microsoft PowerPoint - Datoteke [Compatibility Mode]

PASCAL UVOD 2 II razred gimnazije

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

PowerPoint Presentation

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

Uvod u takmičarsko programiranje

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

Programski jezik C

Državna matura iz informatike

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

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

Slide 1

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Tutoring System for Distance Learning of Java Programming Language

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

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Datoteke predavač: Nadežda Jakšić

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

ALIP1_udzb_2019.indb

Strukture predavač: Nadežda Jakšić

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

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

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

Microsoft PowerPoint - C-4-1

Numerička matematika 1. predavanje Saša Singer web.math.hr/~singer PMF Matematički odjel, Zagreb NumMat 2010, 1. predavanje p.1/133

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

PowerPoint Presentation

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

Microsoft PowerPoint - 11.Programski_Jezik_C_ulaz-izlaz [Compatibility Mode]

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

07_PJISP_II_Predavanja

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

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

2015_k2_z12.dvi

Uvod u PHP

Programiranje 1

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

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

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

PowerPoint Presentation

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

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

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

PROMENLJIVE, TIPOVI PROMENLJIVIH

Рачунарска интелигенција

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

P11.2 Izbor instrukcija, IBURG

Programiranje za UNIX Okruženje unix procesa

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Microsoft Word - predavanje8

MergedFile

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

Државно такмичење године 5. и 6. разред 1. [pločice] Правоугаону терасу димензија d s центиметара квадратних треба поплочати коришћењем плочица

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

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

INF INFORMATIKA INF.27.HR.R.K1.20 INF D-S INF D-S027.indd :50:41

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

Microsoft Word - 15ms261

1

6-8. ČAS Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: Gde pretpostavljamo da je A celobrojna matrica dimenzije,. Takođe

MIP-heuristike (Matheuristike) Hibridi izmedu metaheurističkih i egzaktnih metoda Tatjana Davidović Matematički institut SANU

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

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

Транскрипт:

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 je napravljen na Prog1: Izrazi. Eksplicitna konverzija tipova. Konverzije iz double u int greške zaokruživanja. Pokazivači. Funkcije. Polja. Pokazivači i polja. Polje kao argument funkcije. Rekurzivne funkcije. Prog2 2019, 0. predavanje p. 2/48

Informacije Ovo je bivše prvo predavanje iz Prog2, koje sadrži ponavljanje gradiva iz Prog1. Prog2 2019, 0. predavanje p. 3/48

Ponavljanje gradiva iz kolegija Programiranje 1 Prog2 2019, 0. predavanje p. 4/48

Sadržaj Ponavljanje onog dijela C-a koji je napravljen na Prog1: Izrazi. Eksplicitna konverzija tipova. Konverzije iz double u int greške zaokruživanja. Pokazivači. Funkcije. Polja. Pokazivači i polja. Polje kao argument funkcije. Rekurzivne funkcije. Prog2 2019, 0. predavanje p. 5/48

Izrazi (1) Što će ispisati sljedeći odsječak programa? int a = 10, b = 10, c = 2; a /= c * 5; b = b / c * 5; printf("a - b = %d\n", a - b); a - b = -24 Prog2 2019, 0. predavanje p. 6/48

Izrazi (1) rješenje Što će ispisati sljedeći odsječak programa? int a = 10, b = 10, c = 2; a /= c * 5; b = b / c * 5; printf("a - b = %d\n", a - b); a - b = -24 Prog2 2019, 0. predavanje p. 7/48

Izrazi (2) Što će ispisati sljedeći odsječak programa? int a = b = 10, c = 2; a = c * b; printf("b = %d\n", b); greška pri kompajliranju: error: identifier "b" is undefined int a = b = 10, c = 2; ^ Prog2 2019, 0. predavanje p. 8/48

Izrazi (2) rješenje Što će ispisati sljedeći odsječak programa? int a = b = 10, c = 2; a = c * b; printf("b = %d\n", b); greška pri kompajliranju: error: identifier "b" is undefined int a = b = 10, c = 2; ^ Prog2 2019, 0. predavanje p. 9/48

Izrazi (3) Što će ispisati sljedeći odsječak programa? int b, a = b = 10, c = 2; a = c * b; printf("b = %d\n", b); b = 10 Prog2 2019, 0. predavanje p. 10/48

Izrazi (3) rješenje Što će ispisati sljedeći odsječak programa? int b, a = b = 10, c = 2; a = c * b; printf("b = %d\n", b); b = 10 Usput, a = 20. Prog2 2019, 0. predavanje p. 11/48

Izrazi (4) Što će ispisati sljedeći odsječak programa? k = 0 int i, j, k; k = 0; i = 3; j = 2; if (i - i && j++) k = 1; printf("k = %d\n", k); Pitanje: kolika je konačna vrijednost varijable j? Prog2 2019, 0. predavanje p. 12/48

Izrazi (4) rješenje Što će ispisati sljedeći odsječak programa? k = 0 int i, j, k; k = 0; i = 3; j = 2; if (i - i && j++) k = 1; printf("k = %d\n", k); Odgovor: j = 2. Prog2 2019, 0. predavanje p. 13/48

Izrazi (5) Što će ispisati sljedeći odsječak programa? k = 0 int i, j, k; k = 0; i = 3; j = 0; if (i + i && j++) k = 1; printf("k = %d\n", k); Pitanje: kolika je konačna vrijednost varijable j? Prog2 2019, 0. predavanje p. 14/48

Izrazi (5) rješenje Što će ispisati sljedeći odsječak programa? k = 0 int i, j, k; k = 0; i = 3; j = 0; if (i + i && j++) k = 1; printf("k = %d\n", k); Odgovor: j = 1. Prog2 2019, 0. predavanje p. 15/48

Eksplicitna konverzija (operator cast) Što će ispisati sljedeći odsječak programa? int z = 5; double y = 5.8; printf("%d\n", (int) y/2); printf("%d\n", (int) (double) z/2); printf("%f\n", (float) 1 ); 2 2 49.000000 Prog2 2019, 0. predavanje p. 16/48

Eksplicitna konverzija (operator cast) rješ. Što će ispisati sljedeći odsječak programa? int z = 5; double y = 5.8; printf("%d\n", (int) y/2); printf("%d\n", (int) (double) z/2); printf("%f\n", (float) 1 ); 2 2 49.000000 Prog2 2019, 0. predavanje p. 17/48

Eksplicitna konverzija (2) Što će ispisati sljedeći odsječak programa? double y = 1.8e+20; printf ("%d\n", (int) y/2); -1073741824 (oprez: ovisi o kompajleru) rezultat se ne mijenja povećanjem eksponenta od y Prog2 2019, 0. predavanje p. 18/48

Eksplicitna konverzija (2) rješenje Što će ispisati sljedeći odsječak programa? double y = 1.8e+20; printf ("%d\n", (int) y/2); -1073741824 (oprez: ovisi o kompajleru) rezultat se ne mijenja povećanjem eksponenta od y Prog2 2019, 0. predavanje p. 19/48

Konverzija double u int Što će ispisati sljedeći odsječak programa? double x = 5.1; printf("%d\n", (int)(1000*x)); 5100 Prog2 2019, 0. predavanje p. 20/48

Konverzija double u int rješenje Što će ispisati sljedeći odsječak programa? double x = 5.1; printf("%d\n", (int)(1000*x)); 5100 Oprez: Rezultat ovisi o greškama zaokruživanja u realnoj aritmetici (tip double) i pukim slučajem je točan! Na drugom računalu (i prevoditelju), kolega je dobio rezultat 5099 Prog2 2019, 0. predavanje p. 21/48

Konverzija double u int (2) Što će ispisati sljedeći odsječak programa? double x = 64.1; printf("%d\n", (int)(1000*x)); Vjerojatno očekujete 64100. Prog2 2019, 0. predavanje p. 22/48

Konverzija double u int (2) rješenje Što će ispisati sljedeći odsječak programa? double x = 64.1; printf("%d\n", (int)(1000*x)); Vjerojatno očekujete 64100. Medutim, nije! Stvarni rezultat je 64099 Zašto? Razlog: Greške zaokruživanja, i to dvije! Prog2 2019, 0. predavanje p. 23/48

Konverzija double u int (2) objašnjenje Prva nastaje kod prikaza broja x = 64.1 u tipu double. Naime, broj nije egzaktno prikaziv u binarnom sustavu (ima beskonačan prikaz). Prikaz broja x = 64.100 u racunalu: 1. rijec: 0110 0110 0110 0110 0110 0110 0110 0110 2. rijec: 0100 0000 0101 0000 0000 0110 0110 0110 Druga riječ sadrži bitove 63 32, tj. počinje predznakom 0, pa onda ide 11 bitova karakteristike 100 0000 0101, a zatim idu bitovi mantise (bez vodeće jedinice). Prva riječ sadrži bitove 31 0, tj. kraj mantise (periodičnost pravog binarnog zapisa se vidi). Prog2 2019, 0. predavanje p. 24/48

Konverzija double u int (2) objašnjenje Druga greška nastaje prilikom množenja 1000*x. Zaokruženi rezultat u double je malo manji od 64100, pa (int) zaokruži nadolje. Prikaz broja 1000*x = 64100.000 u racunalu: 1. rijec: 1111 1111 1111 1111 1111 1111 1111 1111 2. rijec: 0100 0000 1110 1111 0100 1100 0111 1111 Zanemarite to što gore piše 64100.000. Format ispisa je %.3f. On, takoder, zaokružuje! Probajte format s više decimala. Prog2 2019, 0. predavanje p. 25/48

Poopćenje Konverzija double u int (3) Što će ispisati sljedeći odsječak programa? int c = 1, i; for (i = 0; i < 20; ++i) { double x = c + 0.1; } printf("%d\n", (int)(1000*x)); c *= 2; Idemo redom. Nadimo vrijednosti varijabli c i x, u ovisnosti o indeksu i, koji se mijenja u petlji, od 0 do 19. Prog2 2019, 0. predavanje p. 26/48

Konverzija double u int (3) nastavak int c = 1, i; for (i = 0; i < 20; ++i) { double x = c + 0.1; printf("%d\n", (int)(1000*x)); c *= 2; } Na početku je c = 1, a zatim se c množi s 2, na dnu petlje. Zato u deklaraciji double x = c + 0.1; vrijedi da je c = 2 i, tj. vrijednosti varijable x su x = 2 i +0.1, i = 0,...,19. Iza toga, računamo (i pišemo) vrijednost cjelobrojnog izraza (int)(1000*x) = 1000 x. Prog2 2019, 0. predavanje p. 27/48

Konverzija double u int (3) nastavak int c = 1, i; for (i = 0; i < 20; ++i) { double x = c + 0.1; printf("%d\n", (int)(1000*x)); c *= 2; } Dakle, ovaj dio programa računa (i piše) vrijednost izraza Matematički ekvivalentno je 1000 (2 i +0.1), i = 0,...,19. 1000 2 i +100, i = 0,...,19, što je (očito) cijeli broj djeljiv sa 100. Prog2 2019, 0. predavanje p. 28/48

Konverzija double u int (3) rezultati Rezultati: za x = 2 i +0.1, i = 0,...,9, dobivamo i (int)(1000*x) 0 1100 1 2100 2 4100 3 8100 4 16 100 5 32 100 6 64 099 7 128 100 8 256 100 9 512 100 Prog2 2019, 0. predavanje p. 29/48

Konverzija double u int (3) rezultati (nast.) Rezultati: za x = 2 i +0.1, i = 10,...,19, dobivamo i (int)(1000*x) 10 1024099 11 2048100 12 4096100 13 8192100 14 16384099 15 32768100 16 65536100 17 131 072 100 18 262 144 099 19 524 288 100 Prog2 2019, 0. predavanje p. 30/48

Konverzija double u int (3) objašnjenje Neki rezultati su pogrešni! Na primjer, Za i = 6, umjesto 64100, dobivamo 64099. To je identično kao u prošlom primjeru. Razlog: Greška zaokruživanja kod računanja/prikaza broja x = 2 i +0.1 u tipu double. Zadatak. Iz prikaza brojeva zaključite za koje vrijednosti i dobivamo točne, odnosno, pogrešne rezultate, uz pretpostavku pravilnog zaokruživanja, zaokruživanja nadolje (prema 0), zaokruživanja nagore (prema ). Prog2 2019, 0. predavanje p. 31/48

Pokazivači Što će ispisati sljedeći odsječak programa? int a = 1; int *b; b = &a; *b = 5; printf("%d %d\n", a, *b); 5 5 Prog2 2019, 0. predavanje p. 32/48

Pokazivači rješenje Što će ispisati sljedeći odsječak programa? int a = 1; int *b; b = &a; *b = 5; printf("%d %d\n", a, *b); 5 5 Prog2 2019, 0. predavanje p. 33/48

Funkcije Što će ispisati sljedeći program? #include <stdio.h> int main(void) { int m, nzm(int, int); m = nzm(36, 48); printf("mjera = %d\n", m); } return 0; Prog2 2019, 0. predavanje p. 34/48

Funkcije (nastavak) pri čemu je: int nzm(int a, int b) { while (a!= b) if (a > b) a -= b; else b -= a; return a; } mjera = 12 Prog2 2019, 0. predavanje p. 35/48

Funkcije (nastavak) rješenje pri čemu je: int nzm(int a, int b) { while (a!= b) if (a > b) a -= b; else b -= a; return a; } mjera = 12 Oprez! Ova funkcija radi samo za prirodne brojeve a i b. Zato je, na početku, dobro dodati a = abs(a); b = abs(b); Prog2 2019, 0. predavanje p. 36/48

Polja Što će ispisati sljedeći program? #include <stdio.h> int main(void) { int array[] = {4, 5, -8, 9, 8, 0, -2, 1, 9, 3}; int index; index = 0; while (array[index]!= 0) ++index; printf("broj elemenata polja prije nule: %d\n", index); return 0; } Broj elemenata polja prije nule: 5 Prog2 2019, 0. predavanje p. 37/48

Polja rješenje Što će ispisati sljedeći program? #include <stdio.h> int main(void) { int array[] = {4, 5, -8, 9, 8, 0, -2, 1, 9, 3}; int index; index = 0; while (array[index]!= 0) ++index; printf("broj elemenata polja prije nule: %d\n", index); return 0; } Broj elemenata polja prije nule: 5 Prog2 2019, 0. predavanje p. 38/48

Pokazivači i polja Zapamtiti: Ime polja je sinonim za konstantni pokazivač koji sadrži adresu prvog elementa polja Polje može biti formalni (i stvarni) argument funkcije. U tom slučaju: ne prenosi se cijelo polje po vrijednosti (kopija polja!), već funkcija dobiva (po vrijednosti) pokazivač na prvi element polja. Unutar funkcije elementi polja mogu se dohvatiti i promijeniti, korištenjem indeksa polja. Razlog: aritmetika pokazivača (v. sljedeću stranicu). Prog2 2019, 0. predavanje p. 39/48

Pokazivači i polja nastavak Krenimo od deklaracija int a[10], *pa; Tada je: a = &a[0]. Ne samo to, pokazivaču možemo dodati i oduzeti indeks (tzv. aritmetika pokazivača ). Općenito vrijedi: a + i = &a[i], gdje je i neki cijeli broj. *(a + 1) = 10; /* ekviv. s a[1] = 10; */... pa = a; /* ekviv. s pa = &a[0]; */ pa = pa + 2; /* &a[2] */ pa++; /* &a[3] */ *(pa + 3) = 20; /* ekviv. s a[6] = 20; */ Prog2 2019, 0. predavanje p. 40/48

Pokazivači i polja (1) Što će ispisati sljedeći program? #include <stdio.h> int main(void) { int array[] = {4, 5, -8, 9, 8, 0, -2, 1, 9, 3}; int *array_ptr; array_ptr = array; while ((*array_ptr)!= 0) ++array_ptr; printf("broj elemenata polja prije nule: %d\n", array_ptr - array); return 0; } Broj elemenata polja prije nule: 5 Prog2 2019, 0. predavanje p. 41/48

Pokazivači i polja (1) rješenje Što će ispisati sljedeći program? #include <stdio.h> int main(void) { int array[] = {4, 5, -8, 9, 8, 0, -2, 1, 9, 3}; int *array_ptr; array_ptr = array; while ((*array_ptr)!= 0) ++array_ptr; printf("broj elemenata polja prije nule: %d\n", array_ptr - array); return 0; } Broj elemenata polja prije nule: 5 Prog2 2019, 0. predavanje p. 42/48

Pokazivači i polja (2) Što će ispisati sljedeći program? #include <stdio.h> #define MAX 10 int main(void) { int a[max]; int i, *p; p = a; for (i = 0; i < MAX; ++i) a[i] = i; printf("%d\n", *p); return 0; } 0 Prog2 2019, 0. predavanje p. 43/48

Pokazivači i polja (2) rješenje Što će ispisati sljedeći program? #include <stdio.h> #define MAX 10 int main(void) { int a[max]; int i, *p; p = a; for (i = 0; i < MAX; ++i) a[i] = i; printf("%d\n", *p); return 0; } 0 Prog2 2019, 0. predavanje p. 44/48

Polje kao argument funkcije Napišite funkcije unos i ispis te glavni program koji upisuje i ispisuje polje s maksimalno 100 elemenata. #include <stdio.h> #define MAX 100 void unos(int a[], int n) { int i; for (i = 0; i < n; ++i) scanf("%d", &a[i]); } void ispis(int *a, int n) { int i; for (i = 0; i < n; ++i) printf("%d\n", *a++); } Prog2 2019, 0. predavanje p. 45/48

Polje kao argument funkcije (nastavak) int main(void) { int n, polje[max]; /* Koliko ce se bajtova rezervirati? */ scanf("%d", &n); } unos(polje, n); ispis(polje, n); return 0; Za polje se rezervira 100 4 = 400 bajtova. Primjedba: Pri upisu podataka oni se upisuju na slijepo (ne zna se što se upisuje) loš stil programiranja. Prog2 2019, 0. predavanje p. 46/48

Rekurzivne funkcije Što će ispisati sljedeći program? #include <stdio.h> int f(int n) { if (n == 0) return 2; else return f(--n); } int main(void) { printf("%d\n", f(4)); return 0; } 2 Pitanje: što se ispiše ako napišemo f(n--)? Oprez! Zašto? Prog2 2019, 0. predavanje p. 47/48

Rekurzivne funkcije rješenje Što će ispisati sljedeći program? #include <stdio.h> int f(int n) { if (n == 0) return 2; else return f(--n); } int main(void) { printf("%d\n", f(4)); return 0; } 2 Pitanje: što se ispiše ako napišemo f(n--)? Oprez! Zašto? Prog2 2019, 0. predavanje p. 48/48