SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: phoenix en Martes 7 de Mayo de 2002, 04:18
-
Hola, me puedes resolver el problema de algoritmo de Euclides usando técnicas recursivas y no recursivas.
Muchas gracias.
-
Hola phoenix, aqui tienes los dos algoritmos que buscabas (bueno, uno pero en sus dos versiones). Imagino que funcionan, el no recursivo lo he probado, compilado, utilizado, etc. y funciona bien. El recursivo no lo he probado (me parece bastante inutil teniendo el otro) pero imagino que tambien funciona (sino funciona dilo). Te lo paso en pseudocodigo, imagino que lo sabras pasar a C, sino dimelo.
Saludos.
funcion mcd(a:entero, b:entero):entero
inicio
mientras ( a != b )
si ( a > b )
a = a - b
sino
b = b - a
fin si
fin mientras
retorna (a)
fin
funcion mcd(a:entero , b:entero):entero
inicio
si (a = b)
retorna (a)
sino
si (a > b)
retorna (mcd(a-b, b))
sino
retorna (mcd(a , b-a))
fin si
fin si
fin
-
Hola dheak, ya pase a C , he probado con técnicas no recursivas pero, siempre, me dio como resultado de la funcion mcd(a,b) es 1. Esto esta bien?
Por qué no podes arreglar bien?
Disculpe las molestías. Muchas gracias
-
me parece extraño que no te funcionase y mas que siempre te de uno (quiza es que todos las pruebas que has hecho las has hecho con numeros coprimeros). Lo acabo de compilar (con gcc pero debe funcionar en todos, es codigo ANSI C) y ha funcionado perfectamente. No se que puede haber pasado. Aqui te mando mi codigo, pero es exactamente igual. Tambien he probao el tuyo (cambiando el cout y cin por printf y scanf) y funciona perfectamente. Pos no se. Prueba de compilar esto y te debe funcionar.
Saludos.
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
int mcd(int a, int b);
int main(int argc, char *argv[])
{
int a, b;
printf("Introduce el primer numero: ");
scanf("%d", &a);
printf("nIntroduce el segundo numero: ");
scanf("%d", &b);
printf("nEl mcd de %d y %d es: %d", a,b,mcd(a,b));
return EXIT_SUCCESS;
}
int mcd(int a, int b)
{
while (a != b)
{
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
-
La mejor forma forma de realizar el algoritmo de Euclides es la siguiente manera:
#include <iostream.h>
manip(int n1, int n2)
{
int resto, cociente;
if(n2==0) cout << "MCD = " << n1;
else {
cociente = n1/n2;
resto = n2*cociente - n1;
manip(n2,resto);
}
return 0;
}
main()
{
int a,b;
cout << "¿Numero1?";
cin >> a;
cout << "¿Numero2?";
cin >> b;
if(a==0 && b==0) cout << "Error";
if(a > b) manip(a,b);
else manip(b,a);
return 0;
}
-
en el siguiente enlace puedes ver el algoritmo de euclides implementado en C++ , saludos
site-informatica.blogspot.com/2010/09/algoritmo-de-euclides.html