Дана программа для исполнителя Редактор: НАЧАЛО
ПОКА нашлось (63) ИЛИ нашлось (664) ИЛИ нашлось (6665)
ЕСЛИ нашлось (63) ТО заменить (63, 4)
ИНАЧЕ
ЕСЛИ нашлось (664) ТО заменить (664, 5)
ИНАЧЕ
ЕСЛИ нашлось (6665) ТО заменить (6665, 3) КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, в
которой первая и последняя цифры – 4, а между ними стоит 125 цифр 6? В ответе запишите
полученную строку.
// Внимание! Если программа не работает, обновите версию!
function Res(a:integer;op:char;b:integer):integer;
begin
case op of
'+':Result:=a+b;
'-':Result:=a-b;
'*':Result:=a*b;
'/':Result:=a div b
end
end;
begin
var s:=ReadlnString('Вводите:');
var p:=s.Matches('(((\-)?\d+)|[\+\-\*\/])').ToArray;
if p.Count<>5 then Writeln('Ошибка!')
else begin
var op1:=p[1].Value[1];
var op2:=p[3].Value[1];
var a:=p[0].Value.ToInteger;
var b:=p[2].Value.ToInteger;
var c:=p[4].Value.ToInteger;
if (op1 in ['+','-']) and (op2 in ['*','/']) then
Writeln('='+Res(Res(b,op2,c),op1,a))
else Writeln('='+Res(Res(a,op1,b),op2,c))
end
end.
Примеры
Вводите: -4--3--2
=1
Вводите: 12*3+45
=81
Вводите: 45+12*3
=81
Вводите: -26/13--5
=3
Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Пример работы: