elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++]Numero ilimitado de argumentos en funciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++]Numero ilimitado de argumentos en funciones.  (Leído 2,578 veces)
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
[C++]Numero ilimitado de argumentos en funciones.
« en: 21 Octubre 2018, 00:20 am »

Buenas, tengo este código:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int sum(int num1, int num2);
  6.  
  7. int sum(int num1, int num2)
  8. {
  9. return num1 + num2;
  10. }
  11.  
  12. int main()
  13. {
  14. int i = sum(5, 4, 6, 7, 8); // <= como le haria para eso?
  15.  
  16. cout << i << endl;
  17. }
  18.  
Pero me gustaría poder pasarle multiples números (argumentos) a la función sum().
Como podría hacer esto?
Saludos  :)


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #1 en: 21 Octubre 2018, 01:24 am »

Me mataste no se,  seguro has programado en otro lenguaje y podias hacerlo y quisiera saber como lo hacias  :silbar:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int sum(int num1, int num2, int num3, int num4, int num5)
  6. {
  7. return num1+num2+num3+num4+num5;
  8. }
  9.  
  10. int main()
  11. {
  12. cout<<"Suma: "<<sum(5, 4, 6, 7, 8)<<endl;
  13. }


En línea

7w7
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #2 en: 21 Octubre 2018, 01:44 am »

Gracias, pero no es así, me refiero a que el numero de argumentos puede ser infinito.
Te dare un ejemplo en Python:
Código
  1. def add(*args): #Sumar (add)
  2.    total = 0
  3.    for value in args:
  4.        total = total + value
  5.        print(total)
  6.  
  7. print(add(5,3,5,29))
  8. # salida 42
  9. print(add(73,32,32,2))
  10. # salida 139
  11.  
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #3 en: 21 Octubre 2018, 02:01 am »

Ahora recuerdo que usaba eso con los switchs de esta forma:
Código
  1. switch(opcion){
  2. case 1 ... 100: sumar(1,2,3,4,5);break;
  3. default: cout<<"Opcion incorrecta"<<endl;
  4. }

Entonces lo que pides es algo asi
Código
  1. ##include <iostream>
  2. #include <stdarg.h>
  3.  
  4. using namespace std;
  5.  
  6. void sum(int n, ...)
  7. {
  8. int i, suma=0;
  9. int val;
  10. va_list vl;
  11.   va_start(vl,n);
  12.   for(i=0;i<n;i++){
  13.   val=va_arg(vl,int);
  14. suma+=val;
  15. }
  16. va_end(vl);
  17. cout<<"Suma: "<<suma<<endl;
  18. }
  19.  
  20. int main()
  21. {
  22. sum(4, 4, 6, 7, 8);//El primer argumento indica cuantos argumentos se sumaran a partir del segundo
  23. }
  24.  
« Última modificación: 21 Octubre 2018, 02:20 am por Beginner Web » En línea

7w7
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #4 en: 21 Octubre 2018, 02:11 am »

Gracias, funciona pero si cambio los numeros que se le pasan a sum(), se queda pegado mostrando 30, sin importar que numero le pongas.
... y depurando esto es lo que le pasa a la variable suma que esta en el for:
5
10
15
20
25
30.
No tiene sentido sinceramente que eso pase?
En línea

Dresden

Desconectado Desconectado

Mensajes: 5


First solve the problem, then write the code.


Ver Perfil
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #5 en: 21 Octubre 2018, 02:17 am »

En este caso, el primer número indica la cantidad de elementos de la lista. Compila con el estándar C++ 98 en adelante:

Código
  1. #include <iostream>
  2. #include <cstdarg>
  3.  
  4. int sumar(int, ...);
  5.  
  6. int main()
  7. {
  8.    std::cout << sumar(5, 5, 4, 6, 7, 8) << '\n';
  9.    return 0;
  10. }
  11.  
  12. int sumar(int nNumeros, ...)
  13. {
  14.    va_list numeros;
  15.    va_start(numeros, nNumeros);
  16.  
  17.    int suma = 0;
  18.    for (int i = 0; i < nNumeros; ++i)
  19.    {
  20.        suma += va_arg(numeros, int);
  21.    }
  22.  
  23.    va_end(numeros);
  24.    return suma;
  25. }

Estos compilan con el estándar C++ 11 o superior:

Código
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int sumar(const std::vector<int> &);
  5.  
  6. int main()
  7. {
  8.    int suma = sumar({ 5, 4, 6, 7, 8 });
  9.    std::cout << suma << '\n';
  10.  
  11.    return 0;
  12. }
  13.  
  14. int sumar(const std::vector<int> &numeros)
  15. {
  16.    int suma = 0;
  17.  
  18.    for (const int &num : numeros)
  19.    {
  20.        suma += num;
  21.    }
  22.    return suma;
  23. }

Código
  1. #include <iostream>
  2.  
  3. template <typename T>
  4. T sumar(T inicio)
  5. {
  6.    return inicio;
  7. }
  8.  
  9. template <typename T, typename... Nums>
  10. T sumar(T inicio, Nums... nums)
  11. {
  12.    return inicio + sumar(nums...);
  13. }
  14.  
  15. int main()
  16. {
  17.    const int suma = sumar(5, 4, 6, 7, 8);
  18.    std::cout << suma << '\n';
  19.    return 0;
  20. }
En línea

PROGRAMMER
noun. [pro-gram-mer]
Someone who solves a problem
you didn't know you had, in a way
that you don't understand.

See also wizard, magician.
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #6 en: 21 Octubre 2018, 02:27 am »

Muchas gracias, va a la perfección.
Saludos  :)
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: [C++]Numero ilimitado de argumentos en funciones.
« Respuesta #7 en: 21 Octubre 2018, 18:30 pm »

Para complementar la respuesta dada previamente, si tienes un vector de enteros v, una manera de sumarlos es esta:

Código
  1. suma = accumulate(v.begin(), v.end(), 0)

Tienes que agregar

Código
  1. #include <numeric>
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funciones con número arbitrario de argumentos [PHP]
PHP
madpitbull_99 3 5,095 Último mensaje 6 Marzo 2011, 22:31 pm
por JungleBoogie
ver argumentos de funciones codeblocks
Programación C/C++
_niu 2 2,946 Último mensaje 15 Diciembre 2011, 21:57 pm
por _niu
Problema con argumentos por defectos en funciones.
Programación C/C++
anonimo12121 3 2,569 Último mensaje 25 Julio 2012, 14:18 pm
por overxfl0w13
Funciones con nº variable de argumentos - stdarg.h
Programación C/C++
SSantiago90 5 3,554 Último mensaje 6 Mayo 2013, 22:05 pm
por 85
Funciones con argumentos OR: ¿Como?
Programación C/C++
Desiresportal 1 1,643 Último mensaje 1 Junio 2016, 14:34 pm
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines