Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Argumenti funkcije u C-u

[es] :: C/C++ programiranje :: Argumenti funkcije u C-u

[ Pregleda: 4269 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

av@z

Član broj: 18553
Poruke: 48
*.as54.ze.bih.net.ba.



Profil

icon Argumenti funkcije u C-u31.10.2004. u 18:52 - pre 237 meseci
Imam jedan problem. Evo prvo code:
Code:


#include <stdio.h>

funkcija(int x, y);

main()
{
int x = 4, y = 8,a;
a=funkcija(x,y)

printf ("%d", a);
}

funkcija(int x,y)
{
return (x+5, y+5);
}


E kao sto se ovdje vidi, ja iz main() saljem 2 argumenta funkciji(). Ta funkcija(), obradi ta dva argumenta, znaci doda +5 na x i y i ponovo vraca te argumente u main(). I kada je upisem printf("%d", a), ispise mi vrijednost 9, znaci to je vrijednost varijable x (4+5=9), medjutim kako da mi ispise i y?
Da budem jos precizniji, meni treba da vracenu vrijednost x, smjestim u jednu novi varijablu, a y takodjer u neku drugu varijablu.
Hvala.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Argumenti funkcije u C-u31.10.2004. u 18:55 - pre 237 meseci
Citat:
Code:
funkcija(int x,y)
 {
 return (x+5, y+5);
 }
         


E kao sto se ovdje vidi, ja iz main() saljem 2 argumenta funkciji(). Ta funkcija(), obradi ta dva argumenta, znaci doda +5 na x i y i ponovo vraca te argumente u main(). I kada je upisem printf("%d", a), ispise mi vrijednost 9, znaci to je vrijednost varijable x (4+5=9), medjutim kako da mi ispise i y?
Ovo što si napisao je ispravna C sintaksa, ali značenje nije ono koje očekuješ. Iz C funkcije se ne može vratiti par vrednosti, osim ako se one ne spakuju u strukturu ili obe proslede po imenu.

Inače u ovom kodu imaš puno grešaka, pa bih ti preporučio da se najpre vratiš na papirnatu C literaturu (ili skineš nešto od stvari sa interneta koje možeš naći u TOP temama).

f
 
Odgovor na temu

av@z

Član broj: 18553
Poruke: 48
*.as54.ze.bih.net.ba.



Profil

icon Re: Argumenti funkcije u C-u31.10.2004. u 20:19 - pre 236 meseci
To sam napisao samo onako nabrzinu samo sam htio da skrenem paznju na problem.
Mada ispravno napisan code nece nista mjenjati, evo ispravio sam greske.

Code:


#include <stdio.h>

funkcija(int x, int y);

main()
{
int x = 4, y = 8,a;
a=funkcija(x,y);
printf ("%d", a);
}
funkcija(int x, int y)
{
return (x+5);
}
 


I dalje me zanima kako da rijesim ovaj problem, kako da mi obje vrijednosti vrati i da svaku od tih vrijednosti spremim u posebnu varijablu?
Puno hvala.
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
*.vdial.verat.net.

ICQ: 60630914


+1 Profil

icon Re: Argumenti funkcije u C-u31.10.2004. u 20:57 - pre 236 meseci
tacnije bi mozda bilo reci da ovo side-effect comma operatora. sustinsko znacenje pomenutog operatora je izracunaj prvi, izracunaj drugi, ... , izracunaj n-ti a side-effect je u ovom slucaju "vrati n-ti". ono sto ce se desiti je da ce ti biti vracen rezultat poslednjeg elementa - a to je y+5. probaj ovaj jednostavan primer i bice ti jasnije:

Code:

....
if ((1, 2, 3, 4) > 3)
  printf("all your commas are belong to us\n");
....


kao i

Code:

....
if ((1, 2, 4, 3) > 3)
  printf("all your commas are belong to us\n");
....


have fun...

btw. filmil ti je odgovorio - pogledaj strukture i ubrzo ce ti postati jasno kako da vratis "dve vrednosti", odn. strukturu koja bi mogla npr. da sadrzi ta 2 int-a.
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Argumenti funkcije u C-u31.10.2004. u 21:07 - pre 236 meseci
ili recimo ovako, ako nećeš strukture, mada nije praktično

Code:
#include <stdio.h>

void funkcija(int x, int y, int* resX, int* resY);

main()
{
    int a, b, x, y;
    x = 1;
    y = 2;

    funkcija(x, y, &a, &b)
    printf ("%d %d", a, b);
}

void funkcija(int x, int y, int* resX, int* resY);
{
    *resX = x+5;
    *resY = y+5;
}

ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

idb
Ivan Bulic
Beograd

Član broj: 4436
Poruke: 402



Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 07:41 - pre 236 meseci
Mozda je ovo jednostavnije:
Code:
// Windows 2000, Dev-Cpp 4.9.8.9
#include <stdio.h>
#include <stdlib.h>

void funkcija(int* x, int* y);

int main(int argc, char *argv[])
{
    int a,b;
    a = 21; b =45;
    printf ("  Pre poziva f-je: a = %d; b = %d\n", a, b);
    funkcija(&a,&b);
    printf ("Posle poziva f-je: a = %d; b = %d\n", a, b);
    system("PAUSE");
    return 0;
}
void funkcija(int *x, int *y){
    *x+=5; 
    *y+=5;
};
 
Odgovor na temu

av@z

Član broj: 18553
Poruke: 48
*.as54.ze.bih.net.ba.



Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 10:30 - pre 236 meseci
E hvala rijesio sam, upravo mi to treba.
 
Odgovor na temu

av@z

Član broj: 18553
Poruke: 48
*.as54.ze.bih.net.ba.



Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 21:43 - pre 236 meseci
E pojavio mi se novi problem. Pokusavao sam ga sam rijesiti medjutim kada zaista vise nisam imao ideja, evo me ovdje. Najvise mi pase ovaj zadnji code od idb-a.
Mene samo zanima kako da uradim rekurziju u funkcija(int *x, int *y), znaci unutar toga trebam ponovo poznat tu istu funkciju, a da mi rezultat koja mi vrati u main() ponovo bude OK. Sad ne bih da vas zamaram sto mi treba rekurzija, samo mi treba tacna naredba za to. Pokusaovao sam sa return (funkcija (*x, *y)); ali ne ide.
Hvala.
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 22:01 - pre 236 meseci
Nisam siguran da li sam dobro razumeo, ali rekurziju u principu pozivaš ovako
Code:
void funkcija(int *x, int *y)
{
    ...
    funkcija(x,y);
    ...
}

nema returna jer funkcija ne vraća vrednost.
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

CimBac
Fax
Novi Sad

Član broj: 37332
Poruke: 157
*.axpan.net.

Sajt: irrlicht.sourceforge.net


Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 22:28 - pre 236 meseci
Samo da dodam da moras da napravis izlaz iz rekurzije,da se ne bi prepunio stek,
preko kojeg se u stvari salju argumenti funkciji, pa onda to izgleda ovako:


void funkcija(int *x, int *y)
{
...

if( neki_uslov )
{
funkcija(x,y);
return;
}
else
return; // obezbedio si izlaz
...
}

Ovaj drugi return se prvi poziva kada vise nije ispunjen neki_uslov,dok se ovaj gornji
poziva za svaki poziv funkcije.

Pozdrav
 
Odgovor na temu

av@z

Član broj: 18553
Poruke: 48
*.as54.ze.bih.net.ba.



Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 23:28 - pre 236 meseci
E pa da, zaboravio sam da nema return jer funkcija ne vraca vrijednost.
Sto se tice izlaza iz rekurzije to sam rijesio to mi nije problem.
Ali da ne dodje do zabune, evo kompletan code pa cete svi razumjeti.
Volio bi samo da mi ovo proradi, mislim da je jasno sta trazim, probao sam mnoge kombinacije prilikom pozivanja funkciju medjutim nikako da mi ispise rezultat, znaci code treba da prodje korake rekurzije (*r<2) i da se ponovo vrati u main() i ipise da je x = 3 i y=4. Puno hvala.




Code:



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
  


void funkcija(int* x, int* y, int* r);


int
main (void)
{
    int x[10], y[10], r;
    r=0;
 
    x[0]=6;
    y[0]=10;
    
    printf("\n %d", x[0]);
    funkcija(&x[0], &y[0], &r);
    printf("\n x[0] i y[0] poslije funkcije: %d, %d", x[0], y[0]);
    getch();
}

void funkcija (int *x, int *y, int *r)
{

    int a[10];

    a[0]=*x;
    a[1]=*y;

    if (*r<2)
    {
        if (a[*r]==1)
        {
        printf("\n a[%d] = 1", *r);  
        }

        funkcija (x, y ,r);
        return;
     }
     else
     {
     *x=3;
     *y=4;
     return;
     }
}

 
Odgovor na temu

filjo

Član broj: 17551
Poruke: 136
*.co.yu.



+1 Profil

icon Re: Argumenti funkcije u C-u01.11.2004. u 23:50 - pre 236 meseci
Samo na prvi pogled funkcija nikada nece doci do return jer je r uvek <2. Unutar funkcije moras da prilikom poziva funkcije uvecavas r za po 1

zatim jednom zoves funkcija(,,&r) a drugi put funkcija(,,r)
 
Odgovor na temu

av@z

Član broj: 18553
Poruke: 48
*.as54.ze.bih.net.ba.



Profil

icon Re: Argumenti funkcije u C-u02.11.2004. u 00:01 - pre 236 meseci
sorry to sam zaboravio, treba funkcija (x ,y , r+1);
tnx, i dalje trebam pomoc???
 
Odgovor na temu

filjo

Član broj: 17551
Poruke: 136
*.co.yu.



+1 Profil

icon Re: Argumenti funkcije u C-u02.11.2004. u 00:15 - pre 236 meseci
Par godina nisam koristio c ali da probam:

Prvo logicki a[r] ti nikad nece biti 1 zato sto mu dajes vrednost 6 za a[0] i 10 za a[1] pa prema tome nece doci do ispisa. a kada je r =2 on izadje iz funkcije.

Ja bi tu funkciju deklarisao kao funkcija(int* x, int* y,int r)
zatim bi iz glavnog programa izbacio int r i pozvao je kao funkcija(&x[0], &y[0], 0);

u rekurzivnoj funkciji onda moras da izbacis i sve zvezdice ispred r.

Pozdrav!
 
Odgovor na temu

av@z

Član broj: 18553
Poruke: 48
*.as54ze.bih.net.ba.



Profil

icon Re: Argumenti funkcije u C-u03.11.2004. u 18:56 - pre 236 meseci
Da ali jos me zanima kako da sve ovo rijesim, kako da pozovem ponovo funkciju, a da sve bude OK?
Hvala.
 
Odgovor na temu

CimBac
Fax
Novi Sad

Član broj: 37332
Poruke: 157
*.axpan.net.

Sajt: irrlicht.sourceforge.net


Profil

icon Re: Argumenti funkcije u C-u04.11.2004. u 00:27 - pre 236 meseci
Nisam siguran da sam razumeo sta si tacno hteo da uradis sa a[10], pa sam ga izbacio, a ti probaj da vidis sta se tu desava.

Sto se tice funkcija,uopsteno govoreci,ne moras ih deklarisati na pre main-a,samo je potrebno da ih napises pre main-a,odnosno pre funkcije koja je poziva.Nadam se da si me razumeo.



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


void funkcija (int *x, int *y, int r)
{

int a[2];

a[0]=*x;
a[1]=*y;

if (r-->0)
{
*x+=1;
*y+=1;
printf("\n X povecan za 1 i sad izgleda %d", *x);
printf("\n Y povecan za 1 i sad izgleda %d", *y);
funkcija (x, y ,r);
return;
}
else
{
*x=100;
*y=101;
return;
}
}

int main (void)
{
int x[10], y[10];
int r=5;

x[0]=10;
y[0]=20;
clrscr();

printf("\n Pre funkcije:");
printf("\n x= %d", x[0]);
printf("\n y= %d", y[0]);

funkcija(&x[0], &y[0], r);

printf("\n Posle funkcije:");
printf("\n x= %d", x[0]);
printf("\n y= %d", y[0]);

getch();
return 1;
}

Ajd pozdrav

 
Odgovor na temu

idb
Ivan Bulic
Beograd

Član broj: 4436
Poruke: 402



Profil

icon Re: Argumenti funkcije u C-u04.11.2004. u 08:29 - pre 236 meseci
Citat:
Da ali jos me zanima kako da sve ovo rijesim, kako da pozovem ponovo funkciju, a da sve bude OK?
Mislim da nisi dobro procitao sta ti je filjo napisao.
Malo cudan kod, pogotovo sama funkcija i ispitivanje uslova (i koliko je r, i koliko je a[r]). Mozda ti tako nesto treba, ali mozda i moze da se uprosti...
... ali evo gde gresis, vracam ti tvoj kod sa ispravkama; obrati paznju na // *** !!! *** (tu su uradjene uzmene)
Code:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void funkcija(int* x, int* y, int r); // *** !!! ***
int
main (void)
{
    int x[10], y[10], r;
    r=0;
    x[0]=6;
    y[0]=10;  
    printf("\n %d", x[0]);
    funkcija(&x[0], &y[0], r); // *** !!! ***
    printf("\n x[0] i y[0] poslije funkcije: %d, %d", x[0], y[0]);
    getch();
}

void funkcija (int *x, int *y, int r) // *** !!! ***
{
    int a[10];
    a[0]=*x;
    a[1]=*y;
    if (r<2) // *** !!! ***
    {
        if (a[r]==1) // *** !!! ***
        {
        printf("\n a[%d] = 1", r); // *** !!! ***
        }
        funkcija (x, y ,r+1); // *** !!! ***
        return;
     }
     else
     {
     *x=3;
     *y=4;
     return;
     }
}
 
Odgovor na temu

filjo

Član broj: 17551
Poruke: 136
*.co.yu.



+1 Profil

icon Re: Argumenti funkcije u C-u04.11.2004. u 10:23 - pre 236 meseci
@idb
Na to sam mislio i jedino u main ono r mu uopste nije potrebno pa da ga reku zameni sa 0, pri pozivu funkcije. Ni meni nije jasno sta hoce da postigne kodom posto je malo uvrnut, ali ajde.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Argumenti funkcije u C-u

[ Pregleda: 4269 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.