27
Programiranje 2 (550) Nizovi brojeva 1 Programiranje 2 Nizovi u C-u Programiranje 2 2 Sadržaj Jednodimenzionalni nizovi brojeva znakova Funkcije za rad sa stringovima Unos znaka Funkcije za rad sa znakovima Pretvaranje tipova podataka Višedimenzionalni nizovi Dvodimenzionalni nizovi brojeva Trodimenzionalni nizovi brojeva Dvodimenzionalni nizovi znakova

Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

  • Upload
    others

  • View
    13

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 1

Programiranje 2

Nizovi u C-u

Programiranje 2 2

Sadržaj� Jednodimenzionalni nizovi

� brojeva� znakova

� Funkcije za rad sa stringovima� Unos znaka� Funkcije za rad sa znakovima� Pretvaranje tipova podataka

� Višedimenzionalni nizovi� Dvodimenzionalni nizovi brojeva� Trodimenzionalni nizovi brojeva� Dvodimenzionalni nizovi znakova

Page 2: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 2

Programiranje 2 3

Jednodimenzionalni niz� Niz je složeni tip podataka koji sadrži kolekciju podataka istog tipa, a pojedini

elementi se označavaju imenom niza i cjelobrojnim izrazom (indeksom) koji označava poziciju elementa u nizu.

� Deklaracija jednodimenzionalnog niza:tip_podataka naziv_niza[broj_elemenata];

� broj_elemenata je konstanta!� Deklaracijom niza se u memoriji rezervira prostor za navedeni broj

elemenata određenog tipa podataka.

� Pristup elementu niza:naziv_niza[redni_broj_elementa]

� Redni brojevi elemenata niza u C-u počinje od 0. � Zadnji element u nizu je onaj s rednim brojem (broj_elemenata - 1)� Naziv niza predstavlja njegovu adresu.

Programiranje 2 4

Inicijalizacija jednod. niza brojeva� Postoji nekoliko načina inicijalizacije elemenata niza:

� Dodjela vrijednosti pojedinačno svakom elementu:

int x[5];

x[0] = 0;x[1] = 0;x[2] = 0;x[3] = 0;x[4] = 0;x[5] = 0;

Page 3: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 3

Programiranje 2 5

Inicijalizacija jednod. niza brojeva� Na početku programa se deklarira niz s određenim brojem

elemenata, a onda se kasnije u programu pojedinačnim elementima niza dodijeli vrijednost (for petlja):

int x[5], i;

for(i = 0; i < 5; i++)x[i] = 0;

Programiranje 2 6

Inicijalizacija jednod. niza brojeva� Pri deklaraciji niza se u vitičastim zagradama navedu vrijednosti

niza:int x[N] = {vr0, vr1, vr2, vr3, vr4};

// niz ima N elemenata, a inicijalizirano je prvih 5, ostali se postavljaju u 0

iliint x[] = {vr0, vr1, vr2, vr3, vr4};

// niz ima 5 elemenata i svi su inicijalizirani

int x[5] = {0,0,0,0,0};

int x[10] = {0,0,0,0,0};

int x[] = {0,0,0,0,0};

Page 4: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 4

Primjer� Što radi program?

Programiranje 2 7

Programiranje 2 8

Primjermain(){

int x[5]={3,5,7,9,11}, i;

printf(“ Početna adresa niza je %#x ili %d\n\n", x, x);for(i = 0; i < 5; i++)

printf(" x[%d] = %d\t &x[%d] = %#x = %d\n", i, x[i], i, &x[i], &x[i]);

}

Page 5: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 5

Primjer� Što radi program?

� Ukoliko je argument funkcije sizeof() ime niza ona vrača ukupan broj bajtova u memoriji koje zauzima taj niz.

Programiranje 2 9

Programiranje 2 10

Primjer� Napisati program koji uneseni cijeli broj razbija na dekadske

znamenke. Potrebno je ispisati svaku znamenku posebno i to u ISPRAVNOM redoslijedu.

Page 6: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 6

Programiranje 2 11

Zadatci za vježbe:16. Napisati program koji unosi 20 rezultata ocjena s kolokvija (sprema ih

u niz). Ocjene mogu biti od 1-5 i ako se unese krivi broj unos se ponavlja. Kada su ocjene unesene program računa histogram ocjena u 5 grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran.

17. Napisati program koji za uneseni niz od 10 cijelih brojeva:a) traži najmanji element niza;b) traži najveći element niza;c) sortira niz od najmanjeg prema najvećem elementu.

