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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calcular mcd. Compila bien pero no corre
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Calcular mcd. Compila bien pero no corre  (Leído 17,092 veces)
jairogon

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Calcular mcd. Compila bien pero no corre
« en: 1 Julio 2010, 03:52 am »

El siguiente programa compila bien pero no corre, la verdad no se por que?


Uso el DevC++.


Código:
//Programa que calcula el m.c.d de dos numeros
//enteros positivos.
#include<iostream>
#include<conio2.h>

using namespace std;

int main()
{
  int a=0,b=0,mayor=0, menor=0,residuo=0,divisor=0,dividendo=0,resultado=0,mcd=0;
   cout<<"Entra dos numeros enteros: ";
    cin>>a>>b;

     if(a>=b)
     {
       mayor=a;
       menor=b;
     }else
          {
            mayor=b;
            menor=a;
          }
           dividendo=menor;
           divisor=mayor;

             do{
                 resultado=divisor/dividendo;
                  residuo=divisor%dividendo;
                   divisor=dividendo;
                    dividendo=residuo;
               }while(dividendo==0||residuo==0);

     mcd=dividendo;

     if(mcd==1)
     {
       cout<<"Los numeros :"<<a<<" y"<<b<<" son primos entre si pues el mcd es 1";
     } else
           {
             cout<<"El mcd de "<<a<<" y"<<b<<" es: "<<mcd;
           }

   getche();
  
   return 0;

}


« Última modificación: 2 Julio 2010, 21:04 pm por Littlehorse » En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Compila bien y no corre
« Respuesta #1 en: 1 Julio 2010, 04:23 am »

Preferiría que utilices un system call antes que un getche de conio2.

Si compila bien, no queda otra que depurarlo.


En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Compila bien y no corre
« Respuesta #2 en: 1 Julio 2010, 04:53 am »

jairogon, te dejo esta funcion que seguro te sirve...

Código:
int mcd( int a, int b ) 
{
    a = abs( a );
    b = abs( b );
    if ( b == 0 )
        return a;
    else
        return mcd( b, a % b );
}

Nota: codigo corregido en base a lo planteado por do-while

Salu10.
« Última modificación: 2 Julio 2010, 08:25 am por nicolas_cof » En línea

jairogon

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: Compila bien y no corre
« Respuesta #3 en: 1 Julio 2010, 05:38 am »

jairogon, te dejo esta funcion que seguro te sirve...

Código:
int mcd( int a, int b ) 
{
    if ( b == 0 )
        return a;
    else
        return mcd( b, a % b );
}

Salu10.


Gracias

Vaya que si me sirvio.

No sabia que el mcd se pudiera hallar recursivamente.

De nuevo mil Gracias

 :D ;-)
En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Compila bien y no corre
« Respuesta #4 en: 1 Julio 2010, 05:59 am »

jairogon, de nada! Para eso estamos ;)

Salu10.
En línea

MIG80

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Compila bien y no corre
« Respuesta #5 en: 1 Julio 2010, 06:26 am »

Tu programa original tambien funciona con unos pequeños ajustes:

Código
  1. //Programa que calcula el m.c.d de dos numeros
  2. //enteros positivos.
  3. #include<iostream>
  4. #include<conio2.h>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.  int a,b,mayor, menor,residuo,divisor,dividendo,resultado,mcd;
  11.  cout<<"Entra dos numeros enteros: ";
  12.  cin>>a>>b;
  13.  
  14.  if(a>=b)
  15.  {
  16.    mayor=a;
  17.    menor=b;
  18.  }else
  19.  {
  20.    mayor=b;
  21.    menor=a;
  22.  }
  23.  dividendo=mayor; // se llama "dividendo" al numero que sera dividido
  24.  divisor=menor;    // se llama "divisor" al numero que divide
  25.  
  26.  do{
  27.    resultado=dividendo/divisor;
  28.    residuo=dividendo%divisor;
  29.    dividendo=divisor;
  30.    divisor=residuo;
  31.  }while(divisor!=0);
  32.  
  33.  mcd=dividendo;
  34.  
  35.  if(mcd==1)
  36.  {
  37.    cout<<"Los numeros :"<<a<<" y "<<b<<" son primos entre si pues el mcd es 1";
  38.  } else
  39.  {
  40.    cout<<"El mcd de "<<a<<" y "<<b<<" es: "<<mcd;
  41.  }
  42.  
  43.  getche();
  44.  
  45.  return 0;
  46. }
  47.  
« Última modificación: 1 Julio 2010, 06:28 am por czealt » En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Compila bien y no corre
« Respuesta #6 en: 1 Julio 2010, 07:28 am »

