elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:51  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Devolver varias variables en una sola función
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Devolver varias variables en una sola función  (Leído 703 veces)
javirk

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Devolver varias variables en una sola función
« en: 28 Enero 2012, 17:02 »

Hola, estoy haciendo un pequeño programa en C++ y me gustaría saber cómo devolver más de una variable en una función. la función lo que hace es recoger tres números que mete el usuario, y me gustaría usar esos tres números en el main. ¿Cómo puedo hacerlo?


En línea
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #1 en: 28 Enero 2012, 18:11 »

mmm devolver los valores como parametro seria una opcion, *nunca devolver punteros generados dentro de la funcion*
o o bien pasarle a la funcion un puntero de array en donde se desee que se guarden los valores, aver esperemos a alguien
mas a ver que opina


En línea
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Devolver varias variables en una sola función
« Respuesta #2 en: 28 Enero 2012, 18:18 »

Hola

Pues una forma sería utilizando parámetros por referencia. Te pongo un ejemplo:

Código
#include <iostream>
 
using namespace std;
 
void funcion(int &a, int &b, int &c) // Fijate en los &
{
   cin >> a;
   cin >> b;
   cin >> c;
}
 
int main()
{
   int a = 0, b = 0, c = 0;
   funcion(a, b, c);
   cout << "Los valores de a, b, y c son: " << a << ", " << b << " y " << c;
   cin.get(); //Pausamos el programa
   return 0;
}
 

Te recomiendo que cojas un buen libro y te pongas con él, dentro del subforo de C/C++ hay un post con varios libros.

Saludos
En línea

Breakbeat como forma de vida
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #3 en: 28 Enero 2012, 18:30 »

dejo el mio:

Código
#include <iostream>
 
using namespace std;
 
void func1(int* Mylp)
{
   *Mylp = 10; Mylp++;
   *Mylp = 20; Mylp++;
   *Mylp = 50; Mylp++;
   // ...
 
}
 
 
int main()
{
   int DATAs[10] = {0}; // Pointer to data, for store the dates
 
   func1(DATAs);
   cout << DATAs[0] << endl;
   cout << DATAs[1] << endl;
   cout << DATAs[2] << endl;
 
}
 


tambie puede indicarle al compilador que lo que quiere es pasar explicitamente un array de esta forma:

Código:
#include <iostream>

using namespace std;

void func1(int Mylp[])
{
    Mylp[0] = 10;
    Mylp[1] = 20;
    Mylp[2] = 50;
    // ...

}


int main()
{
    int DATAs[5] = {0}; // Pointer to data, for store the dates


    func1(DATAs);
    cout << DATAs[0] << endl;
    cout << DATAs[1] << endl;
    cout << DATAs[2] << endl;

}

solamente que el puntero que se le pasa es constante no podemos hacer que apunte a otro lugar y creo que seria mas facil de entender :P igual me gusta mas la primera forma
« Última modificación: 28 Enero 2012, 19:17 por RHL » En línea
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Devolver varias variables en una sola función
« Respuesta #4 en: 28 Enero 2012, 18:39 »

Hola

RHL tu solución es muy buena pero dada su pregunta no creo que haya llegado aun a los punteros y no se si entenderá tu código.

No te lo tomes a mal, solo digo que quizá no lo entienda, eso es todo.

Saludos
En línea

Breakbeat como forma de vida
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #5 en: 28 Enero 2012, 18:45 »

@satu: bueno quiza , quien sabe xd
lo importante es que al menos ya tienen dos formas de como hacerlo y aprender esos codigos le sera muy facil
mas cuando ya este en el tema de los punteros ;D
En línea
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Devolver varias variables en una sola función
« Respuesta #6 en: 28 Enero 2012, 18:48 »

Toda la razón, así si no sabe sobre punteros le entrarán ganas de saber cómo funcionan.

Saludos
En línea

Breakbeat como forma de vida
Xandrete

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #7 en: 28 Enero 2012, 19:14 »

También puedes hacer que tu función devuelva una tupla.

Código
struct Result {
int result1;
char result2;
double result3;
};
 
Result foo(int param) {
Result r;
// GENERIC CODE
return r;
}

Saludos
En línea
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #8 en: 28 Enero 2012, 19:19 »

@Xandrete... :
Al declarar variables dentro de funciones no* se pueden retornar porque las variables son
locales la memoria asignada en ese momento es liberada, despues puede tener otros valores
pd: debe ser un tipo de dato como char, int :P

pd2: creo que si, es legal devolver estructuras :P solamente que es algo lento.. :P
al menos el dato ya lo tienes...

cierto solamente que en tiempo de ejecucion es mas lento que pasar el puntero, a los datos :P
« Última modificación: 28 Enero 2012, 19:43 por RHL » En línea
Xandrete

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #9 en: 28 Enero 2012, 19:38 »

