[ xeron @ 18.09.2005. 14:59 ] @
Koristim knjigu "K&R_Programski_jezik_C" Dennis M. Ritchie i
Brian W. Kernighan

Ne razumijem nacin definisanja funkcije ???

Citat:
Definicija funkcije ima ovaj oblik:
ime funkcije(deklaracija parametara, ukoliko postoje){
deklaracije internih varijabli funkcije
naredbe
}


nije mi jasna razlika između parametra i internih varijabli?
Moze li objasnjenje funkcija uz ovaj primjer(gdje je definisna f-ja,kada je pozvana,kako je definisana).


Code:

#include <stdio.h>
int power(int m, int n);
/* test power funkcije */
main(){
int i;
for(i=0;i<10;++i)

printf("%d %d %d", i, power(2,i), power(-3,i));
return 0;
}
/* power: podiže bazu na n-ti eksponent n>=0 */
int power(int base, int n){
int i,p;
p=1;
for(i=1;i<=n;++i)
p=p*base;
return p;
}


Posebno mi nije jasan ovaj dio

Code:
/* power: podiže bazu na n-ti eksponent n>=0 */
int power(int base, int n){
int i,p;
p=1;
for(i=1;i<=n;++i)
p=p*base;
return p;
}
[ sucur @ 18.09.2005. 15:13 ] @
Pa fazon je da preko int base prosledjujes bazu, a preko n eksponent.
Unutar funkcije se vrsi ekponenciranje u for petlji, tj. p = p * base, i na kraju ti vraca rezultat base na n-tu.
Ove int i i p, koje su deklarisane unutar funkcije su pomocne vrijednosti koje sluze za izracunavanje onoga sto je nama potrebno u ovom slucaju to je rezultat stepenovanja.
[ sucur @ 18.09.2005. 15:20 ] @
Evo ti primjer sta se tu desava:
Ti u main-u prosledis preko funkcije bazu i eksponent, recimo power(2,3);
Unutar funkcije se vrsi to izracunavanje, dakle imas for petlju (i = 1;i <= n;i++);
Znaci ona ce se vrtiti 3 puta, jer ti je proslijedjeno n = 3;
I ide :
1. put: p = 1 * 2, to je p = 2;
2. put: p = 2 * 2, to je p = 4;
3. put: p = 4 * 2, to je p = 8;
Zavrsena petlja i funkcija vraca vrijednost p, to je u ovom slucaju 8.
Valjda je sad jasno .
[ IDE @ 18.09.2005. 15:28 ] @
printf("%d %d %d", i, power(2,i), power(-3,i)); -ovdje imas poziv f-je power. Ti si joj posalo 2 parametra (koje si pri deklaraciji f-je naveo) u ovom slucaju 2 i "i"

ti si mogao npr. staviti u deklaraciji int power(int a,int b) a kasnije kad zoves f-ju da je pozoves sa: power(c,d) (gdje su c i d neki cijeli brojevi u glavnom programu)

i f-ja ce znati da je "c" zapravo "a" a da je "d" zapravo "b" po mjestima koje si im dodjelio pri deklaraciji, tj. pozivu...
takodje, promjenjive koje su deklarisane unutar f-je glavni program (main()) ne vidi!!!!! kao sto f-ja ne vidi ni promjenjive u glavnom programu!!!!znaci mozes totalno iste promjenjive koristiti u obe ove cjeline (istog imena i tipa)!! vazno je samo sta saljes f-ji...ona TO vidi...

posto je sama f-ja power(int a,int b) neki broj (vraca vrijednost INT) ti shvati tvoj poziv power(2,i) kao neki obicni broj, sto je zapravo njen rezultat...

uh, stvarno sam zurio, pa sam sve s brda- s dola napisao....nadam se da si bar ponesto shvatio...

pogledaj ovaj link ka jednom forumu gdje je malo objasnjeno oko f-ja takodje...:

http://www.taraba.org/forum/viewtopic.php?t=31&start=40
[ xeron @ 18.09.2005. 18:25 ] @
Citat:
Evo ti primjer sta se tu desava:
Ti u main-u prosledis preko funkcije bazu i eksponent, recimo power(2,3);
Unutar funkcije se vrsi to izracunavanje, dakle imas for petlju (i = 1;i <= n;i++);
Znaci ona ce se vrtiti 3 puta, jer ti je proslijedjeno n = 3;
I ide :
1. put: p = 1 * 2, to je p = 2;
2. put: p = 2 * 2, to je p = 4;
3. put: p = 4 * 2, to je p = 8;
Zavrsena petlja i funkcija vraca vrijednost p, to je u ovom slucaju 8.
Valjda je sad jasno .


a sta radi u slucaju n=0
[ sucur @ 18.09.2005. 20:03 ] @
Citat:
a sta radi u slucaju n=0

Ako je eksponent jednak 0, to je u matematici jednako 1, zbog toga u kodu i stoji prije for petlje u funkciji p = 1. Znaci vraca 1.

[Ovu poruku je menjao sucur dana 18.09.2005. u 21:04 GMT+1]
[ xeron @ 19.09.2005. 19:17 ] @
ok thanx