Сложение двух чисел тривиально — достаточно поставить 1 между ними и стереть крайний правый символ у Q. Программа вычитания состоит из последовательного затирания крайних левых меток у Q и правых у P:
1. 0 - стираем левый символ у Q 2. → 3. ? 5, 4 4. Stop - стоп если затерли Q=0 5. ← 6. ? 7, 5 - цикл поиска P 7. 0 - стираем правый символ у P 8. → 9. ? 1, 8 - ищем Q
Отметим, что номер команды перехода не указывается, если переход происходит на следующую по порядку строку (для наглядности текста) . В 6-ой строке возможно зацикливание, если Q > P (вы можете добавить проверку сами)
только вам нужно сдвинуться в начало строки и учесть пустую клетку-т. е. еще один проскок каретки
Чтобы не загромождать программу, предполагаем без поверки, что x2>x1 и dx>0. Либо, x2<x1 и dx<0. В любых иных вариантах программа зациклится.
В приведенной программе описана функция для подвопроса а); прочие варианты закомментированы. Для получения других вариантов достаточно закомментировать строку y:=2*x; и снять комментарий с нужной строки.
function f(x:real):real; begin f:=2*x; { f:=x/3+9; f:=x-4; f:=x/8-6; } end;
var x,x1,x2,dx,y:real; begin Writeln('Введите начальное значение, шаг табуляции, конечное значение'); Read(x1,dx,x2); x:=x1; repeat y:=f(x); Writeln('x=',x,', y=',y); x:=x+dx until x>x2+dx/2 { +dx/2 - это защита от накопления погрешности } end.
Сомневающиеся в пользе "довеска" dx/2 в последней формуле, могут попробовать выполнить этот же контрольный пример, изменив предпоследнюю строку на более привычное until x>x2. И убедиться, что решение для х=3.3 пропадет.