Hoy continuaremos con las entradas dedicadas a mostrar cómo se implementa el algoritmo para hallar el mínimo común múltiplo entre dos números enteros positivos en varios lenguajes de programación, y el turno de hoy es para el lenguaje C.
Ya hemos visto cómo se implementa este algoritmo en lenguaje Java y C#, y al igual que lo hicimos en ese entonces, en ésta ocasión mostraré las dos formas que describimos cuando explicamos el algoritmo para hallar el mcm (clic aquí para ver el artículo), es decir, mediante el Algoritmo de Euclides y usando una variación del Algoritmo de Euclides.
Veamos cómo sería mediante el Algoritmo de Euclides:
#include <stdio.h> #include <stdlib.h> #include <math.h> /* Función principal */ void main() { int num1, num2; printf("Ingrese el primer numero:\n"); scanf("%d",&num1); printf("Ingrese el segundo numero:\n"); scanf("%d",&num2); printf("El M.C.M entre %d y %d es: %d",num1,num2,mcm(num1,num2)); } /* Función para calcular el mayor de dos números */ int max(int num1, int num2) { if (num1>=num2) { return num1; } else { return num2; } } /* Función para calcular el menor de dos números */ int min(int num1, int num2) { if (num1<=num2) { return num1; } else { return num2; } } /* Función para hallar el Máximo Común Divisor */ int mcd(int num1, int num2) { int mcd = 0; int a = max(num1, num2); int b = min(num1, num2); do { mcd = b; b = a%b; a = mcd; } while(b!=0); return mcd; } /* Función para hallar el Mínimo Común Múltiplo */ int mcm(int num1, int num2) { int mcm = 0; int a = max(num1, num2); int b = min(num1, num2); mcm = (a/mcd(a,b))*b; return mcm; }
Ahora veamos la otra forma:
Como se puede apreciar, en lenguaje C añadimos algunos métodos más que en otros lenguajes de programación, como lo son el que usamos para seleccionar el mayor o el menor de dos números, ya que en C no contamos con métodos nativos del lenguaje para realizar estas funciones.
Ahora sólo nos resta probar el código, y al igual que en casos anteriores con los otros lenguajes, lo haremos con los datos de entrada 12 y 18, lo cual debe arrojarnos como resultado el número 36:
#include <stdio.h> #include <stdlib.h> #include <math.h> /* Función principal */ void main() { int num1, num2, mcm, men, i; // Pedimos los dos números al usuario printf("Ingrese el primer numero:\n"); scanf("%d",&num1); printf("Ingrese el segundo numero:\n"); scanf("%d",&num2); // Seleccionamos el menor entre num1 y num2 men = min(num1, num2); // Creamos el ciclo for encargado de // de realizar las iteraciones for (i=1; i<=men; i++) { // Comprobamos si el número i correspondiente a la // iteración es un divisor exacto de num1 y num2 if (num1%i==0 && num2%i==0) { // Asignamos i como el mcd int mcd = i; // Calculamos el mcm de forma similar a como // se calcula usando el Algoritmo de Euclides mcm = (num1*num2)/mcd; } } // Mostramos el resultado en pantalla printf("El M.C.M entre %d y %d es: %d",num1,num2,mcm); } /* Función para calcular el menor de dos números */ int min(int num1, int num2) { if (num1<=num2) { return num1; } else { return num2; } }
Como se puede apreciar, en lenguaje C añadimos algunos métodos más que en otros lenguajes de programación, como lo son el que usamos para seleccionar el mayor o el menor de dos números, ya que en C no contamos con métodos nativos del lenguaje para realizar estas funciones.
Ahora sólo nos resta probar el código, y al igual que en casos anteriores con los otros lenguajes, lo haremos con los datos de entrada 12 y 18, lo cual debe arrojarnos como resultado el número 36:
hola, siento comentar que creo que el primer algoritmo para el mcm es erróneo. Como ejemplo podemos coger a=9 y b=9. La fórmula daría (9/3)*9 = 27. Errónea ya que 27 no es el mcm de 9 y 9. Un saludo
ResponderBorrarHola, gracias por responder. Estuve revisando el algoritmo y no da error. Hagamos la prueba de escritorio y te lo mostraré:
Borrar- El método que obtiene el M.C.M. es mcm(int num1, int num2), que es el que recibe los números ingresados por el usuario, que para este caso serán 9 y 9.
- Lo primero que hace este método es obtener el valor máximo de los dos en la variable a que será 9, y luego el valor mínimo de los dos en la variable b que también será 9.
- Ahora el M.C.M será igual a la fórmula (a/mcd(a,b))*b, y reemplazando tendríamos entonces que mcm = (9 / mcd(9, 9)) * 9. Esto nos lleva ahora a calcular el valor del M.C.D.
- En el método mcd(int num1, int num2), nuevamente obtenemos primero el valor máximo y mínimo de los dos y los asignamos en las variables a y b respectivamente, que para este ejemplo será 9 para cada una.
- Luego se hará un proceso iterativo dentro de un ciclo do while el cual se repetirá n veces mientras que el valor de la variable b sea distinto de 0. Cuando sea 0, finalizará este ciclo.
Veamos los pasos que se hacen en ese ciclo y luego veremos las iteraciones:
mcd = b;
b = a%b;
a = mcd;
=> Iteración 1
mcd = 9;
b = 9%9 = 0;
a = 9;
Validación: (b != 0) = falso;
- La validación retorna falso, lo que quiere decir que aquí termina el ciclo; finalmente retornamos el valor final de la variable mcd que en este caso será 9.
- Ahora sí veamos el resultado de la formula del M.C.D:
mcm = (9 / mcd(9, 9)) * 9
mcm = (9 / 9) * 9
mcm = 1 * 9
mcm = 9
Como ves el resultado es 9. Hacer estos ejercicios de esta forma nos ayudan a entender qué es lo que hace realmente cada línea de nuestro código y de esta forma, si el resultado no es el que esperamos, saber en qué línea estamos haciendo algo erróneo.
Muchas gracias por tu comentario