Predspotavljam da ima ovdje i onih koji znaju programirati u c+ imam sljedeci problem
trebam za zadacu da napravim nenku funkciju i sada nebitno o cemu se radi u zadatku ali moj problem je sljedeci
trebam neke brojeve da pridruzim vektoru koji ce funkcija vracati
i imam uslov kada se to desava sada izgleda odprilike ovako
if (toto)
{
vektor=neka vrijednost}
eh i kada unutar ove 2 zagrade stavim da mi ispise vektor dobro je medjutim
zim izadje iz ove zagrade odmah postavi sve vrijednosti na 0
ito nije samo za tu if petlju nego u bilo kojoij da stavim do cega bi to moglo biti?
funkcija jel? pa kad saljes vrijednost funkciji ona tu vrijednost pridruzuje nekoj novoj varijabli koja nema veze sa glavnom funkcijom i koja se inicijalizira pri pozivu funkcije i uklanja se kada funkcija zavrsi svoj posao. znaci ta vrijednost koju pridruzis izgubi se kada izadjes iz te funkcije jer se ta varijabla brise iz memorije. varijabla vektor koju deklariras u funkciji i koju deklariras u glavnoj funkciji nisu uopce iste. mozes uraditi sljedece:
- napraviti globalnu varijablu(ne znam da li se radi o polju) koja se nalazi ispod #include statementa i ispred main-a i ona ce biti vidljiva u citavom programu
- u mainu deklarirati varijablu kao pokazivac ili poslati njezinu adresu funkciji pri cemu bi funkcija primala pokazivac (ne znam da li sam ovo dobro srocio)
- napraviti funkciju koja vraca vrijednost, a u mainu vracenu vrijednost pridruziti varijabli ili ispisati sa cout<<funkcija(neka varijabla ili vrijednost).
toliko ti mogu reci sa informacijama koje si mi ponudio
dobro ev da objasnim znadci treba unijeti broj n koji se daje funkciji integer, i funkcija napravi vektor sa brojevima od 1 do n koji su djeljivi sa sumom svojih cifara i da vrati taj vektor
ev kako sam napisao
vector funkcija(int n){
vectorbrojevi;
int i;
for (i=1;i<=n;i++){
int s(0);
int k=sizeof(brojevi);
int g=i,p;
while (g>0){
s+=g%10;
g/=10;
}
if(i%s==0){
k+=1;
brojevi.resize(k);
p=i;
}
brojevi[k]=p;
cout<<p<<brojevi[k]<<endl;
}
cout<<brojevi[0];
return brojevi;
kao sto se vidi pokusao sam cak unjeti novu varijablu p i njoij dati tu vrijednost jer sam ustanovio da ona ne mijenja vrijednost kada izadjem iz zagrade ali opet nista
ja gledam u ovo i vidim nered. deklaracije varijabli u for petlji. p varijabla ti bas i ne treba. ne znam kako se ponasa uopce tip podatka vector. jel itko radio sa ovim?
deklariso sam te varijable tu jer mi ne trebaju nijgdje osim u petlji toj
ps: ne treba mi p ovo samj a malo experimentisao da vidim kako ce raditi ako to uradim zato mi sada ovako izgleda
[quote=reni90]dobro ev da objasnim znadci treba unijeti broj n koji se daje funkciji integer, i funkcija napravi vektor sa brojevima od 1 do n koji su djeljivi sa sumom svojih cifara i da vrati taj vektor
ev kako sam napisao
vector funkcija(int n){
vectorbrojevi;
int i;
for (i=1;i<=n;i++){
int s(0);
int k=sizeof(brojevi);
int g=i,p;
while (g>0){
s+=g%10;
g/=10;
}
if(i%s==0){
k+=1;
brojevi.resize(k);
p=i;
}
brojevi[k]=p;
cout<<p<<brojevi[k]<<endl;
}
cout<<brojevi[0];
return brojevi;
kao sto se vidi pokusao sam cak unjeti novu varijablu p i njoij dati tu vrijednost jer sam ustanovio da ona ne mijenja vrijednost kada izadjem iz zagrade ali opet nista[/quote]
pa kako ce radit kad si pogresno napiso code. kako ocekujes da ti cout<<brojevi[0] radi kad to pozivas izvan funkcije u kojoj si deklariso? i taj return nema sanse da radi. onda sta treba ovo znacit “int g=i,p;” ?
ev skontao sam greska je bila u tome sto sam velicinu vektora pokusao da dobijem preko ziseof umjesto sa brojevi.size()
nije for petlja funkcija da mozes deklarirat u njoj varijable pa da to radi kako treba. svaki put kad se petlja okrene iznova deklarira varijable. moze prouzrocit segfault, memory leak, ko zna sta svasta. ovisi o kompajleru. @maher_ nije mu cout<<brojevi[0] izvan funkcije nego nije zatvorio bracket na kraju. kod mi ne izgleda elegantno nimalo. al et ako tebi radi onda…
tako je pastiro code nisam mu ja kriv osim toga imas pravo za deklarisanje funkcija u funkciji “int s(0)” , ili varijabli u for petlji itd …
ne razumijem deklaraciju int s(0). kompajler ne dojavi gresku, sve normalno prodje. to je koliko vidim najobicnija integer varijabla.
Pa ako obratite pažnju na neka stilska pravila pri radu sa C++om (za razliku od C-a) preporučljivo je varijable deklarisati tamo gdje se koriste a ne na početku funkcije, takođe je preporučena inicijalizacija oblika int k(0) umjesto int k=0 jer se (u slučaju da je u pitanju klasa a ne ugrađeni tip) na prvi način poziva konstruktor, a na drugi operator dodjele što su dvije različite stvari.
A kao što reče reni, jedina prava greška gore je korištenje sizeof, mada bi kod bio puno jednostavniji da je koristio metod push_back.