Предмет: Информатика, автор: Dnitry86

Вычислить произведение четырех натур.чисел, используя только операцию сложения. (Язык пр: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 и не понимаю их значения. Если можно, напиши самую обычную программу, кажется она пишется через цикл
65536: tmp - просто имя переменной, процедура inc(x,y) увеличивает значение x на y, т.е. если не происходит переполнения, то же самое что и x+=y; x shr 1 - побитовый сдвиг, для положительных чисел возвращает то же самое, что и x div 2.
65536: Произведение вычисляется аналогично схеме Горнера(точного названия в программировании не знаю): m*(2n+1)=2*(m*n)+m; m*(2n)=2*(m*n), само произведение m*n вычисляется по тому же принципу и такой спуск идет до тех пор пока очередное n не станет равно 1. Красиво...
Похожие вопросы
Предмет: Математика, автор: idixi