Tu programa original tambien funciona con unos pequeños ajustes:

Código
  1. //Programa que calcula el m.c.d de dos numeros
  2. //enteros positivos.
  3. #include<iostream>
  4. #include<conio2.h>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.  int a,b,mayor, menor,residuo,divisor,dividendo,resultado,mcd;
  11.  cout<<"Entra dos numeros enteros: ";
  12.  cin>>a>>b;
  13.  
  14.  if(a>=b)
  15.  {
  16.    mayor=a;
  17.    menor=b;
  18.  }else
  19.  {
  20.    mayor=b;
  21.    menor=a;
  22.  }
  23.  dividendo=mayor; // se llama "dividendo" al numero que sera dividido
  24.  divisor=menor;    // se llama "divisor" al numero que divide
  25.  
  26.  do{
  27.    resultado=dividendo/divisor;
  28.    residuo=dividendo%divisor;
  29.    dividendo=divisor;
  30.    divisor=residuo;
  31.  }while(divisor!=0);
  32.  
  33.  mcd=dividendo;
  34.  
  35.  if(mcd==1)
  36.  {
  37.    cout<<"Los numeros :"<<a<<" y "<<b<<" son primos entre si pues el mcd es 1";
  38.  } else
  39.  {
  40.    cout<<"El mcd de "<<a<<" y "<<b<<" es: "<<mcd;
  41.  }
  42.  
  43.  getche();
  44.  
  45.  return 0;
  46. }
  47.  

czealt, tu codigo tiene algunos errores, por ejemplo la division por 0 no es valida.

Esta linea no la utilizas resultado = dividendo / divisor;

Ademas como bien menciono cbug, no es recomendable el uso de la libreria conio ya que no es estandar y esta obsoleta.

Aca dejo un codigo parecido al que venia haciendo jairogon

Código:
#include <iostream>
#include <cmath>

using namespace std;

int main( void )
{
    int a, b, mayor, menor, residuo, divisor, dividendo, mcd;

    cout << "Entra dos numeros enteros: ";
    cin >> a >> b;

    a = abs( a );
    b = abs( b );
    if ( a >= b )
    {
        mayor = a;
        menor = b;
    }
    else
    {
        mayor = b;
        menor = a;
    }
    dividendo = mayor;
    divisor = menor;
    
    while ( divisor != 0 )
    {
        residuo = dividendo % divisor;
        dividendo = divisor;
        divisor = residuo;
    }
    
    mcd = dividendo;

    if ( mcd == 1 )
        cout << "Los numeros " << a << " y " << b << " son primos entre si pues el m.c.d es 1" << endl;
    else
        cout << "El m.c.d de " << a << " y " << b << " es: " << mcd << endl;
    
    return 0;
}

Nota: codigo corregido en base a lo planteado por do-while

Salu10.
« Última modificación: 2 Julio 2010, 02:00 am por nicolas_cof » En línea

MIG80

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Compila bien y no corre
« Respuesta #7 en: 1 Julio 2010, 19:31 pm »

nicolas_cof, tienes razón en que la variable resultado no es necesaria. En lo del bucle (en tu version del  programa)..., da lo mismo si es while o do..while. Como  quitaste la linea resultado=dividendo/divisor; ya no existe la posibilidad de una división por 0.
« Última modificación: 1 Julio 2010, 21:13 pm por czealt » En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Compila bien y no corre
« Respuesta #8 en: 1 Julio 2010, 21:21 pm »

nicolas_cof, tienes razón en que la variable resultado no es necesaria. En lo del bucle (en tu version del  programa)..., da lo mismo si es while o do..while. Como  quitaste la linea resultado=dividendo/divisor; ya no existe la posibilidad de una división por 0.

czealt, si te fijas bien en el codigo no seria lo mismo hacer un while que un do-while ya que con este ultimo estarias ejecutando 3 sentencias totalmente innecesarias.

Salu10.
En línea

MIG80

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Compila bien y no corre
« Respuesta #9 en: 1 Julio 2010, 21:28 pm »

Citar
... si te fijas bien en el codigo no seria lo mismo hacer un while que un do-while ya que con este ultimo estarias ejecutando 3 sentencias totalmente innecesarias.

Bueno, eso solo sucederia cuando uno de los números dados como entrada es cero lo cual no es una entrada válida para el programa. Si se ha de verificar por la entrada válida, ¿porqué no tambien verificar por la entrada de números negativos?
« Última modificación: 1 Julio 2010, 21:35 pm por czealt » En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

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