elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa en c "Máximo común divisor de dos números"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa en c "Máximo común divisor de dos números"  (Leído 51,286 veces)
rayk

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Programa en c "Máximo común divisor de dos números"
« en: 17 Junio 2011, 13:41 pm »

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 Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #1 en: 17 Junio 2011, 13:54 pm »

Mirando por encima el codigo:

Citar
PD:Te pego lo que necesitas de que el primero sea mayor que el segundo.

Código
  1. #include <stdio.h>
  2. //Máximo común divisor de dos números mediante el algoritmo de Euclides.
  3. int main()
  4. {
  5.    int a, b, c, r;
  6.    printf("Maximo comun divisor de a y b\n\n");
  7.    printf("a: ");
  8.    scanf("%d", &a);
  9.    printf("b: ");
  10.    scanf("%d", &b);
  11.    fflush(stdin);
  12.    r=a%b;
  13.    while(r>0)
  14.    {
  15.              if (a>b){
  16.  
  17.  
  18.              a=b;
  19.              b=r;
  20.              r=a%b;
  21.              }else{
  22.                   printf(" el primer numero debe ser mayor");
  23.                   return -1;
  24.                   }
  25.  
  26.    }
  27.    printf("el maximo comun divisor es %d", b);
  28.    getchar();
  29.    return 0;
  30. }

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 Desconectado

Mensajes: 7


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #2 en: 17 Junio 2011, 14:06 pm »

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 Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #3 en: 17 Junio 2011, 14:07 pm »

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 Desconectado

Mensajes: 7


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #4 en: 17 Junio 2011, 14:24 pm »

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 Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #5 en: 17 Junio 2011, 14:38 pm »

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  :xD 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  :xD

Salu2
En línea

rayk

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #6 en: 17 Junio 2011, 14:55 pm »

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 Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #7 en: 17 Junio 2011, 15:02 pm »

Mmm,

Creo que lo piye,no me presiones mucho que acabo de salir de un examen de fisica  :xD 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 Desconectado

Mensajes: 1


Ver Perfil
Re: Programa en c "Máximo común divisor de dos números"
« Respuesta #8 en: 26 Octubre 2013, 23:06 pm »

  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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Busco "Programa" de Conversión de ".ram" a ".Mp3" ???
Multimedia
Ad0nis 2 2,597 Último mensaje 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,003 Último mensaje 16 Noviembre 2010, 00:26 am
por ¡Micronet!
maximo comun divisor y minimo comun multiplo
Programación C/C++
7hongo7 3 7,831 Último mensaje 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,204 Último mensaje 2 Abril 2014, 18:22 pm
por dantemc
Maximo común divisor c++
Programación C/C++
Laleylalo5 2 2,586 Último mensaje 31 Marzo 2017, 00:12 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines