1.1.1. Даны две целые переменные a, b.
Составить фрагмент программы, после исполнения которого значения
переменных поменялись бы местами (новое значение a равно
старому значению b и наоборот).
t := a; a := b; b := t;Попытка обойтись без дополнительной переменной, написав
a := b; b := a;не приводит к цели (безвозвратно утрачивается начальное значение переменной a).
1.1.2. Решить предыдущую задачу, не используя
дополнительных переменных (и предполагая, что значениями целых
переменных могут быть произвольные целые числа).
a := a + b; {a = a0 + b0, b = b0} b := a - b; {a = a0 + b0, b = a0} a := a - b; {a = b0, b = a0}`
1.1.3. Дано целое число а и натуральное (целое
неотрицательное) число n. Вычислить .Другими словами, необходимо составить
программу, при исполнении которой значения переменных а и
n не меняются, а значение некоторой другой переменной
(например, b) становится равным .(При этом разрешается использовать и другие переменные.)
k := 0; b := 1; {b = a в степени k} while k <> n do begin | k := k + 1; | b := b * a; end;Другое решение той же задачи:
k := n; b := 1; {a в степени n = b * (a в степени k)} while k <> 0 do begin | k := k - 1; | b := b * a; end;`
1.1.4. Решить предыдущую задачу, если требуется, чтобы
число действий (выполняемых операторов присваивания) было
порядка (то есть не превосходило бы
для некоторой константы C ; --
это степень, в которую нужно возвести 2 , чтобы получить ).
k := n; b := 1; c:=a; {a в степени n = b * (c в степени k)} while k <> 0 do begin | if k mod 2 = 0 then begin | | k:= k div 2; | | c:= c*c; | end else begin | | k := k - 1; | | b := b * c; | end; end;
Каждый второй раз (не реже) будет выполняться первый вариант оператора выбора (если k нечетно, то после вычитания единицы становится четным), так что за два цикла величина k уменьшается по крайней мере вдвое.
1.1.5. Даны натуральные числа а, b.
Вычислить произведение , используя
в программе лишь операции +, -, =, <>.
k := 0; c := 0; {инвариант: c = a * k} while k <> b do begin | k := k + 1; | c := c + a; end; {c = a * k и k = b, следовательно, c = a * b}`
1.1.6. Даны натуральные числ