@Xandrete... :
Al declarar variables dentro de funciones no* se pueden retornar porque las variables son
locales la memoria asignada en ese momento es liberada, despues puede tener otros valores
pd: debe ser un tipo de dato como char, int :P

¿Eh? Lo que dices no se aplica al código que yo he propuesto. Esto es algo que he hecho millones de veces, de hecho.

Retornas una copia de esa variable, no un puntero a la variable declarada dentro de la función. Pruébalo y verás que funciona perfectamente (y si compilas con -Wall y -Werror, el compilador no se quejará ni un poquito).

Saludos.

EDITO: Acabo de leer tu PD2. Es totalmente legal, te lo aseguro. ¿Lento? Bueno, en un caso es lento el paso de parámetros, y en otro es lento el retorno de la función. Me explico. Pon que quieres devolver/asignar 100 datos en una función, y que tratas de hacerlo mediante la primera alternativa (la de paso de parámetros por referencia). En ese caso es "lento" el paso de parámetros porque se han de guardar 100 punteros en pila (más parámetros adicionales que hicieran falta en la función). Sin embargo, el retorno es rápido porque no hay nada que devolver. En mi propuesta (usando struct) es rápido el paso de parámetros (porque seguramente no hay que usar ni la pila) pero lento el retorno de la función (porque es ahí cuando hay que recurrir a ella).

EDITO OTRA VEZ: Si tienes algo que replicarme, dale a responder otra vez, no sigas editanto el tuyo, xD (yo lo hago para no poner dos posts seguidos  ;D)
« Última modificación: 28 Enero 2012, 19:58 por Xandrete » En línea
eleon

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #10 en: 28 Enero 2012, 19:44 »

Si no quieres ver punteros se puede hacer paso por referencia puro:

Código
#include <iostream>
using namespace std;
 
void funcion (int &sobrenombreVariable) /* Esto se vuelve un "sobrenombre" de la variable, todas las modificiaciones
que hagas en "sobrenombreVariable" se harán en "variable" */

{
sobrenombreVariable = 10;
}
 
int main ()
{
int variable = 0;
funcion (variable); //Le pasamos la variable a la que queremos que afecte el sobrenombre
 
return 0;
}

Busca "paso por referencia" y encontrarás más información. Saludos.
« Última modificación: 28 Enero 2012, 19:48 por eleon » En línea

RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #11 en: 28 Enero 2012, 19:51 »

@Xandrete:
cierto, quise decir el retorno de la funcion ya que como dices si la estructura pudiera tener mas de 100 elementos cada elementos va a tener que pasarse a un registro luego hacia la pila por cada elemento lo peor creo que nose si esto lo implementaria el
compilador haciendo un bucle, en el peor de los casos escribia todas las instrucciones y seria mas lento, y bueno compare eso de lento a comparacionde pasarle el puntero de una estructura :P en mi pd3 ( lo publique antes que respondieras a mi pd2 ) igual
esta bien tu codigo Xandrete ;D
En línea
Xandrete

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #12 en: 28 Enero 2012, 19:57 »

Si no quieres ver punteros se puede hacer paso por referencia puro:

Código
#include <iostream>
using namespace std;
 
void funcion (int &sobrenombreVariable) /* Esto se vuelve un "sobrenombre" de la variable, todas las modificiaciones
que hagas en "sobrenombreVariable" se harán en "variable" */

{
sobrenombreVariable = 10;
}
 
int main ()
{
int variable = 0;
funcion (variable); //Le pasamos la variable a la que queremos que afecte el sobrenombre
 
return 0;
}

Busca "paso por referencia" y encontrarás más información. Saludos.

Correcto. Pero es lo mismo que dijo satu, xD. Se te adelantaron  ;)

¡Saludos!
En línea
eleon

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #13 en: 28 Enero 2012, 20:24 »

Ups, no me di cuenta.
En línea

javirk

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #14 en: 29 Enero 2012, 13:04 »

Ya lo he conseguido, muchas gracias a todos por vuestra ayuda!
En línea
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Varias señales Wifi en una sola señal
Hacking Wireless
charlesmanx 1 1,209 Último mensaje 16 Mayo 2009, 23:25
por |FluiD|
como declaro varias variables en una sola linea C?¿
Programación C/C++
lupitapro 7 2,216 Último mensaje 14 Junio 2010, 23:09
por .:WindHack:.
devolver valor de uan funcion
Programación C/C++
mapers 1 642 Último mensaje 15 Noviembre 2010, 05:14
por Mr.Blue
[batch]unir dos o mas variables en una sola [Solucionado]
Scripting
z_ane_666 3 1,616 Último mensaje 3 Enero 2011, 22:32
por klaine
Devolver un vector en una funcion
Programación C/C++
d00ze13 5 1,784 Último mensaje 12 Enero 2011, 09:41
por Leo Gutiérrez.
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines