Ввести структуру для описания понятия рациональная дробь - 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];
}

Объяснение кода листинга программы

  1. Введенная структура для описания понятия рациональная дробь:
    • struct ratio { int numerator; size_t denominator; }
  2. Создана функция для ввода данных и возвращения структуры рациональной дроби:
    • struct ratio ratio(int numerator, size_t denominator)
  3. Реализована функция вычисления наибольшего общего делителя (НОД):
    • size_t gcd(size_t a, size_t b)
  4. Реализована функция сравнения двух структур рациональных дробей на равенство:
    • int equal(struct ratio r1, struct ratio r2)
  5. Реализована функция для сокращения дробей:
    • void cancel(struct ratio* ratio)
  6. Реализована функция для поиска максимальной дроби в массиве:
    • struct ratio max(struct ratio* ratios, size_t size)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5
Похожие ответы