Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Devolver varios valores en una función en C

Estas en el tema de Devolver varios valores en una función en C en el foro de C/C++ en Foros del Web. Saludos. Mi duda es, ¿como puedo hacer que una función devuelva varios valores?, ¿y como puedo hacer para que al llamar a esa función, cada ...
  #1 (permalink)  
Antiguo 02/04/2011, 18:22
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Pregunta Devolver varios valores en una función en C

Saludos.
Mi duda es, ¿como puedo hacer que una función devuelva varios valores?, ¿y como puedo hacer para que al llamar a esa función, cada valor se guarde en una variable ya declarada desde el principio?

Por ejemplo. Yo tengo esta función:

Código:
int taco_d_rata (int altura, int anchura)
       {
       int gordura, gato, perro;

      gordura=anchura*altura;
      gato=altura+anchura;
      perro=altura+anchura+gordura;

       return (perro);
      }
El problema es que aquí solo puedo devolver la variable temporal "perro", y al llamarla, la puedo guardar en una variable ya declarada de esta forma:

Código:
perrogordo=taco_d_rata(alta,ancha);
Pero lo que quiero es poder guardar también en otras 2 variables, las variables temporales de la función "gordura" y "gato".
¿como podría hacer esto (en lenguaje C, no C++)?

Gracias
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #2 (permalink)  
Antiguo 02/04/2011, 21:03
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Devolver varios valores en una función en C

Cita:
Iniciado por Dtc Ver Mensaje
Saludos.
Mi duda es, ¿como puedo hacer que una función devuelva varios valores?, ¿y como puedo hacer para que al llamar a esa función, cada valor se guarde en una variable ya declarada desde el principio?

Por ejemplo. Yo tengo esta función:

Código:
int taco_d_rata (int altura, int anchura)
       {
       int gordura, gato, perro;

      gordura=anchura*altura;
      gato=altura+anchura;
      perro=altura+anchura+gordura;

       return (perro);
      }
El problema es que aquí solo puedo devolver la variable temporal "perro", y al llamarla, la puedo guardar en una variable ya declarada de esta forma:

Código:
perrogordo=taco_d_rata(alta,ancha);
Pero lo que quiero es poder guardar también en otras 2 variables, las variables temporales de la función "gordura" y "gato".
¿como podría hacer esto (en lenguaje C, no C++)?

Gracias

No es posible devolver 2 variables o mas, pero puedes utilizar apuntadores de forma tal que tu pases la direccion de memoria de las variables que quieres que se modifiquen dentro de tu función.

Para esto tu función debe ser devlarada de la siguiente forma.


Código:
int taco_d_rata (int altura, int anchura, int *gordura, int *gato, int *perro)
       {

      *gordura=anchura*altura;
      *gato=altura+anchura;
      *perro=altura+anchura+gordura;

       return 0;
      }
y llamarla de una la siguiente forma.

Código:
int main(void){
     int miPerro, miGato, miGordura;
     taco_d_rata(5, 3, &miGordura, &miGato, &miPerro);
}

Con eso deberas tener el resultado de las operaciones que realizaste en tu funcion en las variables miGordura, miPerro y miGato.
  #3 (permalink)  
Antiguo 03/04/2011, 02:01
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Devolver varios valores en una función en C

Me ha sido de mucha ayuda. Gracias
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #4 (permalink)  
Antiguo 03/04/2011, 04:13
 
Fecha de Ingreso: abril-2011
Mensajes: 1
Antigüedad: 13 años
Puntos: 0
Respuesta: Devolver varios valores en una función en C

Lo que te han comentado es la solución. Si tienes alguna duda infórmate acerca de las diferencias entre pasar parámetros por valor y por referencia a una función. y lee algo sobre punteros para entenderlo mejor.
Saludos ^^
  #5 (permalink)  
Antiguo 03/04/2011, 13:18
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Pregunta Respuesta: Devolver varios valores en una función en C

Cita:
Iniciado por autlos Ver Mensaje
Lo que te han comentado es la solución. Si tienes alguna duda infórmate acerca de las diferencias entre pasar parámetros por valor y por referencia a una función. y lee algo sobre punteros para entenderlo mejor.
Saludos ^^
El problema ahora es que según tengo entendido, la solución anterior es solo en c++, ya que es paso de parámetros por referencia. ¿No habría forma de tener el mismo resultado en C?

Gracias
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #6 (permalink)  
Antiguo 03/04/2011, 15:49
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Devolver varios valores en una función en C

Tambien funciona para C.
  #7 (permalink)  
Antiguo 04/04/2011, 13:06
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Devolver varios valores en una función en C

Había leído en [URL="http://profeblog.es/blog/alfredo/2008/03/24/funciones-y-paso-de-parametros-en-c/"]este[/URL] blog que al parecer, el "&" es una sintaxis propia solamente de c++. ¿Entonces como puede compilarse en C? O es que el blog esta equivocado?
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #8 (permalink)  
Antiguo 04/04/2011, 15:23
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 18 años, 10 meses
Puntos: 9
Respuesta: Devolver varios valores en una función en C

existen tres formas en C/C++ de pasar un valor,

1.por valor. Se realizara una copia del valor de la variabel. Aplica para C y C++.
ej.

void fo(int a);

int main()
{
void(1);
}

2. por puntero, se pasara la direccion de memoria de la variable. Aplica para C y C++ ej.

void fo(int *a);

int main()
{
int val;

fo(&val);
}

3. por referencia, se pasa la direccion de memoria de la variable. Aplica solo para C++

ej.

void fo(int &a);

int main()
{
int val;
fo(val);
}

La principal diferencia entre por referencia y por puntero, es que la variable puede utilizarse de manera normal sin la necesidad de utilizar el operador *
  #9 (permalink)  
Antiguo 04/04/2011, 18:27
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Devolver varios valores en una función en C

Y la forma como resolviste el problema de arriba es por punteros!!
  #10 (permalink)  
Antiguo 04/04/2011, 18:49
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Devolver varios valores en una función en C

Muchas gracias! He resuelto mi duda, disculpen mi novatéz.
Saludos
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #11 (permalink)  
Antiguo 05/04/2011, 19:33
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Devolver varios valores en una función en C

Ese problema ya está resuelto, ya que logré compilarlo y todo normal con 1 valor por referencia, pero cuando intento compilar este código me sale una advertencia que dice "Nonportable pinter conversion", y aunque me compila bien el programa, en el resultado de la segunda variable, me sale la dirección de memoria y no el resultado de la operación:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int ratalta, ratagorda, tamanoderata, perro, nom;

int taco_d_rata (int altura, int anchura, int *gordura, int *perron);

int main ()
{
printf("A ver, inserta la altura de la rata: ");
scanf("%i", &ratalta);
printf("Y que tan gorda estaba la rata? ");
scanf("%i", &ratagorda);
printf("A ver, dejame ver... \n");
taco_d_rata (ratagorda, ratalta, &tamanoderata, &perro);
printf("No manches, esa rata media %i metros!!!! \nSolo un perro de %i metros lo comerá... Si que estaba gorda... \n", tamanoderata, perro);
printf("¿No tienes mas ratas que medir?");
scanf("%i", &nom);

return 0;
}

int taco_d_rata (int altura, int anchura, int *gordura, int *perron)
       {

       *gordura = anchura*altura;

       *perron = gordura + anchura + altura;

       return 0;
      }
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk

Etiquetas: devolver
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:53.