Основы программирования на C++, PASCAL
От исходной символьной информации он должен перейти к работе с числовой информацией. Если предположить, что строка составлена только из четырех символов в соответствии с указанным форматом, то задача решается довольно просто. Вот программа такого интерпретатора:
Program Interpretator;
Var Str: String[4];
А, В: 0..9;
С: -100..100;
Begin
{ввод исходной строки}
WriteLn('Введите выражение!');
WriteLn;
Read(Str);
{преобразование цифровых символов в числа}
A:=Ord(Str[l])-Ord('0');
B:=Ord(Str[3])-Ord('0');
(выполнение арифметической операции)
Case Str[2] Of
'+': С:=А+В;
'-': С:=А-В;
'*': С:=А*В
End;
{вывод результата}
WriteLn(С:2)
End.
В этой программе появился новый для нас оператор. Он называется оператором выбора. Формат этого оператора описывается синтаксической диаграммой (рис. 33).
Здесь <селектор> — это выражение любого порядкового типа; <константа> — постоянная величина того же типа, что и селектор; <оператор> — любой простой или составной оператор.
Выполнение оператора выбора происходит так: вычисляется выражение-селектор; затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора; далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после оператора выбора.
В приведенной выше программе роль селектора играет символьная величина Str[2]. Если она равна +, то выполнится оператор c:=a+b; если равна -, то выполнится оператор с:=а-b; если равна *, выполнится оператор с:=а*b. Для любых других значений Str[2] не выполнится ни один из операторов присваивания, и значение переменной С останется неопределенным.
Приведенное выше описание оператора выбора соответствует стандарту Паскаля. В Турбо Паскале допустимо использование в операторе Case альтернативной ветви после служебного слова Else. Вот пример для той же задачи. Если мы хотим, что-. бы в случае неверного символа в Str[2] выдавалось сообщение об этом, нужно программировать так:
Case Str[2] Of
'+': С:=А+В;
'-': С:=А-В;
'*': С:=А*В
Else WriteLn("неверный знак операции')
End;
А теперь вернемся к программе interpretator и разберемся в том, как она будет выполняться.
После ввода строки цифровые символы переводятся в соответствующие десятичные числа. Затем интерпретируется знак операции. В зависимости от знака выполняется одно из трех арифметических действий. Далее результат выводится на экран после символа =.
Упражнения
1. Составить программу получения из слова «дисковод» слова «воск», используя операцию сцепления и функцию Copy.
2. Составить программу получения слова «правило» из слова «операция», используя процедуры Delete, Insert.
3. В данном слове заменить первый и последний символы на *.
4. В данном слове произвести обмен первого и последнего символов.
5. К данному слову присоединить столько !, сколько в нем имеется букв (например, из строки «УРА» получить «УРА!!!»).
6. В данной строке вставить пробел после каждого символа.
7. Удвоить все буквы во введенном слове.
8. Перевернуть введенную строку (например, из «ДИСК» получится «КСИД»).
9. В данной строке удалить все пробелы.
10. Строка представляет собой запись целого числа. Составить программу перевода ее в соответствующую величину целого типа.