Autor
|
Tema: Calcular mcd. Compila bien pero no corre (Leído 17,092 veces)
|
jairogon
Desconectado
Mensajes: 24
|
El siguiente programa compila bien pero no corre, la verdad no se por que? Uso el DevC++. //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
Mensajes: 147
|
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
Mensajes: 348
Into the Wild
|
jairogon, te dejo esta funcion que seguro te sirve... 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-whileSalu10.
|
|
« Última modificación: 2 Julio 2010, 08:25 am por nicolas_cof »
|
En línea
|
|
|
|
jairogon
Desconectado
Mensajes: 24
|
jairogon, te dejo esta funcion que seguro te sirve... 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
|
|
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
jairogon, de nada! Para eso estamos Salu10.
|
|
|
En línea
|
|
|
|
MIG80
Desconectado
Mensajes: 38
|
Tu programa original tambien funciona con unos pequeños ajustes: //Programa que calcula el m.c.d de dos numeros //enteros positivos. #include<iostream> #include<conio2.h> using namespace std; int main() { int a,b,mayor, menor,residuo,divisor,dividendo,resultado,mcd; cout<<"Entra dos numeros enteros: "; cin>>a>>b; if(a>=b) { mayor=a; menor=b; }else { mayor=b; menor=a; } dividendo=mayor; // se llama "dividendo" al numero que sera dividido divisor=menor; // se llama "divisor" al numero que divide do{ resultado=dividendo/divisor; residuo=dividendo%divisor; dividendo=divisor; divisor=residuo; }while(divisor!=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: 1 Julio 2010, 06:28 am por czealt »
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
Tu programa original tambien funciona con unos pequeños ajustes: //Programa que calcula el m.c.d de dos numeros //enteros positivos. #include<iostream> #include<conio2.h> using namespace std; int main() { int a,b,mayor, menor,residuo,divisor,dividendo,resultado,mcd; cout<<"Entra dos numeros enteros: "; cin>>a>>b; if(a>=b) { mayor=a; menor=b; }else { mayor=b; menor=a; } dividendo=mayor; // se llama "dividendo" al numero que sera dividido divisor=menor; // se llama "divisor" al numero que divide do{ resultado=dividendo/divisor; residuo=dividendo%divisor; dividendo=divisor; divisor=residuo; }while(divisor!=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; }
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#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-whileSalu10.
|
|
« Última modificación: 2 Julio 2010, 02:00 am por nicolas_cof »
|
En línea
|
|
|
|
MIG80
Desconectado
Mensajes: 38
|
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
Mensajes: 348
Into the Wild
|
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
Mensajes: 38
|
... 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
virtual dub no me corre bien
Dispositivos Móviles (PDA's, Smartphones, Tablets)
|
panchoptattoo
|
0
|
3,442
|
26 Enero 2012, 05:31 am
por panchoptattoo
|
|
|
[C] ayuda, programa compila bien pero no cumple la funcion (solucionado)
Programación C/C++
|
xiruko
|
6
|
3,814
|
15 Abril 2012, 23:48 pm
por xiruko
|
|
|
No me funcionan los eventos de teclado y compila bien, ¿porque?
Java
|
thehiphapper
|
2
|
3,098
|
19 Mayo 2013, 16:49 pm
por thehiphapper
|
|
|
Duda C++. Compila pero no corre.
Programación C/C++
|
Gaspi
|
9
|
4,415
|
20 Febrero 2015, 20:58 pm
por Gaspi
|
|
|
error en python corre bien pero marca error
Scripting
|
Joe Fraddy
|
3
|
2,954
|
25 Agosto 2015, 19:06 pm
por engel lex
|
|