230 likes | 384 Views
Uvod u programiranje I. jesen/zima 2007. Nizovi. Osnovni tipovi podataka int, float, char, ... Promenljive osnovnih tipova sadrže samo jednu vrednost Složeni tipovi podataka Nizovi, strukture, ... Promenljive složenih tipova sadrže više od jedne vrednosti. Nizovi. Primer
E N D
Uvod u programiranje I jesen/zima 2007
Nizovi • Osnovni tipovi podataka • int, float, char, ... • Promenljive osnovnih tipova sadrže samo jednu vrednost • Složeni tipovi podataka • Nizovi, strukture, ... • Promenljive složenih tipova sadrže više od jedne vrednosti Uvod u programiranje I
Nizovi • Primer • Rezultati ispita za 100 studenta • int st1, st2, ..., st100; • int st[100]; • st[0], st[1], st[2], ..., st[99] 0 1 2 3 4 98 99 . . . st 89 75 93 68 77 65 92 Uvod u programiranje I
Nizovi • Pojedinačni podatak niza se naziva element niza • Svaki element niza ima redni broj koji se naziva indeks elementa • Indeksi niza počinju od 0, ne od 1 Uvod u programiranje I
Nizovi • Definisanje nizova • tip-elem ime-niza[duz-niza] • int st[100]; • char imeprez[30]; • tip-elem : neki od tipova • ime-niza : identifikator • duz-niza : ceo broj Uvod u programiranje I
Nizovi • Primer: srednja vrednost ocena na ispitu /* srednja vrednost ocena na ispitu */ #include <stdio.h> #defineMAXST 200 /* max broj studenata */ main() { int st[MAXST]; /* ocene studenata */ int n; /* broj studenata */ int suma; /* zbir ocena studenata */ int i; ... } Uvod u programiranje I
Nizovi /* ... */ printf(”Unesite broj studenata: ”); scanf(”%d”, &n); suma = 0; printf(”Unesite ocene za %d studenta\n”, n); for (i=0; i<n; i++) { printf(”student %3d > ”, i+1); scanf(”%d”, &st[i]); suma = suma + st[i]; } printf(”Srednja ocena je %6.2f\n”, (float)suma/n); Uvod u programiranje I
Nizovi • Indeks može biti celobrojni izraz • st[(i+1)/2]; • [] je operator kojim se najpre izračunava izraz unutar njega, a zatim se pristupa odgovarajućem elementu niza • Rezultat operatora [] mora biti u granicama niza, inače dolazi do greške • Inicijalizacija niza • int dum[12] = {31,28,31,30,31,30, 31,31,30,31,30,31} /* dum[0]=31, dum[1]=28, ... dum[11]=31 */ Uvod u programiranje I
main() { int n=17; float x=2.34; ... scanf(”...”, &x); ... } adrese memorija promenljive Pokazivači 0 1 . . . 7806 17 n . . . 8000 2.34 x . . . Uvod u programiranje I
Pokazivači • Pokazivači su memorijske adrese • Moguće vrednosti pokazivačkog tipa podataka su adrese memorijskih lokacija • Dozvoljene operacije pokazivačkog tipa su “sabiranje”, “oduzimanje”, ... • Svaki osnovni tip (int, char, float, ...) ima odgovarajući pokazivački tip (int *, char *, float *, ...) Uvod u programiranje I
Pokazivači • Definisanje pokazivača • tip-podatka *ime-pokazivača • int *ip; • char *cp; • double *dp; • tip-podatka : neki od tipova • ime-pokazivača : identifikator Uvod u programiranje I
main() { int n=17; float x=2.34; int *ip; ... ip = &n; ... } adrese memorija promenljive Pokazivači 0 1 . . . 7806 17 n . . . 8000 2.34 x 7806 ip Uvod u programiranje I
Pokazivači • Operatori za rad sa pokazivačima • & : određuje adresu memorijske lokacije na osnovu imena promenljiva • * : određuje memorijsku lokaciju na osnovu adrese (indirektno adresiranje preko adrese promenljive, nasuprot direktnom adresiranju preko imena promenljive Uvod u programiranje I
Pokazivači • Dodela vrednosti pokazivačima int x; float y; int *ip; .... ip = &x; /* OK */ ip = &y; /* GRESKA */ ip = 1000; /* GRESKA */ ip = (int *)1000; /* OK */ Uvod u programiranje I
Pokazivači • Prikazivanje vrednosti pokazivača int x; int *ip; .... ip = &x; printf(”Adresa x koju ip sadrzi: %p\n”, ip); Uvod u programiranje I
Pokazivači • Dodela početne vrednosti pokazivačima int x; int *ip = &x; int *iq = NULL; .... printf(”Adresa x koju ip sadrzi: %p\n”, ip); Uvod u programiranje I
Pokazivači • Operator * • Omogućuje indirektno adresiranje preko adrese promenljive, nasuprot direktnom adresiranju preko imena promenljive • Operator indirektnog adresiranja ili operator dereferenciranja pokazivača Uvod u programiranje I
main() { int n=17; int *p=&n; ... *p = 23; printf(”...”, n); /* n = 23 */ ... } Pokazivači n 17 p n 23 p Uvod u programiranje I
Pokazivači • Pet značenja znaka * • /* ... */ : komentar • a = b*c : množenje • int *p : definisanje pokazivačkog tipa • *p = 23 : lokacija na koju pokazuje p • x = *p : sadržaj lokacije na koju pokazuje p Uvod u programiranje I
Pokazivači main() { int n=17, m=2; int *p=&n; ... *p = n*m; /* n = 34 */ m = 2*(*p); /* m = 2·n = 68 */ ... } Uvod u programiranje I
Pokazivači • Dozvoljene operacije sa pokazivačima • Dodela vrednosti jednog pokazivača drugom istog tipa • Sabiranje (oduzimanje) pokazivača i celog broja • Upoređivanje vrednosti dva pokazivača • Upoređivanje vrednosti pokazivača sa nulom Uvod u programiranje I
Pokazivači int *p, *ip; double *q; char *r; ... p = p+1; /* p se uvećava za 4 (bajta) */ p = p+3; /* p se uvećava za 3·4 (bajtova) */ q = q+1; /* q se uvećava za 8 (bajtova) */ r = r+1; /* r se uvećava za 1 (bajt) */ ... Uvod u programiranje I
Pokazivači p = p - ip; /* OK, broj int vrednosti */ /* izmedju adresa p i ip: */ /* (p – ip)/4 */ p = p + ip; /* GRESKA */ ... p = ip; /* OK */ p = q; /* GRESKA */ r = NULL; /* OK */ ... if (p == ip) ... if (p != NULL) *p = 17; Uvod u programiranje I