Найти сумму дробей с нечетными порядковыми номерами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Создать программу, вводящую в цикле несколько дробей (не более заданного количества N), и находящую для введенных дробей две суммы: сумму дробей с нечетными порядковыми номерами и сумму дробей с четными номерами. Программа заканчивает работу, когда сумма дробей с четными номерами окажется больше, чем с нечетными. Нужна помощь

Решение задачи: «Найти сумму дробей с нечетными порядковыми номерами»

textual
Листинг программы
#include <stdio.h>
 
int grecomdiv(int a, int b)
{
    if(a < 0)
        a *= -1;
    if(b < 0)
        b *= -1;
    int low, gcd = 1, i = 2;
    low = a < b ? a : b;
    while(i <= low){
        if(a % i == 0 && b % i == 0){
            gcd = gcd * i;
            a = a / i;
            b = b / i;
        }
        else
            i++;
    }
    return gcd;
}
int main()
{
    double S1 = 0.0, S2 = 0.0;
    int a1, b1, c1, d1, a2, b2, c2, d2, x1, y1, x2, y2, gcd, N, i, sx1 = 0, sy1 = 1, sx2 = 0, sy2 = 1;
    puts("Enter the number of pairs of simple fractions:");
    scanf("%d", &N);
    for(i = 1; i <= N; i++){
        puts("Type the numerator and denominator by a space:");
        scanf("%d%d", &a1, &b1);
        printf("You have entered an odd fraction: %d/%d\n", a1, b1);
        puts("Type the numerator and denominator by a space:");
        scanf("%d%d", &a2, &b2);
        printf("You have entered an even fraction: %d/%d\n", a2, b2);
        puts("Type the numerator and denominator by a space:");
        scanf("%d%d", &c1, &d1);
        printf("You have entered an odd fraction: %d/%d\n", c1, d1);
        puts("Type the numerator and denominator by a space:");
        scanf("%d%d", &c2, &d2);
        printf("You have entered an even fraction: %d/%d\n", c2, d2);
        x1 = a1 * d1 + b1 * c1;
        y1 = b1 * d1;
        x2 = a2 * d2 + b2 * c2;
        y2 = b2 * d2;
        gcd = grecomdiv(x1, y1);
        x1 /= gcd;
        y1 /= gcd;
        gcd = grecomdiv(x2, y2);
        x2 /= gcd;
        y2 /= gcd;
        sx1 = sx1 * y1 + sy1 * x1;
        sy1 = sy1 * y1;
        gcd = grecomdiv(sx1, sy1);
        sx1 /= gcd;
        sy1 /= gcd;
        sx2 = sx2 * y2 + sy2 * x2;
        sy2 = sy2 * y2;
        gcd = grecomdiv(sx2, sy2);
        sx2 /= gcd;
        sy2 /= gcd;
        S1 += (double)sx1 / sy1;
        S2 += (double)sx2 / sy2;
        if(S2 > S1){
            puts("Even fractions amount greater than the sum of odd");
            break;
        }
    }
    if(sx1 > sy1)//если числитель больше знаменателя
        printf("Sum of the odd fractions is: %d %d/%d\n", sx1 / sy1, sx1 % sy1, sy1);//выводим целую и дробную части
    else
        printf("Sum of the odd fractions is: %d/%d\n", sx1, sy1);
    if(sx2 > sy2)
        printf("Sum of the even fractions is: %d %d/%d\n", sx2 / sy2, sx2 % sy2, sy2);
    else
        printf("Sum of the even fractions is: %d/%d\n", sx2, sy2);
    return 0;
}

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

  1. Заголовочный файл #include подключает функции ввода-вывода из стандартной библиотеки
  2. Функция grecomdiv(int a, int b) находит наибольший общий делитель (НОД) для чисел a и b, используя алгоритм Евклида
  3. Переменная low инициализируется значением a в функции main(), если a меньше b, и b в противном случае
  4. Переменная gcd инициализируется единицей в функции main()
  5. Переменные i, sx1 и sy1 инициализируются нулями в функции main()
  6. Переменные a1, b1, c1, d1, a2, b2, c2, d2, x1, y1, x2, y2 и N инициализируются нулями в функции main()
  7. Цикл for в функции main() выполняется N раз, где N - количество пар простых дробей, введенных пользователем
  8. В каждой итерации цикла пользователь вводит значения a1, b1, c1, d1, a2, b2, c2, d2 с помощью функции scanf()
  9. Значения a1, b1, c1, d1 преобразуются в типы int, а значения a2, b2, c2, d2 - в типы double с плавающей точкой
  10. Выполняются вычисления для первой и второй дробей с использованием функций grecomdiv() и операций деления и умножения
  11. Переменные sx1 и sy1 обновляются значениями x1 и y1 соответственно
  12. Переменные sx2 и sy2 обновляются значениями x2 и y2 соответственно
  13. Переменная S1 обновляется значением sx1/sy1, а переменная S2 - значением sx2/sy2
  14. Если S2 больше S1, то выводится сообщение Even fractions amount greater than the sum of odd и цикл прерывается
  15. Если sx1 больше sy1, то выводится сообщение Sum of the odd fractions is: sx1 / sy1, sx1 % sy1, sy1
  16. Если sx2 больше sy2, то выводится сообщение Sum of the even fractions is: sx2 / sy2, sx2 % sy2, sy2
  17. Функция main() возвращает 0, что означает успешное выполнение программы

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


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

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

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