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

UptoLike

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

49
скобках соответствующими командами робота. Начнем замену с внутренних
скобок (заменяемые части подчеркнуты). Последовательно получаем:
a·b=((((a+b)
2
-a
2
)-b
2
)/2),
умн(a,b)=((((сум(a,b))
2
-a
2
)-b
2
)/2),
умн(a,b)=(((кв(сум(a,b))-a
2
)-b
2
)/2),
умн(a,b)=(((кв(сум(a,b))-кв(a))
-b
2
)/2),
умн(a,b)=((раз(кв(сум(a,b)),кв(а))-b
2
)/2),
умн(a,b)=((раз(кв(сум(a,b)),кв(a))-кв(b))
/2),
умн(a,b)=(раз(раз(кв(сум(a,b)),кв(а)),кв(b))/2)
,
умн(a,b)=пол(раз(раз(кв(сум(a,b)),кв(а)),кв(b))/2).
Программы по формулам (2) и (3) строятся аналогично.
(2) умн(a,b)=пол(раз(кв(сум(a,b)),сум(кв(a),кв(b)))).
(3) умн(a,b)=пол(раз(сум(кв(а),кв(b)),кв(раз(a,b)))).
Для каждой программы спецификацией является та формула, по которой
строилась программа. Если программа не соответствует той
формуле, которая
представлена в качестве спецификации, то в ней скорее всего содержатся
ошибки, которые нужно найти и исправить. В данном случае это означает, что
нужно привести в соответствие спецификацию и программу. Можно, конечно,
правильной программе (2) поставить в соответствие правильную формулу (1),
но это вызовет большие недоумения в процессе эксплуатации программы и
чревато ошибками, возникающими из-за непонимания.
Пример 8.11. Написать программу для робота, вычисляющую y=|x|.
Решение.
По определению y=
если x>0, x
если x=0,
-x, если x<0.
,
,0
Сравним запись определения модуля с командой знак(а), имеющейся в
системе команд робота:
знак(а)=
+1,если x>0,
0, если x=0,
если x<0.
1,
Сравнив записи, можно заметить, что первая может быть получена
умножением команды знак(х) на x. Так можно получить новую команду:
мод(х)=умн(знак(х),х). Для решения задачи мы воспользовались не только
командами робота, но и программой, полученной в предыдущем примере.
Пример 8.12. Написать программу для робота, указывающую максимальное
из
двух заданных чисел: max(a,b).
Решение. Для нахождения максимального
значения необходимо заданные числа сравнить
между собой. Однако в системе команд робота нет
операций сравнения, кроме операции знак(а).
Узнать, на сколько одно число отличается от
другого, можно с помощью операции разность.
Чтобы такое сравнение было наглядным,
представим числа a и b в виде
отрезков, длины которых равны a и b, и нарисуем
a
├───────────────┤
├──────────┤····
b a-b
Рис. 8.1
                                       49

скобках соответствующими командами робота. Начнем замену с внутренних
скобок (заменяемые части подчеркнуты). Последовательно получаем:
    a·b=((((a+b)2-a2)-b2)/2),
    умн(a,b)=((((сум(a,b))2-a2)-b2)/2),
    умн(a,b)=(((кв(сум(a,b))-a2)-b2)/2),
    умн(a,b)=(((кв(сум(a,b))-кв(a))-b2)/2),
    умн(a,b)=((раз(кв(сум(a,b)),кв(а))-b2)/2),
    умн(a,b)=((раз(кв(сум(a,b)),кв(a))-кв(b))/2),
    умн(a,b)=(раз(раз(кв(сум(a,b)),кв(а)),кв(b))/2),
    умн(a,b)=пол(раз(раз(кв(сум(a,b)),кв(а)),кв(b))/2).
    Программы по формулам (2) и (3) строятся аналогично.
    (2) умн(a,b)=пол(раз(кв(сум(a,b)),сум(кв(a),кв(b)))).
    (3) умн(a,b)=пол(раз(сум(кв(а),кв(b)),кв(раз(a,b)))).
    Для каждой программы спецификацией является та формула, по которой
строилась программа. Если программа не соответствует той формуле, которая
представлена в качестве спецификации, то в ней скорее всего содержатся
ошибки, которые нужно найти и исправить. В данном случае это означает, что
нужно привести в соответствие спецификацию и программу. Можно, конечно,
правильной программе (2) поставить в соответствие правильную формулу (1),
но это вызовет большие недоумения в процессе эксплуатации программы и
чревато ошибками, возникающими из-за непонимания.
    Пример 8.11. Написать программу для робота, вычисляющую y=|x|.
                                      ⎧ x, если x > 0,
                                      ⎪
    Решение. По определению y = ⎨ 0, если x = 0,
                                      ⎪
                                      ⎩- x, если x < 0.
    Сравним запись определения модуля с командой знак(а), имеющейся в
системе команд робота:
              ⎧+ 1, если x > 0,
              ⎪
    знак(а) = ⎨0, если x = 0,
              ⎪
              ⎩− 1, если x < 0.
    Сравнив записи, можно заметить, что первая может быть получена
умножением команды знак(х) на x. Так можно получить новую команду:
мод(х)=умн(знак(х),х). Для решения задачи мы воспользовались не только
командами робота, но и программой, полученной в предыдущем примере.
    Пример 8.12. Написать программу для робота, указывающую максимальное
из двух заданных чисел: max(a,b).
    Решение. Для нахождения максимального                    a
значения необходимо заданные числа сравнить ├───────────────┤
между собой. Однако в системе команд робота нет
операций сравнения, кроме операции знак(а). ├──────────┤····│
Узнать, на сколько одно число отличается от               b          │a-b│
другого, можно с помощью операции разность.               Рис. 8.1
Чтобы      такое     сравнение     было      наглядным,
представим числа a и b в виде отрезков, длины которых равны a и b, и нарисуем