Download ppt - Op11 15

Transcript
Page 1: Op11 15

04/10/23 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

04/10/23 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

04/10/23 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

04/10/23 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

04/10/23 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

04/10/23 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 na ocena [0] Kada index i u funkciji prosek () uzme vrednost 4 tada je izraz x [4] ekvivalentan sa *(x+4).

Page 7: Op11 15

04/10/23 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

04/10/23 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