Proc46. Описать функцию NOD2($$A$$, $$B$$) целого типа, находящую наибольший общий делитель (НОД) двух целых положительных чисел $$A$$ и $$B$$, используя алгоритм Евклида: НОД($$A$$, $$B$$) = НОД($$B$$, $$A mod B$$), если $$B \neq 0$$; НОД($$A$$, $$0$$) = $$A$$. С помощью этой функции найти наибольшие общие делители пар $$(A, B), (A, C), (A, D),$$ если даны числа $$A, B, C, D$$.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
program Proc46; Function NOD2(A,B:Integer):Integer; begin while (A<>0) and (B<>0) do begin if a>b then A:=(a mod b) else B:=(B mod A); end; NOD2:=A+B; end; var A, B, C, D: integer; begin Write('A :'); Readln(A); Write('B :'); Readln(B); Write('C :'); Readln(C); Write('D :'); Readln(D); Writeln(NOD2(A,B)); Writeln(NOD2(A,C)); Writeln(NOD2(A,D)); end. |
Другие задачи из раздела Proc можно посмотреть здесь.
Наверное тоже самое
[/crayon]
Угу очень похоже… вот только с a*b<>0 не всё однозначно… это весело, в учебных примерах, что бы показать что иногда сложные логические штуки можно решить не только логикой.
Но это ест намного больше ресурсов чем булевые операции… например как у меня (A<>0) and (B<>0). к тому же в некоторых языках программирования есть специальные функции для сравнения с нулём, что ещё убыстряет процесс…
Так что в жизни лучше так не делать… 🙂
Это конечно работает 🙂
Но в задании даже описан алгоритм поиска НОД. И Евклид не просто так это придумал. Данный алгоритм намного быстрее перебора. 🙂
😀