Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/09/2013, 13:25
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Quien me corrige el programa?

Que es todo eso???

El algoritmo de Euclides http://ca.wikipedia.org/wiki/Algorisme_d%27Euclides. En la parte que pone divisiones sucesivas se refiere a la recursividad: las divisiones son las mismas, eso significa que tendras que rellamar a una misma funcion hasta que el segundo argumento sea 0, entonces el resultado será el ultimo valor usado como primer argumento.


"...No busco que me digan como hacer el programa mas compacto o mejor. Solo busco que me ayuden a que funcione...."

No se si alguien se atreverá a liarse con una funcion de 21 condicionales para comentarte donde falla. Te propongo una solucion que aparece de mil formas diferentes en mil paginas web y que se ciñe a la definicion:

Código C:
Ver original
  1. int euclides(int x, int y) {
  2.     int prevx, modulo;
  3.  
  4.     //orden decreciente, esto equivale a tu primer if
  5.     if(x < y){
  6.         prevx = x;
  7.         x = y;
  8.         y = prevx;
  9.     }
  10.    
  11.     //condicion final, retorna el ultimo x calculado
  12.     if(!y) {
  13.         return x;
  14.     }
  15.  
  16.     //calculas el residuo de x/y
  17.     modulo = x%y;
  18.  
  19.     //corres los valores y ejecutas
  20.     //el nuevo 'x' será el viejo 'y', y el nuevo 'y' será el residuo calculado
  21.     return euclides(y, modulo);
  22. }

Si quieres ver lo que hace exactamente pon unos cuantos printf mostrando los valores calculados. Y como adicion deberas asegurar que los numeros entrados siempre son mayores o iguales a 0.


"...Los printf estan en catalan pero el resto es c..."

Todo está en c, los argumentos textuales de los printf están en catalan, los demas argumentos estan en formato numerico. Por cierto, en la linea 155 hay alguna cosa que no me convence:

Código C:
Ver original
  1. printf("INSTRUCCIONES \n1r escriure el primer numero i clicar enter \n2n escriure el segon numero i tornar a clicar enter \nSi el resultat es 0 vol dir que s'han hagut de fer més de 10 divisions i no s'ha trobat el MCD \n \n");

'Instrucciones' es 'Instruccions', 'enter' es 'retorn', y ya que acentuas 'més' tambien debes acentuar 'és' porque es una forma del verbo 'ser' (como regla mnemotectinca te gustará saber que 'es' se acentua cuando coloquialmente no la puedes sustituir por 'se') en oposicion a 'es' que se usa como pronombre. Au salut i força al canut :)

Saludos
vosk