Op11 15

Preview:

DESCRIPTION

Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva. Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja

Citation preview

3/28/2011 1

Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...

• Prenošenja nizova kao argumenata može se analizirati na problemu određivanja broja studenata koji su imali natprosečne rezultate na proveri znanja iz osnova programskog jezika C.

• Algoritam ovog problema se može razložiti na sledeće module

Učitavanje vrednosti elemenata niza

Izračunavanje prosečnog rezultata

Prebrojavanje natprosečnih rezultata

Ispis izlaznog izveštaja

3/28/2011 2

Example No ….• Main()• Int n,i,broj,ocena[50]; /*niz od 50 elemenata*/• Float prosek();• Print('\nUnesi broj takmicara:');• Scan(%d',&n);• /*ucitavanje elemenata niza*/• print('\nUnesi rezultate:\n');• for (i:=0;i<n;i++)• {• print('ocena[%d]+',i);• scan('%d”,&ocena[i])• }

• To be continue…

3/28/2011 3

Contnue….• /*prebrojavanje natprosecnih rezultata*/• broj=0• for(i=0;i<n;i++)• if(ocena[i]>prosek(ocena,n))• broj++;• printf(''prosecan rezultat je:%f.\n'',prosek(ocena,n));• printf (''natprosecne rezultate je imalo:%d takmicara.\n'',broj);• }• Float prosek(int x [],int n)• {• int i,suma;• suma=0;• for(i=0;i<n;suma+=x[i],i++);• return((float)suma/n);

3/28/2011 4

Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...

• Pri definiciji funkcije prosek() koja se poziva iz main () deklaracija Int x[]

• kreira, ne niz, već pokazivač na niz• Float prosek(int x [],int n)• {• int i,suma;• suma=0;• for(i=0;i<n;suma+=x[i],i++);• return((float)suma/n);• }

3/28/2011 5

Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...

• Poziv funkcije

• Prosek (ocena,n) sadrži ime ocena koje predstavlja adresu nultog elementa od najviše 50 elemenata.

• Time se pri pozivu funkcije predaje pokazivačka konstanta (adresa nultog elementa niza)

• Ocena = &ocena[0]

• To znači da je formalni parametar funkcije pokazivačkog tipa pa se u funkciji prosek() može izvršiti deklaracija na sledeći način

• prosek(int *x,int n)

3/28/2011 6

Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...

• Operatori • Int x [];• Int*x;• Su ekvivalentni jer oba deklarišu promenljivu x kao pokazivač

na niz celih brojeva • ... Operatori koji u funkciji prosek () koriste pokazivač *X

rade sa nizom ocena koji se nalazi u telu funkcije main()Poziv funkcije inicijalizuje pokazivač X tako da pokazuje naocena [0] Kada index i u funkciji prosek () uzme vrednost 4 tada je izraz x [4] ekvivalentan sa *(x+4).

3/28/2011 7

Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...

• Znači pošto (x+0) pokazuje na ocena [0] to x+4 pokazuje na ocena [4] Prenos jednodimenzionalnih nizova se ostvaruje navođenjem imena niza u pozivu funkcije bez ikakvog indeksa. Na ovaj način u funkciju se prenosi informacija (adresa ) o lokaciji niza u pozivajućoj funkciji.

3/28/2011 8

Funkcije, nizovi, pokazivači, parametri, prenošenje argumenata ...

• Čak i deklaracija x [100] ima isto značenje kao i x [] jer C kompajler generiše kod koji funkciji predaje pokazivač tako da je beznačajna specificirana dužina niza.

• X== &x[0] • X +0== &x[0] • X+2 ==&x[2] /*jer su im iste adrese*/• *(x+2) == x[2] /*jer su im iste vrednosti*/• *(x+i) == x[i]• Prema tome jednodimenzionalni nizovi se prenose

isključivo po adresi

Recommended