7 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 124
|
|
1 | |
Сократить дробь21.11.2012, 14:18. Показов 18450. Ответов 10
Метки нет (Все метки)
Даны натуральные числа a и b, обозначающие соответственно числитель и знаменатель дроби. Сократите дробь, т.е найти такие натуральные p и q, не имеющие общих делителей, что p/q=a/b. (Необходимо выполнить через цикл, а и б вводятся с клавиатуры)
Очень надеюсь на вашу помощь.
0
|
21.11.2012, 14:18 | |
Ответы с готовыми решениями:
10
Сократить дробь Сократить дробь Необходимо сократить дробь Сократить дробь используя функцию |
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||
21.11.2012, 15:12 | 2 | |||||
Вот придумалось так:
1
|
262 / 61 / 5
Регистрация: 29.06.2012
Сообщений: 109
|
||||||
21.11.2012, 15:54 | 3 | |||||
Этот код должен работать быстрее при больших числах:
1
|
7 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 124
|
|
21.11.2012, 21:49 [ТС] | 4 |
Допишите необходимые библиотеки ф-ций, что б работало)) Благодарю Вас)
Добавлено через 2 минуты Я извиняюсь, но я совсем не понял ход ваших мыслей) да и при выполнении программы, мне выводятся теже самые значения что я ввожу.. Обьясните пж)
0
|
262 / 61 / 5
Регистрация: 29.06.2012
Сообщений: 109
|
|
21.11.2012, 22:37 | 5 |
есть известный алгоритм вычисления наибольшего общего делителя двух чисел, заключающийся в следующем: из двух чисел выбирается большее и большее делится на меньшее; если остатка нет, то наибольший общий делитель - меньшее число; если же деление осуществляется с остатком, тогда на следующей итерации в роли делимого выступает бывший делитель, а в роли делителя - остаток, и находится новый остаток от деления. Аналогичные последовательные приближения осуществляются до тех пор, пока остаток не станет нулевым. Последнее значение делителя и будет наибольшим общим делителем двух исходных чисел. Этот алгоритм и реализует функция nod.
А из main() сначала вызываемое nod, а для получения сокращенных значений делим исходные значения на результат, возвращаемый функцией nod.
2
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
22.11.2012, 09:36 | 6 |
А у меня тогда метод грубой силы.
После ввода значений a и b они пересохраняются в p и q, это на случай, если не будет общих делителей. Тогда они так и останутся теми же введенными числами. потом в цикле от одного до наименьшего из двух введенных (i<=a && i<=b) выполнять проверку: если остаток от деления равен нулю (!(a%i) && !(b%i)), то есть оба числа делятся на i без остатка, тогда p и q переписать. Так как i увеличивается, то p и q будут постоянно уменьшаться. И в итоге у нас в них будут лежать наименьшие возможные значения.
1
|
7 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 124
|
|
26.11.2012, 20:05 [ТС] | 7 |
SatanaXIII, Можете пожалуйста добавить необходимые библиотеки ф-ций что-бы программа выполнялась?
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|||||||||||
27.11.2012, 09:46 | 8 | ||||||||||
А.
Ну там только
И еще в 11 и 12 строке надо выкинуть
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
27.11.2012, 10:57 | 9 | ||||||||||
Пусть c - любой общий делитель a и b. Тогда . Далее если числитель и знаменатель этой дроби имеют общие делители, то её можно сократить аналогично. После того, как окажутся сокращены все получающиеся при сокращении эквивалентные дроби, окажется, что произведение всех использованных делителей равно наибольшему общему делителю a и b. Причём всякий общий делитель и одновременно является общим делителем a и b.
И целиком:
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
27.11.2012, 11:08 | 10 |
taras atavin, зачем городить пачку флагов и циклов, когда есть простой и красивый алгоритм Евклида для поиска НОД?
1
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
27.11.2012, 11:26 | 11 |
taras atavin, а чем от моего решения отличается? Так же сравнение по нулевым остаткам, плюс на флаг больше.
P.S. Конечно же в 24 строке использовать abs() это верно подмечено. Для отрицательных дробей.
0
|
27.11.2012, 11:26 | |
27.11.2012, 11:26 | |
Помогаю со студенческими работами здесь
11
Составить программу , позволющую сократить дробь. Сократить дробь, т е найти такие натуральные числа p и q , не имеющий общий делитель N и M числитель и знаменатель дроби, составить программу, позволяющая сократить эту дробь. Используя функцию нахождения НОД двух натуральных чисел, сократить обычную дробь Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |