SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: phoenix en Martes 7 de Mayo de 2002, 04:18

Título: Re: Algoritmo de Euclides
Publicado 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.
Título: Re: Algoritmo de Euclides
Publicado por: dheak en Sábado 11 de Mayo de 2002, 19:41
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
Título: Re: Algoritmo de Euclides
Publicado por: phoenix en Lunes 13 de Mayo de 2002, 00:08
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
Título: Re: Algoritmo de Euclides
Publicado por: dheak en Lunes 13 de Mayo de 2002, 01:20
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;
}
Título: Algoritmo de Euclides
Publicado por: ^[HaDeS]^ en Jueves 16 de Mayo de 2002, 22:31
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;
}
Título: Re: Algoritmo de Euclides
Publicado por: gmlocarlos en Lunes 11 de Octubre de 2010, 09:37
en el siguiente enlace puedes ver el algoritmo de euclides implementado en C++ , saludos
site-informatica.blogspot.com/2010/09/algoritmo-de-euclides.html