free hosting   image hosting   hosting reseller   online album   e-shop   famous people 
Free Website Templates
Free Installer

 

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