Simplificar Fracciones (MCD) en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a simplificar fracciones utilizando el algoritmo del Máximo Común Divisor (MCD) en programación C. El laboratorio cubre los siguientes pasos: leer el numerador y el denominador de la entrada del usuario, calcular el MCD y luego dividir tanto el numerador como el denominador por el MCD para obtener la fracción simplificada. Este laboratorio tiene como objetivo ayudarte a comprender el concepto de simplificación de fracciones e implementarlo utilizando técnicas de programación en C.

Leer Numerador y Denominador

En este paso, aprenderás a leer el numerador y el denominador de la entrada del usuario en un programa C para la simplificación de fracciones.

Primero, creemos un nuevo archivo C para nuestro programa de simplificación de fracciones:

cd ~/project
nano fraction_simplify.c

Ahora, agrega el siguiente código para leer el numerador y el denominador:

#include <stdio.h>

int main() {
    int numerator, denominator;

    printf("Ingrese el numerador: ");
    scanf("%d", &numerator);

    printf("Ingrese el denominador: ");
    scanf("%d", &denominator);

    printf("Numerador: %d\n", numerator);
    printf("Denominador: %d\n", denominator);

    return 0;
}

Compilamos y ejecutamos el programa:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Salida de ejemplo:

Ingrese el numerador: 12
Ingrese el denominador: 18
Numerador: 12
Denominador: 18

Explicación del código:

  • scanf() se utiliza para leer la entrada de entero del usuario.
  • %d es el especificador de formato para enteros.
  • &numerator y &denominator pasan las direcciones de memoria para almacenar los valores de entrada.
  • printf() se utiliza para mostrar el numerador y el denominador ingresados.

Calcular MCD y Dividir Ambos

En este paso, implementarás el algoritmo del Máximo Común Divisor (MCD) y lo usarás para simplificar la fracción.

Modifiquemos el programa anterior para añadir una función de cálculo del MCD:

cd ~/project
nano fraction_simplify.c

Actualiza el código con la siguiente implementación:

#include <stdio.h>

// Función para calcular el MCD usando el algoritmo de Euclides
int computeGCD(int a, int b) {
    // Asegurar valores positivos
    a = (a > 0) ? a : -a;
    b = (b > 0) ? b : -b;

    // Algoritmo de Euclides
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

int main() {
    int numerator, denominator, gcd;

    printf("Ingrese el numerador: ");
    scanf("%d", &numerator);

    printf("Ingrese el denominador: ");
    scanf("%d", &denominator);

    // Calcular el MCD
    gcd = computeGCD(numerator, denominator);

    // Simplificar la fracción
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    printf("Fracción Original: %d/%d\n", numerator, denominator);
    printf("Fracción Simplificada: %d/%d\n", simplified_numerator, simplified_denominator);

    return 0;
}

Compila y ejecuta el programa:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Salida de ejemplo:

Ingrese el numerador: 12
Ingrese el denominador: 18
Fracción Original: 12/18
Fracción Simplificada: 2/3

Explicación del código:

  • computeGCD() implementa el algoritmo de Euclides para encontrar el Máximo Común Divisor.
  • La función maneja números positivos y negativos.
  • La fracción se simplifica dividiendo el numerador y el denominador por su MCD.
  • Maneja casos especiales como ceros y números negativos.

Imprimir la Fracción Simplificada

En este paso, mejorarás el programa de simplificación de fracciones para manejar diversos escenarios de entrada y proporcionar un formato de salida claro.

Actualicemos el programa para incluir una impresión de fracciones más robusta:

cd ~/project
nano fraction_simplify.c

Actualiza el código con la siguiente implementación:

#include <stdio.h>

// Función para calcular el MCD usando el algoritmo de Euclides
int computeGCD(int a, int b) {
    a = (a > 0) ? a : -a;
    b = (b > 0) ? b : -b;

    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

// Función para imprimir la fracción con manejo de casos especiales
void printFraction(int numerator, int denominator) {
    // Manejar la división por cero
    if (denominator == 0) {
        printf("Error: No se permite la división por cero.\n");
        return;
    }

    // Calcular el MCD
    int gcd = computeGCD(numerator, denominator);

    // Simplificar la fracción
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    // Manejar el signo
    if (simplified_denominator < 0) {
        simplified_numerator = -simplified_numerator;
        simplified_denominator = -simplified_denominator;
    }

    // Imprimir resultados
    printf("Fracción Original: %d/%d\n", numerator, denominator);

    // Salida diferente para números enteros y fracciones
    if (simplified_denominator == 1) {
        printf("Fracción Simplificada: %d\n", simplified_numerator);
    } else {
        printf("Fracción Simplificada: %d/%d\n",
               simplified_numerator, simplified_denominator);
    }
}

int main() {
    int numerator, denominator;

    printf("Ingrese el numerador: ");
    scanf("%d", &numerator);

    printf("Ingrese el denominador: ");
    scanf("%d", &denominator);

    // Llamar a la función de impresión de fracciones
    printFraction(numerator, denominator);

    return 0;
}

Compila y ejecuta el programa:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Ejemplos de salida:

Ingrese el numerador: 12
Ingrese el denominador: 18
Fracción Original: 12/18
Fracción Simplificada: 2/3

Ingrese el numerador: 15
Ingrese el denominador: 5
Fracción Original: 15/5
Fracción Simplificada: 3

Ingrese el numerador: -12
Ingrese el denominador: 18
Fracción Original: -12/18
Fracción Simplificada: -2/3

Explicación del código:

  • Se añadió la función printFraction() para manejar la impresión de fracciones.
  • Maneja casos especiales como la división por cero.
  • Gestiona el signo de la fracción simplificada.
  • Imprime números enteros cuando el denominador es 1.
  • Preserva el signo original de la fracción.

Resumen

En este laboratorio, aprenderás a leer el numerador y el denominador de la entrada del usuario, calcular el Máximo Común Divisor (MCD) utilizando el algoritmo de Euclides y, a continuación, simplificar la fracción dividiendo tanto el numerador como el denominador por el MCD. La fracción simplificada se imprimirá como salida.

Los pasos clave son: 1) leer el numerador y el denominador de la entrada del usuario, 2) implementar el algoritmo del MCD para encontrar el máximo común divisor y 3) dividir tanto el numerador como el denominador por el MCD para obtener la fracción simplificada.