| free hosting image hosting hosting reseller online album e-shop famous people | ||
![]() ![]() |
||
|
|
Kurs za programirawe vo C
|
|
|
|
Lekcija 7
7-1Funkciski argumenti
Vo prethodnata lekcija vidovme kako mo`eme da pratime edine~na vrednost do funkciskiot argument. Vsu{nost,mo`eme da koristime pove}e od eden argument vo funkcija.Primerot go poka`uva toa:
#include <stdio.h> int min(int a,int b); main() { int m; m=min(3,6); printf(“Minimum e %d”,m); returno 0; } int min (int a,int b) { if (a<b) return a; else return b; }
Kako {to gledate mo`ete da gi dodadete va{ite promenlivi vo listata na argumenti mnogu lesno.Funkciskiot prototip e kopija na funkciskiot naslov.Edinstvenata razlika e toa {to prototipot zavr{uva so ‘;’,a funkciskiot naslov ne.
7-2 povik po vrednost
Funkciskite povikuvawa vo C programskiot jazik koristat metod na povik po vrednost.Da vidime primer so {to ova }e ni stane pojasno:
#include <stdio.h> void test (int a); main() { int m; m=2; printf(“\nM e %d”,m); test (m); printf(“\nM e %d”,m); return 0; } void test (int a) { a=5; }
Vo main() funkcijata deklariravme promenliva m.Nazna~ivme vrednost 2 na m.Sakavme da vidime dali funkciskoto povikuvawe e sposobno da ja promeni vrednosta na m,kako {to mo`eme da o~ekuvame bidej}i ja modificiravme nejzinata vrednost vnatre vo test() funkcijata.[to mislite?
Izlezniot rezultat na programot e:
M e 2 M e 2
Vidovte deka funkciskoto povikuvawe ne ja smeni vrednosta na argumentot.Ova e zatoa {to metodot so povikuvawe samo ja pra}a vrednosta na m do funkcijata i ne ja pra}a samata promenliva.Vsu{nost ja stava vrednosta na promenlivata m vo memorija nare~ena stack i potoa funkcijata ja dobiva vrednosta bez da ima pristap do samata promenliva.
Zatoa ovoj metod e nare~en metod po vrednost.
7-3 Povik po referenca
Postoi i drug metod na pra}awe na promenlivi koj go vikame metod po referenca.Ovoj vtor metod ovozmo`uva funkcijata da ja menuva vrednosta na argumentot na promelivata koristen vo funkciskiot povik. Primer:
#include <stdio.h> void test (int *ptr); main() { int m; m=2; printf(“\nM e %d”,m); test(&m); printf(“\nM e %d”,m); return 0; } voit test (int *ptr) { *ptr=5; }
Za da mo`eme da ja modificirame vrednosta na promenlivata koristena kako argument vo funkcijata ni treba memoriskata adresa na promenlivata. Vo C programskiot jazik ‘&’ operatorot ja dava adresata kade e za~uvana promenlivata.Na primer ako ‘m’ e promenliva od tip int toga{ &m }e ni go dade po~etokot na memoriskata adresa na promenlivata. Ovaa rezultatska adresa ja vikame ‘pointer’.
ptr=&m;
Vo gornata komanda ptr promenlivata }e sodr`i memoriska adresa od promenlivata m.Ovoj metod se koristi vo nekoj standardni funkcii vo C.Na primer scanf go koristi ovoj metod za da mo`e da primi vrednost od tastatura i da ja stavi vo promenliva.Vsu{nost,ja stava primenata vrednost vo memoriskata lokacija na promenlivata koristena vo funkcijata.
scanf(“%d”,&a);
Sega koga ja imame memoriskata adresa na promenlivata morame da koristime operator {to ni ovozmo`uva da nazna~ime vrednost ili da pristapime do vrednost za~uvana na taa adresa. Kako {to ka`avme mo`eme da ja najdeme adresata na promenlivata ‘a’ koristej}i ‘&’ operator.
ptr=&a;
sega mo`eme da ja najdeme vrednosta za~uvana vo ‘a’ koristej}i ‘*’ operator:
val=*ptr; /*naogjanje na vrednosta kon koja pokazuva ptr*/
Duri i mo`eme da ja modificirame vrednosta vo adresata:
*ptr=5;
Da go pogledneme povtorno primerot.Go predadovme pointerot (memorsikata adresa) na funkcijata.Funkcijata mo`e da ja modificira vrednosta za~uvana vo promenlivata. Ako go pu{tite programot }e ispi{e:
M e 2 M e 5
Gledate deka ovoj pat ja smenivme vrednosta na argumentot na promenlivata vo povikanata funkcija.
7-4 Korisen primer Bubble sort:
#include <stdio.h> void swap(int *a,int *b); main() { int ni[5],i,j,n; ni[0]=7;ni[1]=3;ni[2]=9;ni[3]=2;ni[4]=11; printf(“Nizata pred sortiranje:\n\n”); for (i=0;i<5;i++) printf(“ni[%d]=%d\n”,i,ni[i]); n=5; /*broj na elementi vo sortiranata niza*/ for(i=0;i<n-1;i++) for(j=0;j<n-1;j++) { if (ni[j]>ni[j+1]) swap(&ni[j],&ni[j+1]); } printf(“Nizata posle sortiranje:\n\n”); for(i=0;i<5;i++) printf(“ni[%d]=%d\n”,i,ni[i]); return 0; } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; }
Kraj |