Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup es.comp.lenguajes.* Foro > Newsgroup es.comp.lenguajes.c++
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 30-05-2007, 03:24:19
R.G.A.M.
 
Mensajes: n/a
Predeterminado Salidas de Funciones

Intento crear un programa con Dev - C++. Necesito una función, en la
cual ingrese dos argumentos, y cuya salida sea dos, también. Para ello
probé la operación de intercambio de variables:

int intercambio_variables(int var1,int var2)
{
return(var2,var1);
}

Al hacer la prueba de escritorio, me da lo siguiente:

int A = 1;
int B = 0;
cout << intercambio_variables(A,B);

El resultado que aparece siempre es 1, en este caso.
¿Existe alguna forma de definir una función de modo que logre obtener
los dos valores deseados? (por supuesto que es posible, sólo que no sé
cómo)

Suelo manejar Scilab, y estoy incursionando en C++. Con este primero
no tengo problema, ya que puedo declarar una función de esta forma:

function [X,Y] = intercambiar(m,n) //X,Y son los argumentos de salida.
X = n
Y = a
endfunction

Y, si tomo el siguiente ejemplo, se realiza exitosamente el
intercambio de variables:

A = 1
B = 0
[A,B] = intercambiar(A,B)
disp(A,B)

Más que nada me interesa saber cómo puedo convertir la salida de una
función en un array, y leer sin inconvenientes.

Muchas gracias por toda la ayuda que pudieran proporcionar.

Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 30-05-2007, 11:10:42
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

On 29 May 2007 20:24:19 -0700, "R.G.A.M." <rgam1989***yahoo.com.ar> wrote:

