190 likes | 411 Views
Uvod u programiranje I. jesen/zima 2007. Nizovi i pokazivači. Ime niza je (specijalni) pokazivač int a[100]; Rezerviše 100 lokacija za int vrednosti Pravi pokazivač int *a; Izvršava a=&a[0];. a. 0. 1. 2. 3. 4. 98. 99. Nizovi i pokazivači. int a[100];
E N D
Uvod u programiranje I jesen/zima 2007
Nizovi i pokazivači • Ime niza je (specijalni) pokazivač • int a[100]; • Rezerviše 100 lokacija za int vrednosti • Pravi pokazivač int *a; • Izvršava a=&a[0]; a 0 1 2 3 4 98 99 . . . Uvod u programiranje I
Nizovi i pokazivači • int a[100]; • a daje adresu prvog elementa (sa indeksom 0): *a je isto što i a[0] • a + 1 daje adresu drugog elementa (sa indeksom 1): *(a+1) je isto što i a[1] • a + 2 daje adresu trećeg elementa (sa indeksom 2): *(a+2) je isto što i a[2] • itd. • ane možemo promeniti: a=&x; /* NE */ Uvod u programiranje I
Nizovi i pokazivači #include <stdio.h> main() { char niz[5]={’T’,’E’,’S’,’T’,’!’}; char *zp=niz; int i; for (i=0; i<5; i++) { printf(”%d %c %c %c\n”,i,niz[i],*(niz+i),*zp); zp++; } } Uvod u programiranje I
Stringovi • Nizovi znakova između ” i ” • ”Zdravo svima” ’Z’,’d’,’r’,’a’,’v’,’o’,’ ’,’s’,’v’,’i’,’m’,’a’,’\0’ • Stringovi se čuvaju kao nizovi znakova u susednim memorijskim lokacijama, ali sa završnim znakom ’\0’(NULL) Uvod u programiranje I
Stringovi • String se predstavlja adresom prvog znaka • char *str; ... str = ”Zdravo svima”; ... printf(”%s”, str); /* Zdravo svima */ str[6] = ’\0’; /* *(str + 6)=’\0’; */ printf(”%s”, str); /* Zdravo */ Uvod u programiranje I
Ulaz i izlaz stringova char str[100] = ”Proba”; ... printf(”Unesite jedan red teksta > ”); /* Zdravo svima\n */ scanf(”%s”, str); /* ne &str */ /* str=”Zdravo” (do prvog ’ ’) */ ... printf(”Unesite jedan red teksta > ”); /* Zdravo svima\n */ gets(str); /* str=”Zdravo svima” (do ’\n’) */ puts(str); /* ’\0’ se zamenjuje sa ’\n’ */ Uvod u programiranje I
Gotove funkcije za stringove • #include <string.h> • strlen() za dužinu stringa char s[100]; int n; ... gets(s); /* s=”Zdravo svima” */ n = strlen(s); /* n=12(’\0’ se ne broji) */ Uvod u programiranje I
Gotove funkcije za stringove • strcpy() za kopiranje stringa char kopija[100], orig[100]; ... gets(orig); /* orig=”Zdravo svima” */ strcpy(kopija, orig); /* kopija=”Zdravo svima” */ Uvod u programiranje I
Gotove funkcije za stringove • strcat() za dodavanje stringa drugom stringu char s1[100], s2[100]; ... gets(s1); /* Zdravo svima\n */ /* s1=”Zdravo svima” */ gets(s2); /* koliko vas ima\n */ /* s2=”koliko vas ima” */ strcat(s1, s2); /* s2 dodaje na s1 i rezultat ide u s1 */ /* s1=”Zdravo svimakoliko vas ima” */ Uvod u programiranje I
Gotove funkcije za stringove • strcmp() za upoređivanje dva stringa char s1[100], s2[100]; int n; ... n = strcmp(s1, s2); /* n=0 ako su s1 i s2 isti */ /* n≠0 ako su s1 i s2 razliciti */ Uvod u programiranje I
Gotove funkcije za stringove • Primer: brojač redova i znakova teksta /* broji redove i znakoveteksta*/ #include <stdio.h> #include <string.h> main() { charred[100]; /* jedan red teksta */ char*p; /* rezultat gets() */ /* gets() vraća pokazivac NULL za kraj ulaza */ int nred=0, nznak=0; ... } Uvod u programiranje I
Gotove funkcije za stringove /* ... */ puts(”Unesite svoj tekst i na kraju”); puts(”signalizirajte zavrsetak ulaza.”); puts(”> ”); while ((p =gets(red)) != NULL) { nred++; nznak = nznak + strlen(red) + 1; /* broji ’\n’ */ puts(”> ”); } printf(”\nStatistika teksta:\n”); printf(”redova=%d,znakova=%d\n”, nred, nznak); Uvod u programiranje I
Funkcije • Ideja: automobil • Veliki sistem se deli u manje delove • Manje delove je lakše konstruisati, menjati i zameniti • Manji delovi se mogu nezavisno izrađivati • Određeni delovi međusobno komuniciraju da bi ostvarili namenu sistema (primer: volan i točkovi) Uvod u programiranje I
Funkcije • Veliki program se deli u manje delove • Manje delove je lakše konstruisati, menjati i zameniti • Manji delovi se mogu nezavisno izrađivati • Određeni delovi međusobno komuniciraju da bi ostvarili namenu programa Uvod u programiranje I
Funkcije • Glavni sastavni delovi programa se nazivaju potprogrami, moduli, procedure, funkcije, rutine, ... • U C-u se ti delovi nazivaju funkcije • Gotove (bibliotečke) funkcije: printf, scanf, gets, puts, strlen, ... • Korisničke funkcije • Funkcije međusobno komuniciraju pozivanjem jedna drugu Uvod u programiranje I
Funkcije C program main() ... fun1(); ... pozivi funkcija fun1(...) fun2(); fun2(...) Uvod u programiranje I
Funkcije • Izvršavanje funkcija C program main() fun1(...) fun2(...) ... fun2(); fun1(); ... Uvod u programiranje I
Funkcije • Prednosti funkcija • Manje delove programa (funkcije) je lakše napisati i testirati • Funkcije se mogu nezavisno i paralelno pisati od strane više programera • Funkcije se mogu više puta koristiti (biblioteke funkcija) • Funkcije smanjuju ukupnu veličinu programskog koda Uvod u programiranje I