8
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

Op11 15

Embed Size (px)

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

Page 1: Op11 15

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

Page 2: Op11 15

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…

Page 3: Op11 15

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);

Page 4: Op11 15

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);• }

Page 5: Op11 15

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)

Page 6: Op11 15

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).

Page 7: Op11 15

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.

Page 8: Op11 15

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