>El resultado que aparece siempre es 1, en este caso.
>¿Existe alguna forma de definir una función de modo que logre obtener
>los dos valores deseados? (por supuesto que es posible, sólo que no sé


El return propiamente dicho solo devuelve un resultado,
no es posible devolver dos.

Lo que se suele hacer es añadir un parámetro que sea un
puntero a una variable, y rellenear el valor de esa variable
antes del return.

Te pongo el ejemplo con dos parámetros:

void intercambio_variables(int var1,int var2, int *p1, int *p2)
{
*p1 = var2;
*p2 = var1;
}

O mejor:

void intercambio_variables(int *p1, int *p2)
{
int v = *p1;
*p1 = *p2;
*p2 = v;
}


O mejor:

void intercambio_variables(int &var1,int &var2)
{
int v = var1;
var1 = var2;
var2 = v;
}

Otra solucion es definir una estructura de datos que
contenga varias variables, entonces se puede devolver
un elemento de esa estrucrura que al ser un tipo compuesto
contiene varios valores simpels, pero no es buena idea, es
poco eficiente, cuando hay que devolver tipos compuestos tambien
se suele recurrir a pasar uan referencia como parámetro
y rellenar su valor antes del return.

Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #3 (permalink)  
Antiguo 30-05-2007, 11:10:42
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

On 29 May 2007 20:24:19 -0700, "R.G.A.M." <rgam1989***yahoo.com.ar> wrote:

>El resultado que aparece siempre es 1, en este caso.
>¿Existe alguna forma de definir una función de modo que logre obtener
>los dos valores deseados? (por supuesto que es posible, sólo que no sé


El return propiamente dicho solo devuelve un resultado,
no es posible devolver dos.

Lo que se suele hacer es añadir un parámetro que sea un
puntero a una variable, y rellenear el valor de esa variable
antes del return.

Te pongo el ejemplo con dos parámetros:

void intercambio_variables(int var1,int var2, int *p1, int *p2)
{
*p1 = var2;
*p2 = var1;
}

O mejor:

void intercambio_variables(int *p1, int *p2)
{
int v = *p1;
*p1 = *p2;
*p2 = v;
}


O mejor:

void intercambio_variables(int &var1,int &var2)
{
int v = var1;
var1 = var2;
var2 = v;
}

Otra solucion es definir una estructura de datos que
contenga varias variables, entonces se puede devolver
un elemento de esa estrucrura que al ser un tipo compuesto
contiene varios valores simpels, pero no es buena idea, es
poco eficiente, cuando hay que devolver tipos compuestos tambien
se suele recurrir a pasar uan referencia como parámetro
y rellenar su valor antes del return.

Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #4 (permalink)  
Antiguo 30-05-2007, 11:10:42
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

On 29 May 2007 20:24:19 -0700, "R.G.A.M." <rgam1989***yahoo.com.ar> wrote:

>El resultado que aparece siempre es 1, en este caso.
>¿Existe alguna forma de definir una función de modo que logre obtener
>los dos valores deseados? (por supuesto que es posible, sólo que no sé


El return propiamente dicho solo devuelve un resultado,
no es posible devolver dos.

Lo que se suele hacer es añadir un parámetro que sea un
puntero a una variable, y rellenear el valor de esa variable
antes del return.

Te pongo el ejemplo con dos parámetros:

void intercambio_variables(int var1,int var2, int *p1, int *p2)
{
*p1 = var2;
*p2 = var1;
}

O mejor:

void intercambio_variables(int *p1, int *p2)
{
int v = *p1;
*p1 = *p2;
*p2 = v;
}


O mejor:

void intercambio_variables(int &var1,int &var2)
{
int v = var1;
var1 = var2;
var2 = v;
}

Otra solucion es definir una estructura de datos que
contenga varias variables, entonces se puede devolver
un elemento de esa estrucrura que al ser un tipo compuesto
contiene varios valores simpels, pero no es buena idea, es
poco eficiente, cuando hay que devolver tipos compuestos tambien
se suele recurrir a pasar uan referencia como parámetro
y rellenar su valor antes del return.

Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #5 (permalink)  
Antiguo 30-05-2007, 11:10:42
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

On 29 May 2007 20:24:19 -0700, "R.G.A.M." <rgam1989***yahoo.com.ar> wrote:

>El resultado que aparece siempre es 1, en este caso.
>¿Existe alguna forma de definir una función de modo que logre obtener
>los dos valores deseados? (por supuesto que es posible, sólo que no sé


El return propiamente dicho solo devuelve un resultado,
no es posible devolver dos.

Lo que se suele hacer es añadir un parámetro que sea un
puntero a una variable, y rellenear el valor de esa variable
antes del return.

Te pongo el ejemplo con dos parámetros:

void intercambio_variables(int var1,int var2, int *p1, int *p2)
{
*p1 = var2;
*p2 = var1;
}

O mejor:

void intercambio_variables(int *p1, int *p2)
{
int v = *p1;
*p1 = *p2;
*p2 = v;
}


O mejor:

void intercambio_variables(int &var1,int &var2)
{
int v = var1;
var1 = var2;
var2 = v;
}

Otra solucion es definir una estructura de datos que
contenga varias variables, entonces se puede devolver
un elemento de esa estrucrura que al ser un tipo compuesto
contiene varios valores simpels, pero no es buena idea, es
poco eficiente, cuando hay que devolver tipos compuestos tambien
se suele recurrir a pasar uan referencia como parámetro
y rellenar su valor antes del return.

Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #6 (permalink)  
Antiguo 30-05-2007, 11:10:42
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

On 29 May 2007 20:24:19 -0700, "R.G.A.M." <rgam1989***yahoo.com.ar> wrote:

>El resultado que aparece siempre es 1, en este caso.
>¿Existe alguna forma de definir una función de modo que logre obtener
>los dos valores deseados? (por supuesto que es posible, sólo que no sé


El return propiamente dicho solo devuelve un resultado,
no es posible devolver dos.

Lo que se suele hacer es añadir un parámetro que sea un
puntero a una variable, y rellenear el valor de esa variable
antes del return.

Te pongo el ejemplo con dos parámetros:

void intercambio_variables(int var1,int var2, int *p1, int *p2)
{
*p1 = var2;
*p2 = var1;
}

O mejor:

void intercambio_variables(int *p1, int *p2)
{
int v = *p1;
*p1 = *p2;
*p2 = v;
}


O mejor:

void intercambio_variables(int &var1,int &var2)
{
int v = var1;
var1 = var2;
var2 = v;
}

Otra solucion es definir una estructura de datos que
contenga varias variables, entonces se puede devolver
un elemento de esa estrucrura que al ser un tipo compuesto
contiene varios valores simpels, pero no es buena idea, es
poco eficiente, cuando hay que devolver tipos compuestos tambien
se suele recurrir a pasar uan referencia como parámetro
y rellenar su valor antes del return.

Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #7 (permalink)  
Antiguo 30-05-2007, 11:10:42
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

On 29 May 2007 20:24:19 -0700, "R.G.A.M." <rgam1989***yahoo.com.ar> wrote:

>El resultado que aparece siempre es 1, en este caso.
>¿Existe alguna forma de definir una función de modo que logre obtener
>los dos valores deseados? (por supuesto que es posible, sólo que no sé


El return propiamente dicho solo devuelve un resultado,
no es posible devolver dos.

Lo que se suele hacer es añadir un parámetro que sea un
puntero a una variable, y rellenear el valor de esa variable
antes del return.

Te pongo el ejemplo con dos parámetros:

void intercambio_variables(int var1,int var2, int *p1, int *p2)
{
*p1 = var2;
*p2 = var1;
}

O mejor:

void intercambio_variables(int *p1, int *p2)
{
int v = *p1;
*p1 = *p2;
*p2 = v;
}


O mejor:

void intercambio_variables(int &var1,int &var2)
{
int v = var1;
var1 = var2;
var2 = v;
}

Otra solucion es definir una estructura de datos que
contenga varias variables, entonces se puede devolver
un elemento de esa estrucrura que al ser un tipo compuesto
contiene varios valores simpels, pero no es buena idea, es
poco eficiente, cuando hay que devolver tipos compuestos tambien
se suele recurrir a pasar uan referencia como parámetro
y rellenar su valor antes del return.

Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #8 (permalink)  
Antiguo 30-05-2007, 19:54:04
Eduardo Villanueva Che
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

R.G.A.M. wrote:

> Intento crear un programa con Dev - C++. Necesito una función, en la
> cual ingrese dos argumentos, y cuya salida sea dos, también.


Una función sólo devuelve un elemento, ahora bien, un elemento puede
contener otros elementos. Para 2 elementos tienes std:air, aunque como ya
te ha dicho Pedro Maicas, devolver por valor datos complejos no es
eficiente. SerÃ***a mejor pasar por referencia los datos a modificar.

> Para ello
> probé la operación de intercambio de variables:
>
> int intercambio_variables(int var1,int var2)
> {
> return(var2,var1);
> }


No, esta función devuelve un entero, y sólo uno.
De todas formas, para intercambiar 2 variables deberÃ***as usar std::swap

> Al hacer la prueba de escritorio, me da lo siguiente:
>
> int A = 1;
> int B = 0;
> cout << intercambio_variables(A,B);
>
> El resultado que aparece siempre es 1, en este caso.
> ¿Existe alguna forma de definir una función de modo que logre obtener
> los dos valores deseados? (por supuesto que es posible, sólo que no sé
> cómo)


std:air<int,int> intercambio_variables(int var1,int var2)
{
return std:air<int,int>(var2, var1);
}

Ahora bien, creo que no esta definido el operador << para std:air, aunque
podrÃ***as definirlo tu.

> Suelo manejar Scilab, y estoy incursionando en C++. Con este primero
> no tengo problema, ya que puedo declarar una función de esta forma:
>
> function [X,Y] = intercambiar(m,n) //X,Y son los argumentos de salida.
> X = n
> Y = a
> endfunction
>
> Y, si tomo el siguiente ejemplo, se realiza exitosamente el
> intercambio de variables:
>
> A = 1
> B = 0
> [A,B] = intercambiar(A,B)
> disp(A,B)


Aunque haya cierta similitud en la sintaxis, cada lenguaje tiene su forma de
hacer las cosas. No puedes/debes usar C++ asÃ***. Aunque no debe ser difÃ***cil
portar código de Scilab a C++, hace tiempo porté varias simulaciones de
Matlab a C sin muchos problemas, aunque también es cierto que las
desarrollé con la idea de correrlas al final en C

> Más que nada me interesa saber cómo puedo convertir la salida de una
> función en un array, y leer sin inconvenientes.


La salida de una función será la que tu declares, puede ser int, o
std::vector<float> o cualquier tipo que puedas crear, ahora bien, la
eficiencia ya es otra historia.

Si haces mucho cálculo matricial y quieres devolver "matrices", "vectores" o
mejor dicho, algo que se comporte como si lo fuera y con un rendimiento
óptimo, debes dominar los "expression templates", aunque requiere un buen
dominio del C++:

http://www.ddj.com/dept/cpp/184401627

hay varias bibliotecas matemáticas libres que usan esta técnica.

> Muchas gracias por toda la ayuda que pudieran proporcionar.


De nada, y ánimo con el C++
Responder Con Cita
  #9 (permalink)  
Antiguo 30-05-2007, 19:54:04
Eduardo Villanueva Che
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

R.G.A.M. wrote:

> Intento crear un programa con Dev - C++. Necesito una función, en la
> cual ingrese dos argumentos, y cuya salida sea dos, también.


Una función sólo devuelve un elemento, ahora bien, un elemento puede
contener otros elementos. Para 2 elementos tienes std:air, aunque como ya
te ha dicho Pedro Maicas, devolver por valor datos complejos no es
eficiente. SerÃ***a mejor pasar por referencia los datos a modificar.

> Para ello
> probé la operación de intercambio de variables:
>
> int intercambio_variables(int var1,int var2)
> {
> return(var2,var1);
> }


No, esta función devuelve un entero, y sólo uno.
De todas formas, para intercambiar 2 variables deberÃ***as usar std::swap

> Al hacer la prueba de escritorio, me da lo siguiente:
>
> int A = 1;
> int B = 0;
> cout << intercambio_variables(A,B);
>
> El resultado que aparece siempre es 1, en este caso.
> ¿Existe alguna forma de definir una función de modo que logre obtener
> los dos valores deseados? (por supuesto que es posible, sólo que no sé
> cómo)


std:air<int,int> intercambio_variables(int var1,int var2)
{
return std:air<int,int>(var2, var1);
}

Ahora bien, creo que no esta definido el operador << para std:air, aunque
podrÃ***as definirlo tu.

> Suelo manejar Scilab, y estoy incursionando en C++. Con este primero
> no tengo problema, ya que puedo declarar una función de esta forma:
>
> function [X,Y] = intercambiar(m,n) //X,Y son los argumentos de salida.
> X = n
> Y = a
> endfunction
>
> Y, si tomo el siguiente ejemplo, se realiza exitosamente el
> intercambio de variables:
>
> A = 1
> B = 0
> [A,B] = intercambiar(A,B)
> disp(A,B)


Aunque haya cierta similitud en la sintaxis, cada lenguaje tiene su forma de
hacer las cosas. No puedes/debes usar C++ asÃ***. Aunque no debe ser difÃ***cil
portar código de Scilab a C++, hace tiempo porté varias simulaciones de
Matlab a C sin muchos problemas, aunque también es cierto que las
desarrollé con la idea de correrlas al final en C

> Más que nada me interesa saber cómo puedo convertir la salida de una
> función en un array, y leer sin inconvenientes.


La salida de una función será la que tu declares, puede ser int, o
std::vector<float> o cualquier tipo que puedas crear, ahora bien, la
eficiencia ya es otra historia.

Si haces mucho cálculo matricial y quieres devolver "matrices", "vectores" o
mejor dicho, algo que se comporte como si lo fuera y con un rendimiento
óptimo, debes dominar los "expression templates", aunque requiere un buen
dominio del C++:

http://www.ddj.com/dept/cpp/184401627

hay varias bibliotecas matemáticas libres que usan esta técnica.

> Muchas gracias por toda la ayuda que pudieran proporcionar.


De nada, y ánimo con el C++
Responder Con Cita
  #10 (permalink)  
Antiguo 30-05-2007, 19:54:04
Eduardo Villanueva Che
 
Mensajes: n/a
Predeterminado Re: Salidas de Funciones

R.G.A.M. wrote:

> Intento crear un programa con Dev - C++. Necesito una función, en la
> cual ingrese dos argumentos, y cuya salida sea dos, también.


Una función sólo devuelve un elemento, ahora bien, un elemento puede
contener otros elementos. Para 2 elementos tienes std:air, aunque como ya
te ha dicho Pedro Maicas, devolver por valor datos complejos no es
eficiente. SerÃ***a mejor pasar por referencia los datos a modificar.

> Para ello
> probé la operación de intercambio de variables:
>
> int intercambio_variables(int var1,int var2)
> {
> return(var2,var1);
> }


No, esta función devuelve un entero, y sólo uno.
De todas formas, para intercambiar 2 variables deberÃ***as usar std::swap

> Al hacer la prueba de escritorio, me da lo siguiente:
>
> int A = 1;
> int B = 0;
> cout << intercambio_variables(A,B);
>
> El resultado que aparece siempre es 1, en este caso.
> ¿Existe alguna forma de definir una función de modo que logre obtener
> los dos valores deseados? (por supuesto que es posible, sólo que no sé
> cómo)


std:air<int,int> intercambio_variables(int var1,int var2)
{
return std:air<int,int>(var2, var1);
}

Ahora bien, creo que no esta definido el operador << para std:air, aunque
podrÃ***as definirlo tu.

> Suelo manejar Scilab, y estoy incursionando en C++. Con este primero
> no tengo problema, ya que puedo declarar una función de esta forma:
>
> function [X,Y] = intercambiar(m,n) //X,Y son los argumentos de salida.
> X = n
> Y = a
> endfunction
>
> Y, si tomo el siguiente ejemplo, se realiza exitosamente el
> intercambio de variables:
>
> A = 1
> B = 0
> [A,B] = intercambiar(A,B)
> disp(A,B)


Aunque haya cierta similitud en la sintaxis, cada lenguaje tiene su forma de
hacer las cosas. No puedes/debes usar C++ asÃ***. Aunque no debe ser difÃ***cil
portar código de Scilab a C++, hace tiempo porté varias simulaciones de
Matlab a C sin muchos problemas, aunque también es cierto que las
desarrollé con la idea de correrlas al final en C

> Más que nada me interesa saber cómo puedo convertir la salida de una
> función en un array, y leer sin inconvenientes.


La salida de una función será la que tu declares, puede ser int, o
std::vector<float> o cualquier tipo que puedas crear, ahora bien, la
eficiencia ya es otra historia.

Si haces mucho cálculo matricial y quieres devolver "matrices", "vectores" o
mejor dicho, algo que se comporte como si lo fuera y con un rendimiento
óptimo, debes dominar los "expression templates", aunque requiere un buen
dominio del C++:

http://www.ddj.com/dept/cpp/184401627

hay varias bibliotecas matemáticas libres que usan esta técnica.

> Muchas gracias por toda la ayuda que pudieran proporcionar.


De nada, y ánimo con el C++
Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
funciones definidas por el usuario que involucren funciones de exc juan Newsgroup microsoft.public.es.excel 4 15-12-2007 03:53:34
Dos salidas de Internet Jose Abanto Newsgroup microsoft.public.es.windowsxp.seguridad 3 05-11-2007 07:06:26
Salidas de Funciones R.G.A.M. Newsgroup es.comp.lenguajes.c++ 0 30-05-2007 03:24:19
Salidas de Funciones R.G.A.M. Newsgroup es.comp.lenguajes.c++ 0 30-05-2007 03:24:19
Salidas en diciembre ~ Andalucía Sub ~ Newsgroup es.rec.deportes.buceo 0 28-10-2003 17:54:00





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.