funciones paso por referencia

Iniciado por vivianfes, 3 Marzo 2015, 23:57 PM

0 Miembros y 1 Visitante están viendo este tema.

vivianfes

Citarhola tengo dudas sobre el tema de funciones, en este ejercicio debo pedir al usuario que ingrese los digitos se debe calcular la suma y debe imprimir tambien el area de memoria
pero no me imprime la suma ni me deja leer los numeros al correr el programa, agradeceria su ayuda
#include <stdio.h>

int main(int argc, char *argv[]) {

int var,a=0,b=0,c=0,resultado;
printf(" a su direccion = %p\n",&a);
printf(" b su direccion = %p\n",&b);
printf(" c su direccion = %p\n",&c);


a=(a,b,c,resultado);
printf("El resultado de la suma es %d",a);
}
int suma(int a, int b,int c, int *resultado)
{

scanf("%d",a);
scanf("%d",b);
scanf("%d",c);
*resultado = a +b+c;


return(*resultado);
}

Mod: post corregido, asegurate de seleccionar tu codigo antes de usar las GeSHi

T. Collins

Aquí no llamas a ninguna función:
a=(a,b,c,resultado);
Sería:
a=suma(a,b,c,resultado);
Pero si tiene que recibir el resultado en la variable resultado no tienes que poner a=suma(), vale con:
suma(a,b,c,resultado);

Si vas a hacer scanf de a, b, y c dentro de la función, no tienes que pasar a, b,y c como parametros:
int suma(int *resultado)
{
   int a=0, b=0, c=0;
   scanf("%d",a);
   scanf("%d",b);
   scanf("%d",c);
   *resultado = a +b+c;
}

Y vale con hacer:
printf("El resultado de la suma es %d", *resultado);

vivianfes

Cita de: T. Collins en  4 Marzo 2015, 00:10 AM
Aquí no llamas a ninguna función:
a=(a,b,c,resultado);
Sería:
a=suma(a,b,c,resultado);
Pero si tiene que recibir el resultado en la variable resultado no tienes que poner a=suma(), vale con:
suma(a,b,c,resultado);

Si vas a hacer scanf de a, b, y c dentro de la función, no tienes que pasar a, b,y c como parametros:
int suma(int *resultado)
{
   int a=0, b=0, c=0;
   scanf("%d",a);
   scanf("%d",b);
   scanf("%d",c);
   *resultado = a +b+c;
}

Y vale con hacer:
printf("El resultado de la suma es %d", *resultado);

Cita de: T. Collins en  4 Marzo 2015, 00:10 AM
Aquí no llamas a ninguna función:
a=(a,b,c,resultado);
Sería:
a=suma(a,b,c,resultado);
Pero si tiene que recibir el resultado en la variable resultado no tienes que poner a=suma(), vale con:
suma(a,b,c,resultado);

Si vas a hacer scanf de a, b, y c dentro de la función, no tienes que pasar a, b,y c como parametros:
int suma(int *resultado)
{
   int a=0, b=0, c=0;
   scanf("%d",a);
   scanf("%d",b);
   scanf("%d",c);
   *resultado = a +b+c;
}

Y vale con hacer:
printf("El resultado de la suma es %d", *resultado);

ok en todo caso tendria que dar el prototipo de la funcion suma no? ya que me marca error en suma(a,b,c,resultado);

T. Collins

#3
Al final suma() solo tiene resultado como parametro, tienes que poner:
suma(resultado);
El prototipo sería:
void suma(int*);
void suma(int *resultado)
{
   int a=0, b=0, c=0;
   scanf("%d",a);
   scanf("%d",b);
   scanf("%d",c);
   *resultado = a +b+c;
}

vivianfes


ya no me marco ningun error, te lo agradezco mucho, solo tengo otra duda al correrlo en la parte que leera los valores los ingreso y al darle enter me aparce un error de sistema y ya no lo deja correr, es por el programa? o en si por windows?

T. Collins

void suma(int *resultado)
{
   int a=0, b=0, c=0;
   scanf("%d",&a);
   scanf("%d",&b);
   scanf("%d",&c);
   *resultado = a +b+c;
}


A scanf hay que pasarle la dirección de las variables con &. Tienes que ir poco a poco, estás intentando hacer ejercicios de paso por referencia sin dominar cosas más básicas. Es mejor ser capaz de ver los errores de tu código e ir corrigiendolos por ti mismo, a que te lo den ya todo corregido.

vivianfes

Cita de: T. Collins en  4 Marzo 2015, 01:03 AM)


A scanf hay que pasarle la dirección de las variables con &. Tienes que ir poco a poco, estás intentando hacer ejercicios de paso por referencia sin dominar cosas más básicas. Es mejor ser capaz de ver los errores de tu código e ir corrigiendolos por ti mismo, a que te lo den ya todo corregido.
eso no te lo niego la verdad es que funciones se me dificulta pero te agradezco mucho tu ayuda de verdad :D