Вычислить произведение четырех натур.чисел, используя только операцию сложения. (Язык пр:pascal)
1) Написать программу (обычную)
2) Написать программу с использованием процедуры
3) Написать программу с исп. функции
4) Написать программу с исп. рекурсивной процедуры
5) Написать программу с исп. рекурсивной функции
Ответы
Ответ дал:
2
function pr(a, b:integer):integer; var tmp:integer;begin if b = 1 then pr := a else begin tmp := pr(a, b shr 1); inc(tmp, tmp); if b and 1 = 1 then inc(tmp, a); pr := tmp; end;end; рекурсивная ф-ия, алгоритм работает гораздо быстрее лобового складывания (хоть с большими числами). Процедура пишется аналогично. (если не допрешь - скажи, сделаю)
Dnitry86:
Не допер, к сожалению, я пока не проходил tmp и inc и не понимаю их значения. Если можно, напиши самую обычную программу, кажется она пишется через цикл
tmp - просто имя переменной, процедура inc(x,y) увеличивает значение x на y, т.е. если не происходит переполнения, то же самое что и x+=y; x shr 1 - побитовый сдвиг, для положительных чисел возвращает то же самое, что и x div 2.
Произведение вычисляется аналогично схеме Горнера(точного названия в программировании не знаю): m*(2n+1)=2*(m*n)+m; m*(2n)=2*(m*n), само произведение m*n вычисляется по тому же принципу и такой спуск идет до тех пор пока очередное n не станет равно 1. Красиво...
Вас заинтересует
2 года назад
2 года назад
7 лет назад
7 лет назад
9 лет назад