Конспект лекций по программированию для начинающих. Гладков В.П. - 41 стр.

UptoLike

Составители: 

43
8.4.Примеры построения линейных алгоритмов
Пример 8.6. Заданы два числа, которые хранятся в переменных а и b.
Необходимо поменять местами значения этих переменных.
Решение. Итак, заданы две переменные, которые хранят числовую
информацию. Числовая информация в алгоритмическом языке может быть
представлена как целая или вещественная (приближенная). Поскольку в
условии задачи нет явного указания на тип числовой информации,
будем
использовать более общий тип - вещественный. Исходными данными могут
быть, например, такие числа:
Исходные
данные
Результат
a b a b
5 3 3 5
3.14 2.81 2.81 3.14
-40 +15 +15 -40
Попытаемся решить задачу с помощью оператора присваивания a:=b. После
его выполнения значения переменных a и b будут одинаковыми, но будет
утеряно первоначальное значение переменной a. Для того, чтобы его сохранить,
поместим его в рабочую переменную r. Тогда последовательность операторов,
решающая задачу, будет такой:
r:=a;{ запомнили значение переменной a }
a:=b;{ в переменную a записали значение переменной b }
b:=r { в переменную b записали
сохраненное в r старое значение a }
После выполнения этих операторов значения переменных поменялись
местами. Решение получено, но, помня о том, что для решения задачи можно,
как правило, предложить несколько алгоритмов, продолжим поиски.
Постараемся найти алгоритм, который для решения задачи не требует введения
вспомогательной переменной. Заметим, что исходные данные представляют
собой числа. Над
числами можно выполнять арифметические операции. Без
потери значений можно найти сумму, пусть a:=a+b. Теперь нам известна сумма
заданных значений и исходное значение переменной b. С помощью вычитания
можно найти значение a и поместить в b, т.е. b:=a-b. Теперь нам известна сумма
заданных значений и исходное значение переменной a, которое хранится в
переменной b. Чтобы решить задачу,
осталось выполнить a:=a-b.
Проведем трассировку найденных операторов.
a:=a+b;
b:=a-b;
a:=a-b
Пусть первоначально a=5, b=3. После исполнения оператора a:=a+b получим
a=8, b=3. После исполнения оператора b:=a-b значения переменных изменятся
a=8, b=5. После исполнения оператора a:=a-b окончательно получим a=3, b=5.
Можно получить еще одно решение, если воспользоваться двоичным
представлением чисел. Над двоичными числами можно выполнять операцию
исключающего ИЛИ(xor), которая задается следующей таблицей:
                                       43

            8.4.Примеры построения линейных алгоритмов
   Пример 8.6. Заданы два числа, которые хранятся в переменных а и b.
Необходимо поменять местами значения этих переменных.
   Решение. Итак, заданы две переменные, которые хранят числовую
информацию. Числовая информация в алгоритмическом языке может быть
представлена как целая или вещественная (приближенная). Поскольку в
условии задачи нет явного указания на тип числовой информации, будем
использовать более общий тип - вещественный. Исходными данными могут
быть, например, такие числа:
                       Исходные              Результат
                        данные
                      a        b             a       b
                      5        3             3       5
                     3.14    2.81           2.81    3.14
                     -40      +15           +15     -40
   Попытаемся решить задачу с помощью оператора присваивания a:=b. После
его выполнения значения переменных a и b будут одинаковыми, но будет
утеряно первоначальное значение переменной a. Для того, чтобы его сохранить,
поместим его в рабочую переменную r. Тогда последовательность операторов,
решающая задачу, будет такой:
   r:=a;{ запомнили значение переменной a }
   a:=b;{ в переменную a записали значение переменной b }
   b:=r { в переменную b записали сохраненное в r старое значение a }
   После выполнения этих операторов значения переменных поменялись
местами. Решение получено, но, помня о том, что для решения задачи можно,
как правило, предложить несколько алгоритмов, продолжим поиски.
Постараемся найти алгоритм, который для решения задачи не требует введения
вспомогательной переменной. Заметим, что исходные данные представляют
собой числа. Над числами можно выполнять арифметические операции. Без
потери значений можно найти сумму, пусть a:=a+b. Теперь нам известна сумма
заданных значений и исходное значение переменной b. С помощью вычитания
можно найти значение a и поместить в b, т.е. b:=a-b. Теперь нам известна сумма
заданных значений и исходное значение переменной a, которое хранится в
переменной b. Чтобы решить задачу, осталось выполнить a:=a-b.
   Проведем трассировку найденных операторов.
   a:=a+b;
   b:=a-b;
   a:=a-b
   Пусть первоначально a=5, b=3. После исполнения оператора a:=a+b получим
a=8, b=3. После исполнения оператора b:=a-b значения переменных изменятся
a=8, b=5. После исполнения оператора a:=a-b окончательно получим a=3, b=5.
   Можно получить еще одно решение, если воспользоваться двоичным
представлением чисел. Над двоичными числами можно выполнять операцию
исключающего ИЛИ(xor), которая задается следующей таблицей: