Вычислить результат каждого сложения и подставить его в строку вместо знака вопроса - Free Pascal
Формулировка задачи:
Требования к выполнению задания:
нельзя использовать циклы;
нельзя использовать оператор IF;
из всего множества подпрограмм языка Паскаль надо
использовать только функции и процедуры для работы со
строками.
при выполнении работы использовать средства отладки Free
Pascal.
Задание:
Заданная строка состоит из последовательности следующихконструкций:
a1 + b1 = ?; a2 + b2 = ?;..., где ai и bi – целые числа. Вычислить результат каждого сложения и подставить его в строку вместо знака вопроса.
Решение задачи: «Вычислить результат каждого сложения и подставить его в строку вместо знака вопроса»
textual
Листинг программы
program Jesuit;
label
Ethernal, Finish;
var
s: string;
Result, TempStr: string;
i: integer;
a, b: integer;
ValResult: integer;
begin
s := '1 + 2 = ?; 11 + 22 = ?; 111 + 222 = ?; -111 + 222 = ?';
writeln(s);
Result := '';
Ethernal:
case length(s) of
0: goto Finish;
end;
Result := Result + copy(s, 1, pos('?', s) - 1);
i := pos(' ', s);
val(copy(s, 1, i - 1), a, ValResult);
Delete(s, 1, i + 2);
i := pos(' ', s);
val(copy(s, 1, i - 1), b, ValResult);
Delete(s, 1, i + 2 + 1); {удаление ' = ?'}
a := a + b;
Str(a, TempStr);
Result := Result + TempStr;
{если существует, то копирование и удаление разделителя выражений '; '}
Result := Result + copy(s, 1, 2);
Delete(s, 1, 2);
goto Ethernal;
Finish:
writeln(Result);
end.
Объяснение кода листинга программы
Список действий в коде:
- Создание переменной
sтипа строка со значением1 + 2 = ?; 11 + 22 = ?; 111 + 222 = ?; -111 + 222 = ?. - Вывод значения переменной
sв консоль. - Инициализация переменной
Resultкак пустой строки. - Проверка длины строки
s. Если длина равна 0, то переход к меткеFinish. - Копирование части строки
sс первого символа до символа '?' в переменнуюResult. - Определение позиции пробела в строке
s. - Преобразование и сохранение в переменную
aзначения первых символов до пробела в переменнойs. - Удаление символов с первого места до места, следующего за пробелом в строке
s. - Определение позиции пробела в строке
s. - Преобразование и сохранение в переменную
bзначения символов с первого места до пробела в переменнойs. - Удаление символов с первого места до места, следующего за пробелом и знаком
= ?в строкеs. - Вычисление суммы значений переменных
aиbи сохранение результата в переменнойa. - Преобразование значения переменной
aв строку и сохранение в переменнойTempStr. - Добавление значения переменной
TempStrк переменнойResult. - Если длина строки
sбольше 2, то копирование и удаление символов;из строкиs. - Вывод значения переменной
Resultв консоль. - Вход в цикл
Ethernal, начиная с шага 4. - Если длина строки
sравна 0, то переход к меткеFinish. - Копирование части строки
sс первого символа до символа '?' в переменнуюResult. - Определение позиции пробела в строке
s. - Преобразование и сохранение в переменную
aзначения первых символов до пробела в переменнойs. - Удаление символов с первого места до места, следующего за пробелом в строке
s. - Определение позиции пробела в строке
s. - Преобразование и сохранение в переменную
bзначения символов с первого места до пробела в переменнойs. - Удаление символов с первого места до места, следующего за пробесом и знаком
= ?в строкеs. - Вычисление суммы значений переменных
aиbи сохранение результата в переменнойa. - Преобразование значения переменной
aв строку и сохранение в переменнойTempStr. - Добавление значения переменной
TempStrк переменнойResult. - Если длина строки
sбольше 2, то копирование и удаление символов;из строкиs. - Вывод значения переменной
Resultв консоль. - Вход в цикл
Ethernal, начиная с шага 4.