- •Вариант 1 Разработка транслятора языка программирования midi- файлов
- •Вариант 3 Разработка программы "Интерпретатор выражений алгебры комплексных чисел"
- •Вариант 4 Разработка программы "Транслятор выражений в обратную польскую запись"
- •Вариант 5 Разработка программы-интерпретатора специализированного языка программирования для операций над массивами
- •Вариант 7 Разработка программы "Интерпретатор арифметики вещественных чисел"
- •Вариант 8 Разработка программы "Интерпретатор выражений булевой алгебры"
- •Вариант 9 Разработка программы "Калькулятор алгебраических матричных выражений"
- •Вариант 10 Разработка программы "Текстовый редактор с подсветкой синтаксиса"
- •Вариант 11 Разработка программы "Графический командный процессор"
- •Вариант 12 Разработка программы "Интерпретатор операций над множествами"
- •Вариант 13 Разработка программы "Командный файловый процессор"
- •Вариант 14 Разработка программы "Конвертер форматированного текста"
- •Вариант 15 Разработка программы "Интерпретатор побитовых логических операций"
- •Вариант 16 Разработка программы "Командный калькулятор арифметических выражений"
- •Вариант 17 Разработка программы-интерпретатора упрощенного языка программирования
- •Вариант 18 Разработка программы-интерпретатора упрощенного языка программирования
Вариант 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 до фактической длины строки.