![]() |
| |||
| 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. |
| | ||||
| ||||
| |
| |||
| 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 |
| |||
| 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 |
| |||
| 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 |
| |||
| 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 |
| |||
| 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 |
| |||
| 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 |
| |||
| 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 yate 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, aunquepodrÃ***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++ ![]() |
| |||
| 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 yate 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, aunquepodrÃ***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++ ![]() |
| |||
| 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 yate 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, aunquepodrÃ***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++ ![]() |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
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 |