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&numeratore&denominatorpassam os endereços de memória para armazenar os valores de entradaprintf()é 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.



