Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Варианты 2010.doc
Скачиваний:
3
Добавлен:
28.08.2019
Размер:
141.31 Кб
Скачать

Вариант 3 Разработка программы "Интерпретатор выражений алгебры комплексных чисел"

Программа-интерпретатор получает на вход текстовый файл (в формате ASCII или ANSI) с текстом программы. На выходе – выводит на экран результаты вычислений, определяемых программистом. Если входная программа содержит ошибку – сообщение о типе ошибки.

Интерпретатор должен воспринимать и обрабатывать следующие инструкции:

а) объявление переменной с одновременным присвоением ей начального значения

ИмяПеременной = значение или ИмяПеременной = выражение

Значение переменной задается комплексным числом, состоящим из действительной и мнимой части. Они записываются как вещественные числа в десятичной системе счисления. Перед мнимой частью ставится буква j. Например, X=1.5–j0.8

Выражения записываются по правилам, определенным п.(в). Например, F=X+j17

б) вывод результатов на экран

PRINT( ИмяПеременной ) или PRINT ( выражение )

Например, PRINT(X) и PRINT(X+F)

в) Операндами выражения могут быть комплексные числа и имена объявленных ранее переменных. В выражении допускаются следующие операции и встроенные функции:

+ сумма;

– разность, унарный минус;

* произведение;

/ частное;

|…| модуль числа;

RE(…) действительная часть числа;

IM(…) мнимая часть числа

j умножение на мнимую единицу.

Порядок выполнения операций может регулироваться скобками ( ).

Инструкции в тексте программы разделяются точкой с запятой, либо каждая инструкция – с новой строки (вам на выбор).

Вариант 4 Разработка программы "Транслятор выражений в обратную польскую запись"

Программа получает на вход строку с арифметическим выражением. Операндами выражения являются вещественные числа и целые числа в десятичной системе счисления. На выходе формирует строку, содержащую эквивалентное выражение в обратной польской записи.

Обратная польская запись (ПОЛИЗ – ПОЛьская Инверсная Запись), в отличие от обычной инфиксной, когда знак операции помещается перед операндом, переносит знак операции после операндов (выражение 8+9 в ПОЛИЗ будет записано 89+ ). Вычисления с помощью ПОЛИЗ выполняются так: выражение просматривается слева направо. Как только находится знак (бинарной) операции, эта операция выполняется над двумя предыдущими операндами, и эти три элемента (два операнда и знак) заменяются на один – результат. Унарная операция (унарный минус, модуль и пр.) выполняется над одним, предшествующим знаку, числом. Для обозначения бинарного и унарного минуса следует использовать разные символы.

Пример записи выражений в ПОЛИЗ:

инфиксная: (2+7*5)/6-(4+9), ПОЛИЗ: 275*+6/49+–

При переводе в ПОЛИЗ порядок следования чисел-операндов остается тем же, а меняется порядок следования знаков операций.

Входное выражение должно содержать операции: унарные: минус, модуль; бинарные: – + * / , возведение в степень. Приоритет операций можно регулировать скобками ().

Вариант 5 Разработка программы-интерпретатора специализированного языка программирования для операций над массивами

Программа получает на вход файл с текстом программы на специальном «новом» языке программирования, ориентированном на обработку сортированных массивов чисел. Если в тексте программы нет грамматических, синтаксических и смысловых ошибок, интерпретатор исполняет команды по шагам и выводит результат на экран.

Язык программирования поддерживает следующие типы данных:

Скалярный тип – целое 4-байтовое число со знаком,

Массив 4-байтовых чисел со знаком, упорядоченных по возрастанию. Массив динамический, объем занимаемой памяти зависит от наполнения массива.

Программа может содержать следующие команды:

1) Объявление переменных с присвоением начального значения:

-скалярного типа:

ИмяПеременной = число или скалярное_выражение;

- массива

ИмяПеременной[] = { список значений элементов через запятую};

Список значений можно не указывать – создается пустой массив. Если список не пуст, то длина массива равна числу элементов в списке. В качестве значения элемента можно указывать: число, имя скалярной переменной, или скалярное выражение.

Скалярное выражение дает в результате вычисления число. Выражение может содержать знаки операций: + – * / (целочисленное деление) % (остаток от деления). Операндами скалярного выражения могут быть числа, имена скалярных переменных, элементы массивов ИмяМассива[скалярное выражение задающее индекс].

2) Присваивание нового значения

- скалярной переменной: аналогично команде объявления переменной (п.1), если её имя уже встречалось ранее.

- конкретному элементу массива

ИмяМассива[скалярное выражение задающее индекс] = число или скалярное выражение;

Выражение составляется по правилам из п.1. Индексы отсчитываются от 0.

При выполнении этой команды должна генерироваться ошибка времени исполнения, если индекс превышает реальную длину массива.

- массиву

ИмяМассива[] = выражение для массива;

Выражение для массива дает в результате вычисления новый массив. Оно может содержать знаки операций: + (добавить в массив) и – (исключить из массива). Операндами являются скалярные переменные, элементы массивов ИмяМассива[выражение задающее индекс], имена массивов, массивы-литералы, объявленные в виде {список элементов через запятую}, и подмассивы, объявленные в виде: ИмяМассива[индекс1..индекс2] – подмассив (элементы с индекса1 до индекса2, индекс может быть числом или выражением). Допускается задавать пустой массив { }.

3) Цикл прохода по всем элементам массива

FOREACH ИмяМассива[] DO последовательность команд END;

Для обращения к текущему элементу массива в теле цикла используется специальная конструкция ИмяМассива[.]

4) Вывод на экран

WRITE( данные для вывода );

Данными для вывода могут быть: число, скалярная переменная, элемент массива по индексу, скалярное выражение.

Также данными для вывода могут быть результаты выражения, возвращающего массив (см п.2). На экран выводятся все элементы массива-результата, разделенные пробелами.

Вариант 6

Разработка программы

"Интерпретатор операций над строками"

Программа-интерпретатор получает на вход текстовый файл (в формате ASCII или ANSI) с текстом программы. На выходе – выводит на экран строку-результат. Выводимая строка записывается в программе после служебного слова RESULT (см. п.(б)). Если входная программа содержит ошибку – сообщение о типе ошибки. Интерпретатор должен обрабатывать следующие инструкции (инструкции в тексте программы разделяются точкой с запятой).

а) объявление строковой переменной с одновременным присвоением ей начального значения

ИмяПеременной = "строка символов" или ИмяПеременной = выражение

В строке все символы являются значащими (пробелы, переводы строки, различаются строчные и прописные буквы и т.п.). Например, X="Abc De"

Выражения записываются по правилам, определенным п.(в). Например, Z=REP(X.Y,3)

б) присвоение результата выходной переменной

RESULT: выражение

в) операндами выражений являются строки символов, записанных в кавычках "…", и имена объявленных ранее переменных. Выражения могут содержать следующие операторы:

 конкатенация (сцепление) строк;

REP(строка, число) итерация (повторение) строки заданное число раз;

PREF(строка, число) возвращает префикс строки заданной длины;

SUF(строка, число) возвращает суффикс строки заданной длины;

LEN(строка) возвращает длину строки;

TRIM(строка, подстрока) удаляет все вхождения подстроки в строку.

Во всех операторах аргумент число задается целым числом  0, или оператором LEN(…); аргумент строка может быть задан строкой, переменной или строковым выражением.

При выполнении команд интерпретатор должен контролировать превышения максимальной длины строк и допустимые значения чисел в диапазоне от 0 до фактической длины строки.