Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: vivianfes en 3 Marzo 2015, 23:57 pm



Título: funciones paso por referencia
Publicado por: vivianfes en 3 Marzo 2015, 23:57 pm
Citar
hola 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
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[]) {
  4.  
  5. int var,a=0,b=0,c=0,resultado;
  6. printf(" a su direccion = %p\n",&a);
  7. printf(" b su direccion = %p\n",&b);
  8. printf(" c su direccion = %p\n",&c);
  9.  
  10.  
  11. a=(a,b,c,resultado);
  12. printf("El resultado de la suma es %d",a);
  13. }
  14. int suma(int a, int b,int c, int *resultado)
  15. {
  16.  
  17. scanf("%d",a);
  18. scanf("%d",b);
  19. scanf("%d",c);
  20. *resultado = a +b+c;
  21.  
  22.  
  23. return(*resultado);
  24. }
  25.  

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


Título: Re: funciones paso por referencia
Publicado por: T. Collins en 4 Marzo 2015, 00:10 am
Aquí no llamas a ninguna función:
Código
  1. a=(a,b,c,resultado);
Sería:
Código
  1. 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:
Código
  1. 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:
Código
  1. int suma(int *resultado)
  2. {
  3.   int a=0, b=0, c=0;
  4.   scanf("%d",a);
  5.   scanf("%d",b);
  6.   scanf("%d",c);
  7.   *resultado = a +b+c;
  8. }
Y vale con hacer:
Código
  1. printf("El resultado de la suma es %d", *resultado);


Título: Re: funciones paso por referencia
Publicado por: vivianfes en 4 Marzo 2015, 00:27 am
Aquí no llamas a ninguna función:
Código
  1. a=(a,b,c,resultado);
Sería:
Código
  1. 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:
Código
  1. 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:
Código
  1. int suma(int *resultado)
  2. {
  3.   int a=0, b=0, c=0;
  4.   scanf("%d",a);
  5.   scanf("%d",b);
  6.   scanf("%d",c);
  7.   *resultado = a +b+c;
  8. }
Y vale con hacer:
Código
  1. printf("El resultado de la suma es %d", *resultado);

Aquí no llamas a ninguna función:
Código
  1. a=(a,b,c,resultado);
Sería:
Código
  1. 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:
Código
  1. 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:
Código
  1. int suma(int *resultado)
  2. {
  3.   int a=0, b=0, c=0;
  4.   scanf("%d",a);
  5.   scanf("%d",b);
  6.   scanf("%d",c);
  7.   *resultado = a +b+c;
  8. }
Y vale con hacer:
Código
  1. 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
Código
  1. suma(a,b,c,resultado);


Título: Re: funciones paso por referencia
Publicado por: T. Collins en 4 Marzo 2015, 00:31 am
Al final suma() solo tiene resultado como parametro, tienes que poner:
Código
  1. suma(resultado);
El prototipo sería:
Código
  1. void suma(int*);
Código
  1. void suma(int *resultado)
  2. {
  3.   int a=0, b=0, c=0;
  4.   scanf("%d",a);
  5.   scanf("%d",b);
  6.   scanf("%d",c);
  7.   *resultado = a +b+c;
  8. }


Título: Re: funciones paso por referencia
Publicado por: vivianfes en 4 Marzo 2015, 00:56 am

 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ítulo: Re: funciones paso por referencia
Publicado por: T. Collins en 4 Marzo 2015, 01:03 am
Código
  1. void suma(int *resultado)
  2. {
  3.   int a=0, b=0, c=0;
  4.   scanf("%d",&a);
  5.   scanf("%d",&b);
  6.   scanf("%d",&c);
  7.   *resultado = a +b+c;
  8. }

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.


Título: Re: funciones paso por referencia
Publicado por: vivianfes en 4 Marzo 2015, 01:09 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