На этом шаге мы немного "отдохнем" от теории, составляя несколько простых линейных программ.
Задача 1. Даны две целые переменные a, b. Составить программу обмена значениями
этих переменных.
Решение. Введем дополнительную переменную t и выполним
следующие присваивания: t:=a; a:=b; b:=t;. Попытка обойтись без дополнительной
переменной, написав: a:=b; b:=а; не приведет к цели (безвозвратно утрачивается
значение переменной a):
Program Obm; Var a, b, t:Integer; Begin Write('Задайте два целых числа: '); ReadLn(a,b); WriteLn('Значения переменных до обмена.'); WriteLn('a=',a,' b=',b); {Произведем обмен значений переменных.} t:=a; a:=b; b:=t; WriteLn('Значения переменных после обмена.'); WriteLn('a=',a,' b=',b); End.
Задача 2. Даны две целые переменные a, b. Составить программу обмена значениями
этих переменных не используя дополнительных переменных и предполагая, что значениями
целых переменных могут быть произвольные целые числа.
Решение.Существует несколько способов сделать это:
а) a:=a+b; {В переменной a будет значение a+b, а значение b не изменится}
b:=a-b; {В переменной b будет a, а значение a не изменится}
a:=a-b; {В переменной b будет a, а в переменной a будет b}
Program Obm1; Var a, b:Integer; Begin Write('Задайте два целых числа: '); ReadLn(a,b); WriteLn('Значения переменных до обмена.'); WriteLn('a=',a,' b=',b); {Произведем обмен значений переменных.} a:=a+b; b:=a-b; a:=a-b; WriteLn('Значения переменных после обмена.'); WriteLn('a=',a,' b=',b); End.
б) можно использовать логическую операцию XOR (исключающее ИЛИ) (смотри таблицы 1 и
3 шага 14). Эта операция над двумя переменными в компьютере реализуется как
побитовая операция над двоичным представлением чисел. Поэтому, в частности:
Таким образом, решение может выглядеть так:
a:= a XOR b; {В переменной a a Xor b, а значение b не изменилось}
b:= a XOR b; {Значение a не изменилось, а значение b стало равно:}
{(a Xor b) Xor b = a Xor (b Xor b) = a Xor 0 = a}
a:= a XOR b; {Значение b не изменилось, а значение a стало равно:}
{(a Xor b) Xor a = b Xor (a Xor a) = b Xor 0 = b}
Program Obm2; Var a, b:Integer; Begin Write('Задайте два целых числа: '); ReadLn(a,b); WriteLn('Значения переменных до обмена.'); WriteLn('a=',a,' b=',b); {Произведем обмен значений переменных.} a:=a xor b; b:=a xor b; a:=a xor b; WriteLn('Значения переменных после обмена.'); WriteLn('a=',a,' b=',b); End.
Надеемся, что вы получили представление о том, как создаются линейные программы.
Следующий шаг будет посвящен созданию разветвляющихся программ.