Найти сумму дробей с нечетными порядковыми номерами - 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; }
Объяснение кода листинга программы
- Заголовочный файл #include
подключает функции ввода-вывода из стандартной библиотеки - Функция grecomdiv(int a, int b) находит наибольший общий делитель (НОД) для чисел a и b, используя алгоритм Евклида
- Переменная low инициализируется значением a в функции main(), если a меньше b, и b в противном случае
- Переменная gcd инициализируется единицей в функции main()
- Переменные i, sx1 и sy1 инициализируются нулями в функции main()
- Переменные a1, b1, c1, d1, a2, b2, c2, d2, x1, y1, x2, y2 и N инициализируются нулями в функции main()
- Цикл for в функции main() выполняется N раз, где N - количество пар простых дробей, введенных пользователем
- В каждой итерации цикла пользователь вводит значения a1, b1, c1, d1, a2, b2, c2, d2 с помощью функции scanf()
- Значения a1, b1, c1, d1 преобразуются в типы int, а значения a2, b2, c2, d2 - в типы double с плавающей точкой
- Выполняются вычисления для первой и второй дробей с использованием функций grecomdiv() и операций деления и умножения
- Переменные sx1 и sy1 обновляются значениями x1 и y1 соответственно
- Переменные sx2 и sy2 обновляются значениями x2 и y2 соответственно
- Переменная S1 обновляется значением sx1/sy1, а переменная S2 - значением sx2/sy2
- Если S2 больше S1, то выводится сообщение
Even fractions amount greater than the sum of odd
и цикл прерывается - Если sx1 больше sy1, то выводится сообщение
Sum of the odd fractions is: sx1 / sy1, sx1 % sy1, sy1
- Если sx2 больше sy2, то выводится сообщение
Sum of the even fractions is: sx2 / sy2, sx2 % sy2, sy2
- Функция main() возвращает 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д