Ввести структуру для описания понятия рациональная дробь - C (СИ)
Формулировка задачи:
Ввести структуру для описания понятия рациональная дробь. Составить и протестировать функции:
• eqw(a, b), которая проверяет на равенство рациональные дроби a и b.
• max(a), которая возвращает наибольшую рациональную дробь из массива структур a. Предусмотреть операцию сокращения результирующей дроби.
Решение задачи: «Ввести структуру для описания понятия рациональная дробь»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
struct ratio
{
int numerator;
size_t denominator;
};
struct ratio ratio(int numerator, size_t denominator)
{
struct ratio result;
assert(denominator != 0);
result.numerator = numerator;
result.denominator = denominator;
return result;
}
size_t gcd(size_t a, size_t b)
{
if(a == 0)
return b;
while(b != 0)
if(a > b)
a -= b;
else
b -= a;
return a;
}
int equal(struct ratio r1, struct ratio r2)
{
return r1.numerator * r2.denominator ==
r2.numerator * r1.denominator;
}
void cancel(struct ratio* ratio)
{
size_t d = gcd(abs(ratio->numerator), ratio->denominator);
ratio->numerator /= d;
ratio->denominator /= d;
}
struct ratio max(struct ratio* ratios, size_t size)
{
size_t i, idx_max;
assert(size != 0);
for(idx_max = 0, i = 1; i < size; ++i)
{
if(ratios[i].numerator * ratios[idx_max].denominator >
ratios[idx_max].numerator * ratios[i].denominator)
idx_max = i;
}
cancel(&ratios[idx_max]);
return ratios[idx_max];
}
Объяснение кода листинга программы
- Введенная структура для описания понятия рациональная дробь:
- struct ratio { int numerator; size_t denominator; }
- Создана функция для ввода данных и возвращения структуры рациональной дроби:
- struct ratio ratio(int numerator, size_t denominator)
- Реализована функция вычисления наибольшего общего делителя (НОД):
- size_t gcd(size_t a, size_t b)
- Реализована функция сравнения двух структур рациональных дробей на равенство:
- int equal(struct ratio r1, struct ratio r2)
- Реализована функция для сокращения дробей:
- void cancel(struct ratio* ratio)
- Реализована функция для поиска максимальной дроби в массиве:
- struct ratio max(struct ratio* ratios, size_t size)