Найти все простые несократимые дроби, заключенные между 0 и 1 - C (СИ)
Формулировка задачи:
Найти все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7 (дробь задается двумя натуральными числами – числителем и знаменателем).
Помогите плизз, нужно написать на языке Си, желательно совместимо с программой TurboC
Решение задачи: «Найти все простые несократимые дроби, заключенные между 0 и 1»
textual
Листинг программы
#include <stdio.h>
const int n = 7;
void Farey(int ltP, int ltQ, int rgP, int rgQ)
{
int P, Q;
if(ltQ <= n && rgQ <= n)
{
P = ltP + rgP;
Q = ltQ + rgQ;
Farey(ltP, ltQ, P, Q);
if(Q <= n) printf("%d/%d\n", P, Q);
Farey(P, Q, rgP, rgQ);
}
}
int main(void)
{
Farey(0, 1, 1, 1);
return 0;
}
Объяснение кода листинга программы
В данном коде реализована рекурсивная функция для поиска простых несократимых дробей в заданном диапазоне от 0 до 1.
- В функции
mainвызывается функцияFareyс аргументами 0, 1, 1, 1, что инициирует процесс поиска дробей. - В функции
Fareyв первую очередь проверяется условиеltQ <= n && rgQ <= n, которое гарантирует, что дробь с такими числителем и знаменателем еще не была выведена (т.е. не является простой несократимой дробью). Если это условие выполняется, то выполняются следующие действия:- Переменные
PиQполучают суммы числителей и знаменателей соответственно:P = ltP + rgPиQ = ltQ + rgQ. - Вызывается функция
Fareyс новыми значениями аргументовltP, ltQ, P, Q, что позволяет искать более мелкие дроби. - Если значение
Qне превышаетn, то выводится текущая дробь в форматечислитель/знаменательс помощью командыprintf. - После этого вызывается функция
Fareyс аргументамиPиQ, что позволяет искать более мелкие дроби.
- Переменные
- Если условие
ltQ <= n && rgQ <= nне выполняется, то процесс поиска дробей завершается. - В функции
mainпосле вызова функцииFareyничего не происходит, поэтому она просто завершается. Список действий: - Вызов функции
Fareyвmainс аргументами 0, 1, 1, 1. - Проверка условия
ltQ <= n && rgQ <= n. - Вычисление значений
PиQ. - Вызов функции
Fareyс новыми значениями аргументовltP, ltQ, P, Q. - Проверка условия
Q <= n. - Вывод текущей дроби.
- Вызов функции
Fareyс аргументамиPиQ. - Повторение шагов 4-7 до тех пор, пока не будет выполнено условие
Q <= n. - Возврат в
mainи завершение программы.