Autor
|
Tema: Programa en c "Máximo común divisor de dos números" (Leído 51,754 veces)
|
rayk
Desconectado
Mensajes: 7
|
Hola me habia propuesto elaborar un programa que pudiese sacar el máximo común divisor de dos números. De momento lo estoy haciendo para que el primer numero que se introduzca sea mayor que el segundo(supongo que luego con un if pondre las dos opciones).Para ello he utilizado el conocido algoritmo de Euclides. Pero hay algo en el codigo que debo de hacer mal ya que no consigo que funcione. incluyo el codigo para que me echeis una mano.
Saludos y gracias
#include <stdio.h> #include <stdlib.h> //Máximo común divisor de dos números mediante el algoritmo de Euclides. int main() { int a, b, c, r; printf("Maximo comun divisor de a y b\n\n"); printf("a: "); scanf("%d", &a); printf("b: "); scanf("%d", &b); r=a%b; while(r>0) { fflush(stdin); a=b; b=r; r=a%b; } sprintf("el maximo comun divisor es %d", b); system("pause"); }
|
|
|
En línea
|
|
|
|
Dark Invader
Desconectado
Mensajes: 111
Lucha hasta el final para conseguir tu objetivo.
|
Mirando por encima el codigo: PD:Te pego lo que necesitas de que el primero sea mayor que el segundo. #include <stdio.h> //Máximo común divisor de dos números mediante el algoritmo de Euclides. int main() { int a, b, c, r; printf("Maximo comun divisor de a y b\n\n"); r=a%b; while(r>0) { if (a>b){ a=b; b=r; r=a%b; }else{ printf(" el primer numero debe ser mayor"); return -1; } } printf("el maximo comun divisor es %d", b ); return 0; }
Te fallaba el printf del final. Este da perfecto. Salu2
|
|
« Última modificación: 17 Junio 2011, 14:05 pm por Dark Invader »
|
En línea
|
|
|
|
rayk
Desconectado
Mensajes: 7
|
Muchas gracias, lo empece ayer y al final lo deje por que no encontraba el fallo.
una duda mas: poner system("pause"); equivale a lo que pusiste tu
getch(); return 0;
he visto que de esta forma te ahorras el <stdlib.h>
Saludos y gracias
|
|
|
En línea
|
|
|
|
Dark Invader
Desconectado
Mensajes: 111
Lucha hasta el final para conseguir tu objetivo.
|
Si,getchar() espera a que se pulse la tecla enter para finalizar,y return 0 indica al programa que todo fue bien.
Mira de nuevo mi codigo ya que edite y puse nuevas funciones que pedias.
Salu2
|
|
|
En línea
|
|
|
|
rayk
Desconectado
Mensajes: 7
|
Vale, y ¿el return -1? que funcion tiene, supongo que retroceder no, de modo que introduzcas las dos variables de nuevo.
otra cosa, ¿ es imprescindible poner el return 0; al final?
saludos
Editado: Me he dado cuenta de que no es necesario poner la condición de que el primero sea mayor que el segundo. Y esque de no ser asi tras haber entrado en el while los numeros se cambian entre si de manera que la segunda vez que entra en el while es como si los hubiesemos introducido en el orden correcto. No se si me he explicado bien.
|
|
« Última modificación: 17 Junio 2011, 14:31 pm por rayk »
|
En línea
|
|
|
|
Dark Invader
Desconectado
Mensajes: 111
Lucha hasta el final para conseguir tu objetivo.
|
Un valor distinto a 0 en el return indica al sistema operativo que hay un fallo y cierra el programa...Como ves es muy útil para no andarse por las ramas,indicas el fallo y se cierra... ¿Es imprescindible?Pues no Pero es una buena costumbre,yo lo añado en todos mis programas,pero se puede prescindir,a mi me gusta ponerlo siempre. Editado: Me he dado cuenta de que no es necesario poner la condición de que el primero sea mayor que el segundo. Y esque de no ser asi tras haber entrado en el while los numeros se cambian entre si de manera que la segunda vez que entra en el while es como si los hubiesemos introducido en el orden correcto. No se si me he explicado bien.
No me entere bien de lo que me has dicho Salu2
|
|
|
En línea
|
|
|
|
rayk
Desconectado
Mensajes: 7
|
A ver si me explico mejor...
Con respecto al problema de que a tuviese que ser a mayor que b, realmente es indiferente. Voy a ponerte un ejemplo a ver si me explico mejor.
Supongamos que a=6 y b=4, entonces el ordenador hace el modulo a%b (6%4) y le da r=2, entonces como r es mayor que 0 entra en el while. Ahora a=b y b=r, entonces vuelve a hacer el modulo a%b (en este caso 4&2) le da un r=0 por lo que no vuelve a entrar en el while y da el valor b como mcd en este caso 2.
Ahora bien si en vez de introducirlos en ese orden, los cambiamos a=4 y b=6 , el ordenadorhace el modulo de a%b (4%6) lo que le da un r=4, por tanto entra dentro del while. Ahora a=b y b=r, entonces vuelve a hacer el modulo a%b (en este caso 6&4) que resulta ser la situcion inicial de cuando los metes en orden.
Es decir que es indiferente meter primero el mayo y luego el menor o al contrario. espero que haya quedado claro ajaja.
|
|
|
En línea
|
|
|
|
Dark Invader
Desconectado
Mensajes: 111
Lucha hasta el final para conseguir tu objetivo.
|
Mmm, Creo que lo piye,no me presiones mucho que acabo de salir de un examen de fisica jaja Si bueno entonces no habría problema,no me había fijado en la condición y ya había preparado otro algoritmo para ver como sería a la inversa pero me olvide del while y solo estaba pendiente a la factorización... Salu2
|
|
|
En línea
|
|
|
|
absgab
Desconectado
Mensajes: 1
|
Tengo otra versión, donde podes operar con dos variables no impotando el orden en que la ingresaste, sea mayor la primera o no. Es muy sencillo. esta seria la funcion del proyect.
void MCD(int n1, int n2) { if(n1>n2) { int r=n1%n2;
while(r>0) {
fflush(stdin); n1 = n2; n2 = r; r=n1%n2;
} printf("mcd:%d",n2); }
if(n1<n2) {
int r=n2%n1;
while(r>0) {
fflush(stdin); n2 = n1; n1 = r; r=n2%n1;
}
printf("mcd:%d",n1); }
}
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Busco "Programa" de Conversión de ".ram" a ".Mp3" ???
Multimedia
|
Ad0nis
|
2
|
2,886
|
13 Mayo 2004, 23:05 pm
por Ad0nis
|
|
|
Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
« 1 2 »
Programación C/C++
|
¡Micronet!
|
18
|
10,822
|
16 Noviembre 2010, 00:26 am
por ¡Micronet!
|
|
|
maximo comun divisor y minimo comun multiplo
Programación C/C++
|
7hongo7
|
3
|
8,170
|
15 Marzo 2013, 21:11 pm
por alt_369
|
|
|
Firefox se me queda paralizado, y no un paralizado "común"
« 1 2 »
Software
|
Catgh.
|
11
|
2,948
|
2 Abril 2014, 18:22 pm
por dantemc
|
|
|
Maximo común divisor c++
Programación C/C++
|
Laleylalo5
|
2
|
2,837
|
31 Marzo 2017, 00:12 am
por ivancea96
|
|