Введение
В этом лабораторном практикуме вы научитесь упрощать дроби, используя алгоритм наибольшего общего делителя (НОД) на языке программирования C. Практикум охватывает следующие шаги: ввод числителя и знаменателя с помощью пользовательского ввода, вычисление НОД и затем деление и числителя, и знаменателя на НОД для получения упрощенной дроби. Этот практикум призван помочь вам понять концепцию упрощения дробей и реализовать её с помощью методов программирования на языке C.
Чтение числителя и знаменателя
В этом шаге вы узнаете, как читать числитель и знаменатель из пользовательского ввода в программе на C для упрощения дробей.
Сначала создадим новый файл C для нашей программы упрощения дробей:
cd ~/project
nano fraction_simplify.c
Теперь добавьте следующий код для чтения числителя и знаменателя:
#include <stdio.h>
int main() {
int numerator, denominator;
printf("Enter the numerator: ");
scanf("%d", &numerator);
printf("Enter the denominator: ");
scanf("%d", &denominator);
printf("Numerator: %d\n", numerator);
printf("Denominator: %d\n", denominator);
return 0;
}
Теперь скомпилируем и запустим программу:
gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify
Пример вывода:
Enter the numerator: 12
Enter the denominator: 18
Numerator: 12
Denominator: 18
Описание кода:
scanf()используется для чтения целочисленного ввода от пользователя%d— спецификатор формата для целых чисел&numeratorи&denominatorпередают адреса памяти для хранения введённых значенийprintf()используется для отображения введённого числителя и знаменателя
Вычисление НОД и деление
В этом шаге вы реализуете алгоритм наибольшего общего делителя (НОД) и используете его для упрощения дроби.
Давайте изменим предыдущую программу, добавив функцию вычисления НОД:
cd ~/project
nano fraction_simplify.c
Обновите код следующим реализацией:
#include <stdio.h>
// Функция для вычисления НОД с помощью алгоритма Евклида
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;
}
int main() {
int numerator, denominator, gcd;
printf("Enter the numerator: ");
scanf("%d", &numerator);
printf("Enter the denominator: ");
scanf("%d", &denominator);
// Вычисление НОД
gcd = computeGCD(numerator, denominator);
// Упрощение дроби
int simplified_numerator = numerator / gcd;
int simplified_denominator = denominator / gcd;
printf("Original Fraction: %d/%d\n", numerator, denominator);
printf("Simplified Fraction: %d/%d\n", simplified_numerator, simplified_denominator);
return 0;
}
Скомпилируйте и запустите программу:
gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify
Пример вывода:
Enter the numerator: 12
Enter the denominator: 18
Original Fraction: 12/18
Simplified Fraction: 2/3
Описание кода:
computeGCD()реализует алгоритм Евклида для нахождения наибольшего общего делителя- Функция обрабатывает как положительные, так и отрицательные числа
- Дробь упрощается путём деления числителя и знаменателя на их НОД
- Обрабатываются крайние случаи, такие как нулевые и отрицательные значения.
Вывод упрощенной дроби
В этом шаге вы улучшите программу упрощения дробей, чтобы она обрабатывала различные сценарии ввода и предоставляла четкий формат вывода.
Обновим программу, включив более надёжный вывод дробей:
cd ~/project
nano fraction_simplify.c
Обновите код следующим реализацией:
#include <stdio.h>
// Функция для вычисления НОД с помощью алгоритма Евклида
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;
}
// Функция для вывода дроби с обработкой особых случаев
void printFraction(int numerator, int denominator) {
// Обработка деления на ноль
if (denominator == 0) {
printf("Error: Деление на ноль недопустимо.\n");
return;
}
// Вычисление НОД
int gcd = computeGCD(numerator, denominator);
// Упрощение дроби
int simplified_numerator = numerator / gcd;
int simplified_denominator = denominator / gcd;
// Обработка знака
if (simplified_denominator < 0) {
simplified_numerator = -simplified_numerator;
simplified_denominator = -simplified_denominator;
}
// Вывод результатов
printf("Original Fraction: %d/%d\n", numerator, denominator);
// Разный вывод для целых чисел и дробей
if (simplified_denominator == 1) {
printf("Simplified Fraction: %d\n", simplified_numerator);
} else {
printf("Simplified Fraction: %d/%d\n",
simplified_numerator, simplified_denominator);
}
}
int main() {
int numerator, denominator;
printf("Enter the numerator: ");
scanf("%d", &numerator);
printf("Enter the denominator: ");
scanf("%d", &denominator);
// Вызов функции вывода дроби
printFraction(numerator, denominator);
return 0;
}
Скомпилируйте и запустите программу:
gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify
Примеры вывода:
Enter the numerator: 12
Enter the denominator: 18
Original Fraction: 12/18
Simplified Fraction: 2/3
Enter the numerator: 15
Enter the denominator: 5
Original Fraction: 15/5
Simplified Fraction: 3
Enter the numerator: -12
Enter the denominator: 18
Original Fraction: -12/18
Simplified Fraction: -2/3
Описание кода:
- Добавлена функция
printFraction()для обработки вывода дроби - Обрабатываются особые случаи, такие как деление на ноль
- Управляется знак упрощенной дроби
- Выводятся целые числа, когда знаменатель равен 1
- Сохраняется исходный знак дроби
Резюме
В этом лабораторном практикуме вы научитесь считывать числитель и знаменатель из пользовательского ввода, вычислять наибольший общий делитель (НОД) с помощью алгоритма Евклида и затем упрощать дробь, разделив числитель и знаменатель на НОД. Упрощенная дробь будет выведена в качестве результата.
Ключевые шаги: 1) считывание числителя и знаменателя из пользовательского ввода, 2) реализация алгоритма Евклида для нахождения наибольшего общего делителя и 3) деление числителя и знаменателя на НОД для получения упрощенной дроби.



