Staa Vujii as 11 Niz predstavlja kolekciju elemenata
- Slides: 48
Staša Vujičić Čas 11
Niz predstavlja kolekciju elemenata istog tipa. Primer deklaracije niza je: int niz[5]; /* niz od 5 elemenata tipa int*/ 2
Primer unosa vrednosti elemenata niza sa standardnog ulaza: for(i=0; i<5; i++) scanf("%d ", &a[i]); 3
Štampanje elemenata niza na standardni izlaz. for(i=0; i<5; i++) printf("%d ", a[i]); 4
#include <stdio. h> main() { /* Niz inicijalizujemo tako sto mu navodimo vrednosti u viticasnim zagradama. Dimenzija niza se odredjuje na osnovu broja inicijalizatora */ int a[] = {1, 2, 3, 4, 5, 6}; /* Isto vazi i za niske karaktera */ char s[] = {'a', 'b', 'c'}; /* Ekvivalentno prethodnom bi bilo char s[] = {97, 98, 99}; */ 5
Operator sizeof() je unarni operator koji se može primenjivati na podatke i tipove. Ako se primeni na tip T, tada je vrednost izraza sizeof(T) broj bajtova koji zauzima jedan podatak tog tipa. Ako se primeni na podatak (ili proizvoljan izraz), tada sizeof(izraz) ima vrednost broja bajtova koje zauzima podatak, imajući u vidu tip podatka (izraza). Operator sizeof daje vrednost tipa int. Vrednost izraza sizeof se računa u vreme prevođenja programa, jer je već tada jasno koja je veličina objekta na koji se primenjuje. /* Broj elemenata niza */ int a_br_elem = sizeof(a)/sizeof(int); int s_br_elem = sizeof(s)/sizeof(char); 6
/* Ispisujemo nizove */ int i; for (i = 0; i < a_br_elem; i++) printf("a[%d]=%dn", i, a[i]); for (i = 0; i < s_br_elem; i++) printf("s[%d]=%cn", i, s[i]); } 7
Program računa skalarni proizvod dva vektora, čije se celobrojne koordinate unose sa ulaza. Program demonstrira upotrebu nizova. #include <stdio. h> int main() { int a[100], b[100]; int i, n, s; 8
printf("Unesite dimenziju vektora: "); scanf("%d", &n); printf("Uneti koordinate prvog vektora: n"); for(i = 0; i < n ; i++) scanf("%d", &a[i]); printf("Uneti koordinate drugog vektora: n"); for(i = 0; i < n ; i++) scanf("%d", &b[i]); for(i = 0, s = 0; i < n ; i++) s += a[i] * b[i]; printf("Skalarni proizvod vektora: %dn", s); } 9
U C-u postoji jaka veza između pokazivača i nizova. Deklaracija int a[10]; definiše niz a veličine 10, odnosno blok od 10 susednih objekata u memoriji sa imenima a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]. Zapis a[i] ukazuje na i-ti element niza a. 10
Ako je pa pokazivač na neki ceo broj deklarisan pomoću int *pa; tada dodeljivanje pa = &a[0]; podešava pa da pokazuje na nulti element niza a, to jest, pa sadrži adresu od a[0]. 11
Kako je ime niza sinonim za adresu početnog elementa niza, dodela pa = &a[0]; se može napisati i kao pa = a; Ako pa pokazuje na određeni element nekog niza, tada pa+1 pokazuje na naredni element pa tako pa+i pokazuje i elemenata iza pa, a pa-i na i elemenata ispred pa. 12
Dakle, ako pa pokazuje na a[0] onda je *(pa+i) zapravo sadržaj i-tog elementa niza to jest isto je što i a[i]. pa+i je isto što i &pa[i]. Ime niza se ponaša kao pokazivač na početni element niza. Razlika između pokazivača p i a je u tome što a nije pokazivačka promenljiva, pa samim tim ne možemo da joj promenimo vrednost. 13
Drugim rečima, izraz p++ je dozvoljen (pomera pokazivač p za jednu poziciju u nizu udesno) a++ nije dozvoljen, jer a nije promenljiva pokazivačkog tipa, već tipa "niz celih brojeva” koja je samo automatski konvertovana u pokazivač na prvi član niza. 14
#include <stdio. h> int main() { int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, * p = a; int i; 15
printf("Vrednost izraza a (tipa int *): %pn", a); printf("Vrednost izraza p (tipa int *): %pn", p); printf("Vrednost izraza *a (tipa int): %dn", *a); printf("Vrednost izraza *p (tipa int): %dn", *p); Vrednost izraza a (tipa int *): 0 xbfd 1 f 11 c p (tipa int *): 0 xbfd 1 f 11 c *a (tipa int): 0 *p (tipa int): 0 16
for(i = 0; i < 10; i++) { printf("Vrednost izraza printf("Vrednost izraza } &a[%d] (tipa int *): %pn", i, &a[i]); &p[%d] (tipa int *): %pn", i, &p[i]); (a + %d) (tipa int *): %pn", i, a + i); (p + %d) (tipa int *): %pn", i, p + i); a[%d] (tipa int): %dn", i, a[i]); p[%d] (tipa int): %dn", i, p[i]); *(a + %d) (tipa int): %dn", i, *(a + i)); *(p + %d) (tipa int): %dn", i, *(p + i)); } 17
Vrednost Vrednost Vrednost Vrednost izraza izraza izraza izraza &a[0] (tipa int *): 0 xbfd 1 f 11 c &p[0] (tipa int *): 0 xbfd 1 f 11 c (a + 0) (tipa int *): 0 xbfd 1 f 11 c (p + 0) (tipa int *): 0 xbfd 1 f 11 c a[0] (tipa int): 0 p[0] (tipa int): 0 *(a + 0) (tipa int): 0 *(p + 0) (tipa int): 0 &a[1] (tipa int *): 0 xbfd 1 f 120 &p[1] (tipa int *): 0 xbfd 1 f 120 (a + 1) (tipa int *): 0 xbfd 1 f 120 (p + 1) (tipa int *): 0 xbfd 1 f 120 a[1] (tipa int): 1 p[1] (tipa int): 1 *(a + 1) (tipa int): 1 *(p + 1) (tipa int): 1. . . 18
Program obrće elemente niza. Program demonstrira upotrebu nizova, uz korišćenje indeksne (nizovske) sintakse. #include <stdio. h> #define MAX 100 int main() { int n; int a[MAX]; int i, j; 19
/* Unosimo broj elemenata */ printf("Uneti broj elemenata niza (<= 100): "); scanf("%d", &n); /* Proveravamo da li je prekoraceno ogranicenje */ if(n > MAX) n = MAX; /* Unosimo elemente niza */ printf("Uneti elemente niza: n"); for(i = 0 ; i < n ; i++) scanf("%d", &a[i]); 20
/* Prikaz niza */ printf("Uneli ste niz: n"); for(i = 0 ; i < n ; i++) printf("%d ", a[i]); printf("n"); /* Obrcemo niz */ for(i = 0, j = n - 1 ; i < j ; i++, j--) { int t = a[i]; a[i] = a[j]; a[j] = t; } 21
/* Prikaz niza */ printf("Niz nakon obrtanja: n"); for(i = 0 ; i < n ; i++) printf("%d ", a[i]); printf("n"); } 22
#include <stdio. h> #define MAX 100 int main() { int n; int a[MAX]; int *p, *q; /* Unosimo broj elemenata */ printf("Uneti broj elemenata niza: "); scanf("%d", &n); 23
/*Proveravamo da li je prekoraceno ogranicenje*/ if(n > MAX) n = MAX; /* Unosimo elemente niza */ printf("Uneti elemente niza: n"); for(p = a ; p - a < n ; p++) scanf("%d", p); /* Prikaz niza */ printf("Uneli ste niz: n"); for(p = a ; p - a < n ; p++) printf("%d ", *p); printf("n"); 24
/* Obrcemo niz */ for(p = a, q = a + n - 1 ; p < q ; p++, q--) { int t = *p; *p = *q; *q = t; } /* Prikaz niza */ printf("Niz nakon obrtanja: n"); for(p = a ; p - a < n ; p++) printf("%d ", *p); printf("n"); } 25
Program za uneti datum utvrđuje redni broj tog dana u datoj godini. Program demonstrira upotrebu nizova, kao i veze nizova i pokazivača. #include <stdio. h> int main() { int obicna[12] = {31, 28, 31, 30, 31}; int prestupna[] = {31, 29, 31, 30, 31}; 26
int dan, mesec, godina; int i, *tekuca; int dan_u_godini = 0; printf("Uneti datum u formatu dd: mm: yyyy: "); scanf("%d: %d", &dan, &mesec, &godina); /* Proveravamo da li je godina prestupna */ if(godina % 400 == 0 || (godina % 100 != 0 && godina % 4 == 0)) tekuca = prestupna; else tekuca = obicna; 27
/* Sumiramo dane protekle prethodnih meseci. Indeks ide od 0 do mesec - 2, zato sto indeksi u C -u pocinju od 0. Npr, za dan u mesecu martu (treci mesec) treba sabrati broj dana u januaru i februaru (tj. indeks u petlji treba ici od 0 do 1, ukljucujuci i jednicu). */ for(i = 0 ; i < mesec - 1 ; i++) dan_u_godini += tekuca[i]; /* Nakon toga jos treba dodati broj proteklih dana u tekucem mesecu */ dan_u_godini += dan; printf("Uneti datum je %d. dan u godinin", dan_u_godini); } 28
Nizovi se prenose u funkciju tako što se prenese adresa njihovog početka. Iz tog razloga oni se MOGU MENJATI u okviru funkcije. Sve nizove osim niski karaktera (stringova) neophodno je prenositi zajedno sa dimenzijom niza. 29
Funkcija za ispis niza brojeva demonstracija prenosa niza brojeva u funkciju. 30
#include <stdio. h> void print_array(int a[], int n) { int i; for (i = 0; i < n; i++) printf("%d ", a[i]); putchar('n'); } 31
main() { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; print_array(a, sizeof(a)/sizeof(int)); } Izlaz: 123456789 32
Skalarni proizvod dva niza brojeva. #include <stdio. h> long mnozi(int x[], int y[], int n); main() { int a[]={1, 2, 3, 4, 5, 6}, b[]={8, 7, 6, 5, 4, 3}; printf("Skalarno a*b= %ldn", mnozi(a, b, 6)); } 33
long mnozi(int x[ ], int y[ ], int n) { int i; long suma=0; for(i=0; i<n; i++) suma=suma+x[i]*y[i]; return suma; } Izlaz: Skalarno a*b= 98 34
Program unosi realne brojeve sa ulaza, i računa zbir i proizvod elemenata, kao i najveći i najmanji element u nizu. #include <stdio. h> #define MAX 100 35
/* Funkcija racuna zbir elemenata niza */ double zbir(double a[], int n) { double s = 0; int i; /* Sumiramo n elemenata niza. */ for(i = 0; i < n ; i++) s=s+a[i]; return s; } 36
/* Funkcija racuna proizvod elemenata niza */ double proizvod(double a[], int n) { double p = 1; /* Mnozimo n elemenata niza */ for(; n ; n--) p *= *a++; return p; } 37
/* Funkcija racuna najveci element niza */ double max(double *a, int n) { double max = *a; /* Odredjujemo najveci element */ for(a++, n-- ; n > 0 ; a++, n--) if(*a > max) max = *a; return max; } 38
/* Funkcija racuna najmanji element niza */ double min(double *a, int n) { double min = a[0]; int i; /* Odredjujemo najmanji element */ for(i = 1 ; i < n ; i++) if(a[i] < min) min = a[i]; return min; } 39
int main() { double a[MAX]; int n , i; /* Ucitavamo dimenziju niza */ printf("Uneti broj elemenata niza (<= 100): "); scanf("%d", &n); /* Proveravamo da li je dimenzija veca od MAX */ if(n > MAX) n = MAX; /* Ucitavamo elemente niza */ for(i = 0; i < n ; i++) scanf("%lf", a + i); 40
/* Pozivamo gornje funkcije i prikazujemo vrednosti */ printf("Zbir elemenata niza je: %5. 3 fn", zbir(a, n)); printf("Proizvod elemenata niza je: %5. 3 fn", proizvod(a, n)); printf("Najveci element u nizu je: %5. 3 fn", max(a, n)); printf("Najmanji element u nizu je: %5. 3 fn", min(a, n)); } 41
Program zamenjuje susedne elemente niza na parnim i neparnim pozicijama. Program demonstrira prenos nizova po adresi. #include <stdio. h> /* Deklaracije funkcija */ void zameni(int a[], int n); void prikazi(int a[], int n); int main() { int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int n = sizeof(a)/sizeof(int); 42
prikazi(a, n); zameni(a, n); prikazi(a, n); return 0; } /* Funkcija zamenjuje susedne elemente niza na parnim i neparnim pozicijama. */ void zameni(int a[], int n) { int i; for(i = 0 ; i < n - 1 ; i += 2) { int t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; } } 43
/* Funkcija prikazuje niz */ void prikazi(int a[], int n) { int i; for(i = 0 ; i < n ; i++) printf("%d ", a[i]); printf("n"); } 44
Program generiše niz Fibonačijevih brojeva. Program demonstrira vraćanje podataka nizovskog tipa iz funkcije. #include <stdio. h> #define MAX 46 45
/* Funkcija izracunava prvih n Fibonacijevih brojeva i smesta ih u niz a */ void fibonaci(int a[], int n) { int i; for(i = 0 ; i < n ; i++) if(i < 2) a[i] = 1; else a[i] = a[i - 1] + a[i - 2]; } 46
/* Funkcija prikazuje niz */ void prikazi(int a[], int n) { int i; for(i = 0 ; i < n ; i++) printf("%d ", a[i]); printf("n"); } 47
int main() { int f[MAX]; int n; /* Ucitavamo dimenziju niza */ printf("Uneti broj Fibonacijevih brojeva (<=46): "); scanf("%d", &n); /* Proveravamo prekoracenje */ if(n > MAX) n = MAX; /* Pozivamo funkciju fibonaci() koja generise niz Fibonacijevih brojeva, i smesta ih u niz f. */ fibonaci(f, n); /* Prikazujemo niz */ prikazi(f, n); } 48
- Nernstova jednacina
- Staa mata
- šta predstavlja usluživanje u širem smislu
- Geometrijska tijela bojanka
- Prelazni metali
- Periodni sistem elemenata prezentacija
- Valencije
- Periodni zakon
- Istorija periodnog sistema elemenata
- Mendeljejev zakon periodicnosti
- Halogeni i halkogeni elementi
- Jedinjenja bora
- Jednostavni strujni krug
- Elementi 14 grupe periodnog sistema
- Rasprostranjenost elemenata u prirodi
- Odnos masa elemenata
- Planovi i vrste kompozicija prema rasporedu elemenata
- 18*17*16
- Naponski niz metala
- Ana terzic
- Chcę raczej miłosierdzia niż ofiary
- Akt koji silazi niz stepenice
- Elektrokemijski niz
- Kipi kasza kipi groch piosenka
- Kakve su recenice po sastavu
- Alkohol i metal
- Inteligencja niższa niż przeciętna
- Problemski zadaci matematika
- Marcel duchamp akt koji silazi niz stepenice
- Naponski niz metala
- Balladyna zadania egzaminacyjne
- Fibonaccijev niz
- Numerički nizovi
- Poraki za dobro utro
- Lymanov niz
- Milosc twa glebsza niz ocean bez dna
- Akt silazi niza stube br. 2
- Geometrijski red
- Bowenov niz
- Kako nastaju minerali
- Ciekawostki o archimedesie
- Kąt ostry ma mniej niż
- Dehidrohalogenovanje
- Metan etan propan butan heksan heptan oktan nonan dekan