Programiranje 2 12

Nizovi znakova - stringovi� String je naziv za memorijski objekt koji sadrži niz znakova.

� Posljednji znak u nizu mora biti nulti znak ‘\0’ ili 0, zbog čega se stringovi još nazivaju ASCIIZ (ASCII znakovi + Zero) stringovi

� Sintaksa:char ime_var [broj_elemenata_niza];

Page 7: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 7

Programiranje 2 13

Nizovi znakova - stringovi� Inicijalizacija:

char prviString[] = {'D', 'o', 'b', 'a', 'r', ' ', 'd', 'a', 'n'};char drugiString[] = "Dobar dan";

� Ispravno:char prviString[] = {'D', 'o', 'b', 'a', 'r', ' ', 'd', 'a', 'n‘, ‘\0‘};

ilichar prviString[] = {'D', 'o', 'b', 'a', 'r', ' ', 'd', 'a', 'n‘, 0};

Programiranje 2 14

Nizovi znakova - stringovi� Ispis i unos stringa:

� Specifikator formata %sprintf(" %s", ime_stringa);

scanf(" %s", ime_stringa); // Bez adresnog operatora!!!

� Kod unosa stringa svi bijeli znakovi (razmak, tab, nova linija) se tretiraju kao prekid stringa.

char a[10];

scanf (" %s", a);

printf(" Unijeli ste string: %s", a);

//Što će biti ako se unese string "Zdravo svima"?

Page 8: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 8

Programiranje 2 15

Primjer� Napisati program koji broji koliko u stringu ima praznih mjesta, tabova

i prelazaka u novi red. � Može li se string za ovaj zadatak unijeti s tastatue?

Programiranje 2 16

Nizovi znakova - stringovi� Primjer:

� Definirati dva niza znakova:a) u programu prvome dodijeliti vrijednost “Ana” (ne kod deklaracije

varijable),b) drugom dodijeliti istu vrijednost koju ima i prvi (bez obzira o kojoj

se vrijednosti radi).

Page 9: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 9

Programiranje 2 17

Funkcije za rad sa stringovima� strlen – funkcija koja računa duljinu string (od prvog znaka, pa sve do

‘\0’ kojeg ne računa).size_t strlen (char *str); // size_t => unsigned int

char str[] = "Dobar Dan";

int x = strlen(str);

printf("%s sadrzi %d znakova.\n\n",str, x);

Programiranje 2 18

Funkcije za rad sa stringovima� strcpy – kopira jedan string u drugi.

char *strcpy (char *s, const char *t)

char str1[] = "Dobar Dan";

char str2[20];

// str2 = str1;

strcpy(str2, str1);

printf("String 2 je: %s \n\n",str2);

Page 10: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 10

Programiranje 2 19

Funkcije za rad sa stringovima� strcat – dodaje jedan string na kraju drugoga.

char *strcat (char *s, const char *t)

char str1[20] = “Danas je ”;

char str2[] = “cetvrtak.”;

strcat(str1, str2);

printf(“String 1 je: %s \n\n",str1);

Programiranje 2 20

Funkcije za rad sa stringovima� strcmp – uspoređuje dva stringa i pri tome vrača vrijednost:

� 0 – ako su stringovi jednaki;� > 0 – ako je ASCII vrijednost prvog različitog znaka u prvom

stringu > ASCII vrijednosti tog znaka u drugom stringu� < 0 – ako je ASCII vrijednost prvog različitog znaka u prvom

stringu < ASCII vrijednosti tog znaka u drugom stringu.

int strcmp (const char *s1, const char *s2 )

char s1[] = “abcd”;

char s2[] = “ABCD”;

char s3[] = “abd”;

int a,b,c;

a = strcmp(s1, s1);

b = strcmp(s1, s2);

c = strcmp(s1, s3);

Page 11: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 11

Programiranje 2 21

Funkcije za rad sa stringovima� strcmpi – uspoređuje dva stringa bez obzira na mala i velika slova.

Vrača vrijednosti kao i f-ja strcmp.

int strcmpi (const char *s1, const char *s2)

char s1[] = “abcd”;

char s2[] = “ABCD”;

char s3[] = “abd”;

int a,b,c;

a = strcmpi(s1, s1);

b = strcmpi(s1, s2);

c = strcmpi(s1, s3);

Programiranje 2 22

Funkcije za rad sa stringovima� strlwr – prebacuje sva slova u stringu u mala slova� strupr – prebacuje sva slova u stringu u velika slova

char *strlwr (char *s) char *strupr (char *s)

char s1[] = "Dobar Dan!123";

printf(" %s \n",strlwr(s1));

printf(" %s \n\n",strupr(s1));

Page 12: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 12

Programiranje 2 23

Funkcije za rad sa stringovima� strrev – obrće znakove u stringu.

char *strrev (char *s)

char s1[] = "Dobar Dan!";

strrev(s1);

printf(“Novi string je: %s \n\n",s1);

Programiranje 2 24

Funkcije za rad sa stringovima� strchr – pronalazi prvo pojavljivanje određenog znaka u stringu.� strrchr - pronalazi zadnje pojavljivanje određenog znaka u stringu.

� strncat – dodaje samo određeni broj znakova iz jednog u drugi string.� strncmp – uspoređuje n znakova nekog stringa a povratna vrijednost je

kao kod strcmp funkcije� strncpy – kopira određeni broj znakova iz jednog stringa u drugi.

� strset – mijenja sve znakove stringa u određeni znak.� strnset - mijenja n znakova stringa u određeni znak.

� strtok – dijeli string na podstringove ovisno o predefiniranimseparatorima.

� strstr – pronalazi prvo pojavljivanje podstringa u stringu.

Page 13: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 13

Programiranje 2 25

Funkcije za rad sa stringovima� strspn – pronalazi prvi znak u osnovnom stringu koji nije definiran u

podstringu (raspored znakova u podstringu nije bitan).� strcspn - pronalazi prvi znak u osnovnom stringu koji je definiran u

podstringu (raspored znakova u podstringu nije bitan).� strpbrk – vrača adresu prvog znaka osnovnog stringa koji je definiran

u podstringu (raspored znakova u podstringu nije bitan).� strerror – vraća adresu stringa kojeg interno generira kompajler za

dojavu greške u nekim sistemskim operacijama. Argument je obično globalna varijabla errno, čiju vrijednost također postavlja kompajler.

Programiranje 2 26

Unos znaka� getch i getche – koriste se za unos 1 znaka s tastature:

� getch - bez prikaza tog znaka na ekran;� getche – s prikazom tog znaka na ekranu.

� Ove funkcije ne trebaju ↵ kako bi se potvrdio unos.

� Sintaksa:int getch (void)int getche (void)

� Primjer:char a, b;

a = getch(); //unosi se ‘-’

printf("\n Unijeli ste znak %c”, a);

b= getche(); //unosi se ‘-’

printf("\n Unijeli ste znak %c\n\n", b);

Page 14: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 14

Programiranje 2 27

Unos znaka� getchar – se također koristi za unos 1 znaka s tastature, ali ona

nastavlja uzimati znakove s tastature sve dok se ne pritisne ENTER.

� Sintaksa:int getchar (void)

� Primjer:char c;c = getchar();// Unosi se "Dobar dan"

printf(" Unijeli ste: %c\n", c);

Programiranje 2 28

Primjer� Što će raditi programi ako se unese "Dobar dan"?

a)

b)

Page 15: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 15

Programiranje 2 29

Funkcije za rad sa znakovima� isalnum – testira je li neki znak dekadska znamenka ili slovo.� isalpha - testira je li neki znak slovo.� islower - testira je li znak malo slovo.� isupper - testira je li znak veliko slovo.� isdigit - testira je li neki znak dekadska znamenka ili slovo.� isxdigit - testira je li znak heksadecimalna znamenka.

� isascii – testira je li znak definiran u ASCII tablici.� iscntrl - testira je li znak kontrolni.� isgraph - testira je li se znak može ispisati.� ispunct - testira je li znak interpunkcija.� isspace - testira je li znak razmak.

Programiranje 2 30

Funkcije za rad sa znakovima� Sintaksa:

int ime_funkcije ( char znak )

� Funkcija vrača:� 0 – ako uvjet nije zadovoljen;� !=0 – ako je uvjet zadovoljen.

Page 16: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 16

Programiranje 2 31

Funkcije za rad sa znakovima� Primjer:

printf("1. %d %d %d\n\n",isalnum('5'), isalnum('a'), isalnum(10));

printf("2. %d %d %d\n\n",isalpha('5'), isalpha('a'), isalpha('A'));

printf("3. %d %d %d\n\n",islower('5'), islower('a'), islower('A'));

printf("4. %d %d %d\n\n",isupper('5'), isupper('a'), isupper('A'));

printf("5. %d %d %d\n\n", isdigit('5'), isdigit('a'), isdigit('A'));

printf("6. %d %d %d\n\n", isxdigit('5'), isxdigit('a'), isxdigit('A'));

Programiranje 2 32

Funkcije za rad sa znakovima� toascii – vrača ASCII vrijednost nekog znaka.� tolower – vrača ASCII vrijednost malog slova za zadano slovo.� toupper – vrača ASCII vrijednost velikog slova za zadano slovo.� Sintaksa:

int ime_funkcije ( char znak )� Primjer:

printf("1. Ascii vrijednost od %c je %d\n\n", 'd', toascii('d'));

printf("2. Malo slovo od %c je %c\n", 'D', tolower('D'));

printf("2. Malo slovo od %c je %c\n\n", '?', tolower('?'));

printf("3. Veliko slovo od %c je %c\n\n", 'd', toupper('d'));

Page 17: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 17

Programiranje 2 33

Pretvaranje tipova podataka� Za pretvorbu jednog tipa podataka u drugi koriste se f-je:

� atof() – pretvara niz znakova (ascii) u realan broj;� atoi() – pretvara niz znakova (ascii) u cijeli broj;� itoa() – pretvara cijeli broj u niz znakova.

� Sintaksa:double atof( const char *string );

int atoi( const char *string );

char * itoa( int x, char *string, int baza);� x - broj koji se želi pretvoriti u string;� string – adresa niza znakova u koji se spremaju znamenke broja;� baza – brojevna baza po kojoj se vrši pretvorba (u opsegu od 2-36)� povratna vrijednost je pokazivač na string.

Programiranje 2 34

Primjer� Što će raditi program ako se unese: 1.25 678 456 ↵↵↵↵

Page 18: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 18

Programiranje 2 35

Unos stringa s tastature� Na koji način je moguće unijeti string s tastature?

� scanf(" %s" , ime_stringa);

� char *gets( char *buffer );� Kao parametar uzima adresu niza znakova u koji će spremiti ono što se

unosi s tastature.� Vrača NULL ukoliko unos nije uspio ili argument ukoliko je.

� Što radi program ukoliko se s tastature unese: "Zdravo! Kako ste↵"?

� Po čemu se gets razlikuje od scanf-a?

Programiranje 2 36

Unos stringa s tastature� Što radi program ukoliko se unese: "3↵" " Zdravo! Kako ste↵"

Page 19: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 19

Programiranje 2 37

Primjer� Što će raditi program ako se unese: 1.25 678 ↵↵↵↵

Programiranje 2 38

Zadaci za vježbe:18. Napravi program koji uzima znakove s tastature (sa ili bez prikaza tih

znakova na ekranu) sve dok se ne unese znak ESC. Tada se izlazi iz programa.

19. Napravit program koji iz unesenog stringa stvara novi (u novoj varijabli), na način da iz prvog prebaci sve znakove osim brojeva.

20. Napraviti program koji uneseni string mijenja u 3 koraka i rezultat svakog ispisati. Smije se koristiti samo jedan string.1. U stringu trebaju ostati samo slova.2. Iz tog stringa treba izbaciti sve samoglasnike (velika i mala slova).3. Sva velika slova pretvoriti u mala i obrnuto.

21. Napravi program koji unesenu dekadsku vrijednost pretvara u heksadecimalnu, s tim da je znamenke potrebno ispisati svaku u svom redu i to u pravom rasporedu. Primjer riješiti bez korištenja f-je itoa().

Page 20: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 20

Programiranje 2

Višedimenzionalni nizovi� Višedimenzionalni nizovi su nizovi kojima se pristupa preko 2 ili više

indeksa.

� Deklaracija:

// dvodimenzionalni niz - ukupni broj el. niza = br_el1 * br_el2tip_podataka ime_niza[br_el1][br_el2];

// trodimenzionalni niz - ukupni broj el. niza = br_el1*br_el2*br_el3tip_podataka ime_niza[br_el1][br_el2][br_el3];

Programiranje 2

Dvodimenzionalni nizovi� Dvodimenzionalni nizovi se često koriste za rad s matricama.

� Primjer:int x[3][3];

// Matrični prikaz elemenata tog niza

x[0][0] x[0][1] x[0][2]

x[1][0] x[1][1] x[1][2]

x[2][0] x[2][1] x[2][2]

� Kako bi se jednoznačno moglo pristupiti svakom elementu matrice potrebno je navesti njegov redak i stupac.

ime_niza[br1][br2] // za dvodim. niz

Page 21: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 21

Programiranje 2

Dvodimenzionalni nizovi� Kako su dvodimenzionalni nizovi

raspoređeni u memoriji (npr. niz: int x[3][3])?

� Kako izračunati adresu određenog elementa niza (npr. x[a][b], ako je x matrica dimenzija R x S)?

// Memorijski prikaz

//adresa //raspored el.

1000 x[0][0]

1004 x[0][1]

1008 x[0][2]

1012 x[1][0]

1016 x[1][1]

1020 x[1][2]

1024 x[2][0]

1028 x[2][1]

1032 x[2][2]

&x[a][b] = x + (a*S + b) *sizeof(int)

Programiranje 2

Inicijalizacija dvodim. niza� Kod deklaracije niza:

� int x[3][4] = {{3, 8, 66, 12},{5, 11, 3, 7},{9, 0, 4, 5}};

iliint x[3][4] = {3, 8, 66, 12, 5, 11, 3, 7, 9, 0, 4, 5};

x[0][0] = 3 x[0][1] = 8 x[0][2] = 66 x[0][3] = 12

x[1][0] = 5 x[1][1] = 11 x[1][2] = 3 x[1][3] = 7

x[1][0] = 9 x[1][1] = 0 x[1][2] = 4 x[1][3] = 5

Page 22: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 22

Programiranje 2

Inicijalizacija dvodim. niza� U programu (unos s tastature, neka fiksna vrijednost)x[0][0] = 0

x[0][1] = 0

x[0][2] = 0

x[0][3] = 0

x[1][0] = 0

x[1][1] = 0

x[1][2] = 0

x[1][3] = 0

x[2][0] = 0

x[2][1] = 0

x[2][2] = 0

x[2][3] = 0

for(j=0; j<4; j++ )

x[0][j] = 0;

for(j=0; j<4; j++ )

x[1][j] = 0;

for(j=0; j<4; j++ )

x[2][j] = 0;

for(i=0; i<3; i++ )

for(j =0; j<4; j++ )

x[i][j] = 0;

Programiranje 2

Što radi program?int x[5][5];int a = 0, i, j;

for(i = 0; i<5; i++)for(j = 0; j<5; j++)

scanf(“%d”, &x[i][j]); // Svaki put se unosi 1

for(i = 0; i<5; i++)for(j = 0; j<5; j++)

a += x[i][j];

printf(“ a = %d”, a);

Page 23: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 23

Programiranje 2

Primjer:� Kako ispisati elemente dvodimenzionalne matrice ako želimo dobiti

prikaz (vrijednosti elemenata matrice su unaprijed zadane):

Programiranje 2

Primjer:� Napisati 3 linije koda koje elementima matrice A dodjeljuju slijedeće

vrijednosti:

=

432

321

210

A

Page 24: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 24

Programiranje 2

Trodimenzionalni nizovi� Kako deklarirati trodimenzinalni niz 3x3x3?

� int x[3][3][3];

� Koliko će on elemenata imati? � ukupan broj elemenata = 3 x 3 x 3 = 27

� Nabrojati indekse svih njegovih elemenata.x[0][0][0]x[0][0][1]x[0][0][2]

x[1][0][0]x[1][0][1]x[1][0][2]

x[2][0][0]x[2][0][1]x[2][0][2]

x[0][1][0]x[0][1][1]x[0][1][2]

x[1][1][0]x[1][1][1]x[1][1][2]

x[2][1][0]x[2][1][1]x[2][1][2]

x[0][2][0]x[0][2][1]x[0][2][2]

x[1][2][0]x[1][2][1]x[1][2][2]

x[2][2][0]x[2][2][1]x[2][2][2]

Programiranje 2

Trodimenzionalni nizovi� Kako inicijalizirati sve elemente trodim. niza na 0?

x[0][0][0]x[0][0][1]x[0][0][2]

x[1][0][0]x[1][0][1]x[1][0][2]

x[2][0][0]x[2][0][1]x[2][0][2]

x[0][1][0]x[0][1][1]x[0][1][2]

x[1][1][0]x[1][1][1]x[1][1][2]

x[2][1][0]x[2][1][1]x[2][1][2]

x[0][2][0]x[0][2][1]x[0][2][2]

x[1][2][0]x[1][2][1]x[1][2][2]

x[2][2][0]x[2][2][1]x[2][2][2]

for(i=0;i<3;i++)x[i][0][0]x[i][0][1]x[i][0][2]

for(i=0;i<3;i++)x[i][1][0]x[i][1][1]x[i][1][2]

for(i=0;i<3;i++)x[i][2][0]x[i][2][1]x[i][2][2]

for(i=0;i<3;i++)for(j=0;j<3;j++)

for(k=0;k<3;k++)x[i][j][k]

for(i=0;i<N;i++)for(j=0;j<M;j++)

for(k=0;k<K;k++)x[i][j][k] = 0;

for(i=0;i<3;i++)for(j=0;j<3;j++)

x[i][j][0]x[i][j][1]x[i][j][2]

Page 25: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 25

Programiranje 2

Zadaci za vježbe:22. Napisati program koji unosi jednu matricu (A dimenzija 3x3) i iz te

matrice računa matricu B = 5*A. Matricu B je potrebno ispisati.

23. Napisati program koji unosi jednu matricu (A dimenzija 3x3) i iz te matrice stvara matricu B = AT. Matricu B je potrebno ispisati.

24. Napisati program koji unosi dvije matrice (A i B dimenzija 3x3), a zatim računa matricu C = A + B i matricu D = A * B. Matrice C i D je potrebno ispisati.

Množenje matrica� D = A * B

Programiranje 2

d0,0 = a0,0 * b0,0 + a0,1 * b1,0 + a0,2 * b2,0

d0,1 = a0,0 * b0,1 + a0,1 * b1,1 + a0,2 * b2,1

d0,2 = a0,0 * b0,2 + a0,1 * b1,2 + a0,2 * b2,2

------------------------------------------------d1,0 = a1,0 * b0,0 + a1,1 * b1,0 + a1,2 * b2 ,0

d1,1 = a1,0 * b0,1 + a1,1 * b1,1 + a1,2 * b2,1

d1,2 = a1,0 * b0,2 + a1,1 * b1,2 + a1,2 * b2,2

------------------------------------------------d2,0 = a2,0 * b0,0 + a2,1 * b1,0 + a2,2 * b2,0

d2,1 = a2,0 * b0,1 + a2,1 * b1,1 + a2,2 * b2,1

d2,2 = a2,0 * b0,2 + a2,1 * b1,2 + a2,2 * b2,2

------------------------------------------------

for(j=0; j<3;j++)d0,j = a0,0 * b0,j + a0,1 * b1,j + a0,2 * b2,j

------------------------------------------------for(j=0; j<3;j++)

d1,j = a1,0 * b0,j + a1,1 * b1,j + a1,2*b2,j

------------------------------------------------for(j=0; j<3;j++)

d2,j = a2,0 * b0,j + a2,1 * b1,j + a2,2*b2,j

------------------------------------------------

for(i=0;i<3;i++)for(j=0; j<3;j++)

di,j = ai,0 * b0,j + ai,1 * b1,j + ai,2 * b2,j

for(i=0;i<3;i++)for(j=0; j<3;j++)

for(k=0;k<3;k++)d[i][j] += a[i][k] * b[k][i];

Page 26: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 26

Programiranje 2

Primjer:� Napisati kod koji generira matricu za igru mina ukoliko je polje

dimenzija NxN i na njemu ima N mina.1. Svim elementima matrice dodijeliti vrijednosti 0.2. Generirati N slučajnih pozicija na kojima se nalazi mina (njihova

vrijednost je -1).3. Za sva polja na kojima se ne nalazi mina izračunati koliko mina ima

na susjednim poljima.� Ispisati polja prije i nakon koraka 3.

Programiranje 2

Dvodimenzionalni nizovi znakova� Dvodimenzionalni nizovi znakova :

char ime_niza[N][M];

� Što radi dio koda?

char imena[5][20];

for(int i = 0; i < 5; i++)

scanf(" %s", imena[i]);

� Deklarira se N stringova (svaki duljine M), pri čemu se pojedinačnim stringovima pristupa:

ime_niza[0]ime_niza[1]…ime_niza[N-1]

Page 27: Programiranje 2 · grupa (koliko je bilo kojih ocjena) i ispisuje ga na ekran. 17. Napisati program koji za uneseni niz od 10 cijelih brojeva: a) traži najmanji element niza; b)

Programiranje 2 (550)

Nizovi brojeva 27

Programiranje 2

Zadaci za vježbe:25. Napisati program koji unosi 5 imena i zatim:

a) pronalazi indeks imena prvog po abecedi, te ispisuje indeks i ime;b) pronalazi indeks imena zadnjeg po abecedi, te ispisuje indeks i ime;c) sortira imena po abecedi i ispisuje ih.Pri tome rezultati pretraživanja ne smiju razlikovati velika i mala slova,tj. bez obzira je li ime uneseno velikim ili malim slovom treba biti naispravnom mjestu po abecedi.

Nizovi u C-u

KRAJ!!!