Simplificar Frações (MDC) em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a simplificar frações usando o algoritmo do Máximo Divisor Comum (MDC) na programação em C. O laboratório cobre os seguintes passos: ler o numerador e o denominador da entrada do usuário, calcular o MDC e, em seguida, dividir o numerador e o denominador pelo MDC para obter a fração simplificada. Este laboratório tem como objetivo ajudá-lo a compreender o conceito de simplificação de frações e implementá-lo usando técnicas de programação em C.

Ler Numerador e Denominador

Neste passo, você aprenderá a ler o numerador e o denominador da entrada do usuário em um programa C para simplificação de frações.

Primeiro, vamos criar um novo arquivo C para nosso programa de simplificação de frações:

cd ~/project
nano fraction_simplify.c

Agora, adicione o seguinte código para ler o numerador e o denominador:

#include <stdio.h>

int main() {
    int numerator, denominator;

    printf("Digite o numerador: ");
    scanf("%d", &numerator);

    printf("Digite o denominador: ");
    scanf("%d", &denominator);

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

    return 0;
}

Vamos compilar e executar o programa:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Exemplo de saída:

Digite o numerador: 12
Digite o denominador: 18
Numerador: 12
Denominador: 18

Explicação do código:

  • scanf() é usado para ler a entrada de inteiro do usuário
  • %d é o especificador de formato para inteiros
  • &numerator e &denominator passam os endereços de memória para armazenar os valores de entrada
  • printf() é usado para exibir o numerador e o denominador inseridos

Calcular MDC e Dividir Ambos

Neste passo, você implementará o algoritmo do Máximo Divisor Comum (MDC) e o usará para simplificar a fração.

Vamos modificar o programa anterior para adicionar uma função de cálculo de MDC:

cd ~/project
nano fraction_simplify.c

Atualize o código com a seguinte implementação:

#include <stdio.h>

// Função para calcular o MDC usando o algoritmo de Euclides
int computeGCD(int a, int b) {
    // Garantir 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("Digite o numerador: ");
    scanf("%d", &numerator);

    printf("Digite o denominador: ");
    scanf("%d", &denominator);

    // Calcular o MDC
    gcd = computeGCD(numerator, denominator);

    // Simplificar a fração
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    printf("Fração Original: %d/%d\n", numerator, denominator);
    printf("Fração Simplificada: %d/%d\n", simplified_numerator, simplified_denominator);

    return 0;
}

Compile e execute o programa:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Exemplo de saída:

Digite o numerador: 12
Digite o denominador: 18
Fração Original: 12/18
Fração Simplificada: 2/3

Explicação do código:

  • computeGCD() implementa o algoritmo de Euclides para encontrar o Máximo Divisor Comum
  • A função lida com números positivos e negativos
  • A fração é simplificada dividindo o numerador e o denominador pelo seu MDC
  • Lidar com casos de borda, como zero e números negativos

Imprimir a Fração Simplificada

Neste passo, você aprimorará o programa de simplificação de frações para lidar com vários cenários de entrada e fornecer formatação de saída clara.

Vamos atualizar o programa para incluir a impressão de frações mais robusta:

cd ~/project
nano fraction_simplify.c

Atualize o código com a seguinte implementação:

#include <stdio.h>

// Função para calcular o MDC usando o 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;
}

// Função para imprimir a fração com tratamento de casos especiais
void printFraction(int numerator, int denominator) {
    // Lidar com divisão por zero
    if (denominator == 0) {
        printf("Erro: Divisão por zero não é permitida.\n");
        return;
    }

    // Calcular o MDC
    int gcd = computeGCD(numerator, denominator);

    // Simplificar a fração
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    // Lidar com o sinal
    if (simplified_denominator < 0) {
        simplified_numerator = -simplified_numerator;
        simplified_denominator = -simplified_denominator;
    }

    // Imprimir resultados
    printf("Fração Original: %d/%d\n", numerator, denominator);

    // Saída diferente para números inteiros e frações
    if (simplified_denominator == 1) {
        printf("Fração Simplificada: %d\n", simplified_numerator);
    } else {
        printf("Fração Simplificada: %d/%d\n",
               simplified_numerator, simplified_denominator);
    }
}

int main() {
    int numerator, denominator;

    printf("Digite o numerador: ");
    scanf("%d", &numerator);

    printf("Digite o denominador: ");
    scanf("%d", &denominator);

    // Chamar a função de impressão de fração
    printFraction(numerator, denominator);

    return 0;
}

Compile e execute o programa:

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

Exemplos de saída:

Digite o numerador: 12
Digite o denominador: 18
Fração Original: 12/18
Fração Simplificada: 2/3

Digite o numerador: 15
Digite o denominador: 5
Fração Original: 15/5
Fração Simplificada: 3

Digite o numerador: -12
Digite o denominador: 18
Fração Original: -12/18
Fração Simplificada: -2/3

Explicação do código:

  • Função printFraction() adicionada para lidar com a impressão de frações
  • Lidar com casos especiais, como divisão por zero
  • Gerenciar o sinal da fração simplificada
  • Imprimir números inteiros quando o denominador é 1
  • Preservar o sinal original da fração

Resumo

Neste laboratório, você aprenderá a ler o numerador e o denominador da entrada do usuário, calcular o Máximo Divisor Comum (MDC) usando o algoritmo de Euclides e, em seguida, simplificar a fração dividindo o numerador e o denominador pelo MDC. A fração simplificada será impressa como saída.

Os passos-chave são: 1) ler o numerador e o denominador da entrada do usuário, 2) implementar o algoritmo do MDC para encontrar o maior divisor comum e 3) dividir o numerador e o denominador pelo MDC para obter a fração simplificada.