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

[SOLUCIONADO] Funciones c++

Estas en el tema de Funciones c++ en el foro de C/C++ en Foros del Web. Buenas, estaba haciendo unos ejercicios para ir mejorando en c++,. y me he topado con un problema, he intentado resolver este usando funciones (que es ...
  #1 (permalink)  
Antiguo 04/04/2015, 06:53
Avatar de HelThunk  
Fecha de Ingreso: marzo-2015
Ubicación: std::cout<<"En mi PC";
Mensajes: 33
Antigüedad: 9 años
Puntos: 0
Funciones c++

Buenas, estaba haciendo unos ejercicios para ir mejorando en c++,. y me he topado con un problema, he intentado resolver este usando funciones (que es lo que todos recomendáis para no hacer un código largo), sabría resolver este problema usando otros métodos (if, else,swich...) pero me gustaría aprender a usar funciones.. les muestro mi cogido, ¿podríais echarme una mano?

Código C++:
Ver original
  1. #include <iostream>
  2. //23. Programa que muestre un menú de múltiplos (De 2,3,5,7,11).
  3.  
  4. //Funcion multiplo de X num;
  5. void multiple(int a){
  6.  
  7.     int i;
  8.     for (i = 0; i < 61; i++){
  9.         if (i%a == 0){
  10.             std::cout << i <<std::endl;
  11.         }
  12.     }
  13.     std::cin.get();
  14. }
  15.  
  16. //Funcion principal;
  17. int main(){
  18.     std::cout << "Bienvenido, eliga la opcion que mas se acomode a sus necesidads" << std::endl << std::endl;;
  19.     std::cout << "[1]Multiplos de 2" << std::endl;
  20.     std::cout << "[2]Multiplos de 3" << std::endl;
  21.     std::cout << "[3]Multiplos de 5" << std::endl;
  22.     std::cout << "[4]Multiplos de 7" << std::endl;
  23.     std::cout << "[5]Multiplos de 11" << std::endl;
  24.     //damos valor a 'a';
  25.     int a;
  26.     std::cin >> a;
  27.     //si introduce 5, 4, 3, 2, 1;
  28.     if (a < 6 && a > 0){
  29.         void multiple(int a);//NO ME DEVUELVE EL VALOR, HE PROBADO CON INT Y TAMPOCO
  30.     }
  31.     //si introduce un valor no valido;
  32.     else{
  33.         std::cout << "Introduzca un numero del 1 al 5" << std::endl;
  34.        
  35.     }
  36.     //terminamos el proceso
  37.     std::cin.get();
  38.     return 0;
  39. }
  #2 (permalink)  
Antiguo 04/04/2015, 07:53
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Funciones c++

Hola.

Lo que sucede es que envias a la función la misma variable que usas para las opciones y los valores no son concordantes: 1 -> 2, 2 -> 3, 3 -> 5, 4 -> 7, 5 -> 11.

Una solución es usar un arreglo que contenga los valores a enviar para hallar los múltiplos:
Código C++:
Ver original
  1. ...
  2. int main() {
  3.   int mul[5] = {2, 3, 5, 7, 11};
  4.   std::cout << "Bienvenido, eliga la opcion que mas se acomode a sus necesidads" << std::endl << std::endl;;
  5.   std::cout << "[1]Multiplos de 2" << std::endl;
  6.   std::cout << "[2]Multiplos de 3" << std::endl;
  7.   std::cout << "[3]Multiplos de 5" << std::endl;
  8.   std::cout << "[4]Multiplos de 7" << std::endl;
  9.   std::cout << "[5]Multiplos de 11" << std::endl;
  10.  
  11.   int a;
  12.   std::cin >> a;
  13.  
  14.   if ( a < 6 && a > 0 )  {
  15.     std::cout << "Multiplos de " << mul[a-1] << std::endl;
  16.     std::cout << "---------------------" << std::endl;
  17.     multiple ( mul[a-1] );
  18.   }
  19.   else
  20.   ...

Saludos.
  #3 (permalink)  
Antiguo 04/04/2015, 08:14
Avatar de HelThunk  
Fecha de Ingreso: marzo-2015
Ubicación: std::cout<<"En mi PC";
Mensajes: 33
Antigüedad: 9 años
Puntos: 0
Respuesta: Funciones c++

Cita:
Iniciado por ecfisa Ver Mensaje
Hola.

Lo que sucede es que envias a la función la misma variable que usas para las opciones y los valores no son concordantes: 1 -> 2, 2 -> 3, 3 -> 5, 4 -> 7, 5 -> 11.

Una solución es usar un arreglo que contenga los valores a enviar para hallar los múltiplos:
Código C++:
Ver original
  1. ...
  2. int main() {
  3.   int mul[5] = {2, 3, 5, 7, 11};
  4.   std::cout << "Bienvenido, eliga la opcion que mas se acomode a sus necesidads" << std::endl << std::endl;;
  5.   std::cout << "[1]Multiplos de 2" << std::endl;
  6.   std::cout << "[2]Multiplos de 3" << std::endl;
  7.   std::cout << "[3]Multiplos de 5" << std::endl;
  8.   std::cout << "[4]Multiplos de 7" << std::endl;
  9.   std::cout << "[5]Multiplos de 11" << std::endl;
  10.  
  11.   int a;
  12.   std::cin >> a;
  13.  
  14.   if ( a < 6 && a > 0 )  {
  15.     std::cout << "Multiplos de " << mul[a-1] << std::endl;
  16.     std::cout << "---------------------" << std::endl;
  17.     multiple ( mul[a-1] );
  18.   }
  19.   else
  20.   ...

Saludos.
He probado lo que me has dicho, y me surgen unas dudas (y también algunos errores);
Código C++:
Ver original
  1. int mul[5] = {2, 3, 5, 7, 11};
¿Con esto le decimos a la variable mul que solo puede aceptar valores de '2', '3', '5', '7' y '11'?

Código C++:
Ver original
  1. std::cout << "Multiplos de " << mul[a-1] << std::endl;
¿Por qué le restamos a la 'a' 1?
Código C++:
Ver original
  1. multiple ( mul[a-1] );
Aquí también volvemos a restarle a mul[a-1]..


*Al compilar y ejecutar hay un error, cuando estamos haciendo la operación, si pongo 2 me da múltiplos de 3, si pongo 3 me da múltiplos de 5, si pongo 5 me da múltiplos de 11.. (si pongo en vez de restar -1 que reste -2, al principio va bien hasta los múltiples de 5, a partir de ahí ya falla..)

*Me puedes explicar como funciona lo de int NombreVariable[Xnum] = {X resultados};

*Cabe añadir que me hubiese gustado también el poder aprender a usar las funciones..
  #4 (permalink)  
Antiguo 04/04/2015, 09:00
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Funciones c++

Hola.

Cita:
Código C++:
Ver original
  1. int mul[5] = {2, 3, 5, 7, 11};
¿Con esto le decimos a la variable mul que solo puede aceptar valores de '2', '3', '5', '7' y '11'?
No, en el arreglo mul, almacenamos valores cuyos índices guardan relación con lo expresado en el menu.

Cita:
Código C++:
Ver original
  1. std::cout << "Multiplos de " << mul[a-1] << std::endl;
¿Por qué le restamos a la 'a' 1?
Por que los arreglos son basados en índice 0 ( es decir v[0] = 2, v[1] = 3, ... )

Cita:
... si pongo 2 me da múltiplos de 3, si pongo 3 me da múltiplos de 5, si pongo 5 me da múltiplos de 11...
Pero, ¿ No es eso lo que indican las opciones de tu menú ? :
Código C++:
Ver original
  1. std::cout << "[1]Multiplos de 2" << std::endl;
  2.   std::cout << "[2]Multiplos de 3" << std::endl;
  3.   std::cout << "[3]Multiplos de 5" << std::endl;
  4.   std::cout << "[4]Multiplos de 7" << std::endl;
  5.   std::cout << "[5]Multiplos de 11" << std::endl;
Es decir, si alguien lee ese menú y desea obtener multiplos de 7 sin dudas presionará el 4. Si el valor del menu se correspondiera con el número a obtener el múltiplo, el arreglo sería innecesario.

Cita:
Me puedes explicar como funciona lo de int NombreVariable[Xnum] = {X resultados};
Un arreglo es un conjunto de valores del mismo tipo a los cuales se les puede hacer referencia mediante un nombre y un índice.
En la declaración del arreglo se lo puede inicializar mediante un '=' seguido de los valores de su tipo, encerrados entre llaves y separados por comas.

Cita:
Al compilar y ejecutar hay un error
Por si te sirve, hice esta prueba respetando básicamente tu código y funciona sin error:
Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void multiple(int a) {
  6.   for (int i = 2; i < 61; i++)
  7.     if (i % a == 0)
  8.       cout << i << "  ";
  9. }
  10.  
  11. int main() {
  12.   int mul[5] = {2, 3, 5, 7, 11};
  13.   cout << "Bienvenido, eliga la opcion que mas se acomode a sus necesidads" << endl << endl;;
  14.   cout << "[1]Multiplos de 2" << endl;
  15.   cout << "[2]Multiplos de 3" << endl;
  16.   cout << "[3]Multiplos de 5" << endl;
  17.   cout << "[4]Multiplos de 7" << endl;
  18.   cout << "[5]Multiplos de 11" << endl;
  19.  
  20.   int a;
  21.   cin >> a;
  22.  
  23.   if (a < 6 && a > 0) {
  24.     cout << "Multiplos de " << mul[a-1] << endl;
  25.     cout << "---------------------" << endl;
  26.     multiple(mul[a-1]);
  27.   }
  28.   else
  29.     cout << "Introduzca un numero del 1 al 5" << endl;
  30.  
  31.   cin.ignore();
  32.   cin.get();
  33.   return 0;
  34. }

Saludos.
  #5 (permalink)  
Antiguo 04/04/2015, 09:13
Avatar de HelThunk  
Fecha de Ingreso: marzo-2015
Ubicación: std::cout<<"En mi PC";
Mensajes: 33
Antigüedad: 9 años
Puntos: 0
Respuesta: Funciones c++

Vale, creo que lo he entendido, pero.. ¿y si quiere que al poner un valor fuera del arreglo se iniciase de nuevo el proceso?, ¿qué le puedo poner al else?

También me podrías decir que es lo que hace exactamente el multiple dentro de la funcion?, es decir, cuando pones lo de;
Código C++:
Ver original
  1. multiple(mul[a-1]);
Lo que estas diciendo es que en
Código C++:
Ver original
  1. void multiple(int x){
  2.  
  3.     int i;
  4.     for (i = 0; i < 61; i++){
  5.         if (i%x == 0){
  6.             std::cout << i <<std::endl;
  7.         }
  8.     }
  9.     std::cin.get();
  10. }
x sea igual a mul[a-1] no?
  #6 (permalink)  
Antiguo 04/04/2015, 10:55
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funciones c++

En la línea
Código:
void multiple(int a);//NO ME DEVUELVE EL VALOR, HE PROBADO CON INT Y TAMPOCO
Estás declarando una nueva función multiple que toma un int como parámetro y devuelve void.
Para invocar la función de arriba debes poner
Código:
multiple(a); // AHORA SÍ.
Sugerencia: hay usados por menos de 20 dólares...
http://www.amazon.com/dp/0321992784/...ackoverfl08-20
  #7 (permalink)  
Antiguo 04/04/2015, 21:26
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Funciones c++

Hola.
Cita:
Iniciado por HelThunk Ver Mensaje
...
También me podrías decir que es lo que hace exactamente el multiple dentro de la funcion?, es decir, cuando pones lo de;
Código C++:
Ver original
  1. multiple(mul[a-1]);
Lo que estas diciendo es que en
Código C++:
Ver original
  1. void multiple(int x){
  2.  
  3.     int i;
  4.     for (i = 0; i < 61; i++){
  5.         if (i%x == 0){
  6.             std::cout << i <<std::endl;
  7.         }
  8.     }
  9.     std::cin.get();
  10. }
x sea igual a mul[a-1] no?
Así es. x es un parámetro por valor, de tipo int que admite valores de dicho tipo. Cuando recibe como argumento mul[a-1], el valor de x es igual al valor de mul[a-1].

Saludos.

Etiquetas: char, funcion, funciones, int, numero, programa
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 17:39.