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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


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

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Problema en ejercicio con funciones
« en: 9 Agosto 2015, 17:02 pm »

Muy buenas, acabo de registrarme en el foro puesto que tengo un problema al que no le veo solución. Estoy haciendo un programa que me devuelva los divisores de 1 al 1000 y me diga cual  de los numeros cuenta con más divisores. Sin embargo siempre me devuelve 60 (con 12 divisores), y conté por ejemplo los de 1000 y me salen 16. Les dejo el código para que le den un vistazo puesto que estoy seguro que encontraran la solución.

Código:
#include <iostream>

using namespace std;

void divisors(int n)
{
    for (int i=1; i<=n; i++)
    {
        if (n%i==0)
            cout << i << endl;
    }
}

long contaDivisors(int n)
{
    long cd=0;
    for (int i=1; i<=n; i++)
    {
        if (n%i==0)
            cd++;
    }
    return cd;
}


int main()
{
    long maxDivisors=0;
    for (int num=1; num<=1000; num++)
    {
        if(contaDivisors(num)>=maxDivisors)
            maxDivisors=num;
        cout << endl << "Els divisors de " << num << " son:" << endl;
        divisors(num);
    }

    cout << "\n\n\n";

    cout << "El nombre mes gran amb mes numero de divisors es el " << maxDivisors << " amb " << contaDivisors(maxDivisors) << " divisors.";

    cout << "\n\n\n";

    return 0;
}

Salud!


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema en ejercicio con funciones
« Respuesta #1 en: 9 Agosto 2015, 17:53 pm »

Código
  1. if(contaDivisors(num)>=maxDivisors)
  2.    maxDivisors=num;
Estás guardando en maxDivisors, el número que tiene más divisores. pero en el if(), estás comprobando como si maxDivisors fuera el número de divisores más grande.

Tienes que usar 2 variables diferentes, una para guardar el número de divisores mayor, y otra para guardar el número que tiene esa cantidad de divisores.


En línea

darkeado

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problema en ejercicio con funciones
« Respuesta #2 en: 9 Agosto 2015, 18:57 pm »

Cierto!! Muchas gracias
En línea

exoesqueleto

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Problema en ejercicio con funciones
« Respuesta #3 en: 9 Agosto 2015, 19:18 pm »

brothercito echale un ojo a este codigo que hice:

Código
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.  
  8.    int numero = 0, cont, mayor=0;
  9.  
  10.    for(int i= 1; i <= 1000; i++ ){
  11.         cont=0;
  12.        for(int j= 1; j <= i; j++ ){
  13.  
  14.            if(i % j == 0)
  15.                cont++;
  16.  
  17.        }//
  18.  
  19.         if(numero < cont){
  20.             numero = cont;
  21.             mayor = i;
  22.  
  23.         }//for
  24.  
  25.         /* OJO SI QUIERES SABER LOS DIVISORES DE TODOS LOS NUMEROS HASTA EL MIL
  26.          
  27.          cout << "Numero: " << i  <<" con un total de: "  << cont << " divisores: "<< endl;
  28.          cout << "Los divisores son: ";
  29.          
  30.          for(int k= 1; k <=  i; k++){
  31.              
  32.              if(i % k == 0)
  33.                  cout << k << " ";
  34.          }//for
  35.          
  36.           cout << endl;
  37.          
  38.          */
  39.  
  40.    }//for
  41.  
  42.               cout << endl;
  43.  
  44.         cout << "El numero con mas divisores de 1000  es: " << mayor  <<" con un total de: "
  45.                 << numero << " divisores"<< endl;
  46.         cout << "Los divisores son: ";
  47.  
  48.         for(int k= 1; k <=  mayor; k++){
  49.  
  50.             if(mayor % k == 0)
  51.                 cout << k << " ";
  52.         }//for
  53.  
  54.          cout << endl;
  55.  
  56.    return 0;
  57. }//main
  58.  
  59.  
En línea

darkeado

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problema en ejercicio con funciones
« Respuesta #4 en: 9 Agosto 2015, 23:02 pm »

me anda de lujo por que veo como tratar el programa de distinta forma aunque no implementa funciones que era el tema que quería abordar con el problema el resultado es el mismo, gracias amigo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines