Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Quien me corrige el programa?

Estas en el tema de Quien me corrige el programa? en el foro de C/C++ en Foros del Web. El programa cuando lo compilo funciona pero el resultado no es correcto. Yo pongo el primer dato y luego el segundo pero el resultado sale ...
  #1 (permalink)  
Antiguo 19/09/2013, 08:49
 
Fecha de Ingreso: enero-2013
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Pregunta Quien me corrige el programa?

El programa cuando lo compilo funciona pero el resultado no es correcto. Yo pongo el primer dato y luego el segundo pero el resultado sale como le da la gana. No busco que me digan como hacer el programa mas compacto o mejor. Solo busco que me ayuden a que funcione.
Es un programa para conseguir el Maximo comun divisor de 2 numeros a partir del algoritmo de euclides. Los printf estan en catalan pero el resto es c. bueno, aqui dejo el codigo.

Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. int euclides (x,y){
  4.     if (x>y){
  5.         int a;
  6.         a=x/y;
  7.         if (a!=0){
  8.             int b;
  9.             b=y/a;
  10.             if (b!=0){
  11.                 int c;
  12.                 c=a/b;
  13.                 if (c!=0){
  14.                     int d;
  15.                     d=b/c;
  16.                     if (d!=0){
  17.                         int e;
  18.                         e=c/d;
  19.                         if (e!=0){
  20.                             int f;
  21.                             f=d/e;
  22.                             if (f!=0){
  23.                                 int g;
  24.                                 g=e/f;
  25.                                 if (g!=0){
  26.                                     int h;
  27.                                     h=f/g;
  28.                                     if (h!=0){
  29.                                         int i;
  30.                                         i=g/h;
  31.                                         if (i!=0){
  32.                                             int j;
  33.                                             j=h/i;
  34.                                             if (j!=0){
  35.                                                 return 0;
  36.                                             }
  37.                                             else{
  38.                                                 return j;
  39.                                             }
  40.                                         }
  41.                                         else{
  42.                                             return i;
  43.                                         }
  44.                                     }
  45.                                     else{
  46.                                         return h;
  47.                                     }
  48.                                 }
  49.                                 else{
  50.                                     return g;
  51.                                 }
  52.                             }
  53.                             else{
  54.                                 return f;
  55.                             }
  56.                         }
  57.                         else{
  58.                             return e;
  59.                         }
  60.                     }
  61.                     else{
  62.                         return d;
  63.                     }
  64.                 }
  65.                 else{
  66.                     return c;
  67.                 }
  68.             }
  69.             else{
  70.                 return b;
  71.             }
  72.         }
  73.         else{
  74.             return a;
  75.         }
  76.     }
  77.     else {
  78.         int a;
  79.         a=y/x;
  80.         if (a!=0){
  81.             int b;
  82.             b=x/a;
  83.             if (b!=0){
  84.                 int c;
  85.                 c=a/b;
  86.                 if (c!=0){
  87.                     int d;
  88.                     d=b/c;
  89.                     if (d!=0){
  90.                         int e;
  91.                         e=c/d;
  92.                         if (e!=0){
  93.                             int f;
  94.                             f=d/e;
  95.                             if (f!=0){
  96.                                 int g;
  97.                                 g=e/f;
  98.                                 if (g!=0){
  99.                                     int h;
  100.                                     h=f/g;
  101.                                     if (h!=0){
  102.                                         int i;
  103.                                         i=g/h;
  104.                                         if (i!=0){
  105.                                             int j;
  106.                                             j=h/i;
  107.                                             if (j!=0){
  108.                                                 return 0;
  109.                                             }
  110.                                             else{
  111.                                                 return j;
  112.                                             }
  113.                                         }
  114.                                         else{
  115.                                             return i;
  116.                                         }
  117.                                     }
  118.                                     else{
  119.                                         return h;
  120.                                     }
  121.                                 }
  122.                                 else{
  123.                                     return g;
  124.                                 }
  125.                             }
  126.                             else{
  127.                                 return f;
  128.                             }
  129.                         }
  130.                         else{
  131.                             return e;
  132.                         }
  133.                     }
  134.                     else{
  135.                         return d;
  136.                     }
  137.                 }
  138.                 else{
  139.                     return c;
  140.                 }
  141.             }
  142.             else{
  143.                 return b;
  144.             }
  145.         }
  146.         else{
  147.             return a;
  148.         }
  149.     }
  150. }
  151.  
  152. int main(){
  153.     fflush(stdin);
  154.     int o, w, resultat;
  155.     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");
  156.     printf("1r numero: \n");
  157.     fflush(stdin);
  158.     scanf("%d",&o);
  159.     printf("\n 2n numero: \n");
  160.     fflush(stdin);
  161.     scanf("%d",&w);
  162.     resultat=euclides(o,w);
  163.     printf("\n El Maxim Comu Divisor de %g ",o);
  164.     printf("i %g=",w);
  165.     printf(" %g",resultat);
  166.     system("pause");
  167.     return 0;
  168. }

P.D. el primer if i el primer else de la funcion es por que si X es mas grande que Y las dos o tres primeras operaciones son diferentes que si Y es mas grande que X
  #2 (permalink)  
Antiguo 19/09/2013, 13:25
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 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
  #3 (permalink)  
Antiguo 20/09/2013, 09:24
 
Fecha de Ingreso: enero-2013
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Quien me corrige el programa?

muchas gracias. Es verdad, me confundi con el como hacerlo, usare lo que me has dicho y si, lo escrito no lo revise. Gracias

Etiquetas: correccion, español
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:14.