М. В. Ломоносова Факультет вычислительной математики и кибернетики Руденко Т. В. Сборник задач
Вид материала | Сборник задач |
Содержание9.ЗАДАНИЯ ПРАКТИКУМА Свойства транслятора Некоторые рекомендации |
- М. В. Ломоносова Факультет вычислительной математики и кибернетики Кафедра математической, 6.81kb.
- Московский Государственный Университет им. М. В. Ломоносова. Факультет Вычислительной, 104.35kb.
- М. В. Ломоносова Факультет Вычислительной Математики и Кибернетики Реферат, 170.54kb.
- И кибернетики факультет вычислительной математики и кибернетики, 138.38kb.
- М. В. Ломоносова факультет Вычислительной Математики и Кибернетики Диплом, 49.56kb.
- М. В. Ломоносова факультет Вычислительной математики и кибернетики Кафедра «Математических, 39.24kb.
- Московский государственный университет имени М. В. Ломоносова Факультет вычислительной, 20.76kb.
- М. В. Ломоносова Факультет вычислительной математики и кибернетики В. Г. Баула Введение, 4107.66kb.
- М. В. Ломоносова факультет вычислительной математики и кибернетики программа, 48.83kb.
- М. В. Ломоносова Факультет вычислительной математики и кибернетики программа, 83.39kb.
9.ЗАДАНИЯ ПРАКТИКУМА
Свойства транслятора
1. Выяснить, сколько байт отведено для хранения данных типа short, int, long, float, double и long double.
2. Выяснить способ представления типа char: signed- или unsigned- вариант.
3. Проконтролировать, все ли способы записи констант допустимы:
- целых (обычная форма записи, u/U, l/L, их комбинации, восьмеричная и шестнадцатиричная системы счисления )
- вещественных (обычная форма записи, в экспоненциальном виде, f/F, l/L, e/E )
- символьных и строковых (в частности, происходит ли конкатенация рядом расположенных строковых констант )
4. Выяснить, как упорядочены коды символов '0'-'9', 'a'-'z', 'A'- 'Z', пробел (между собой и относительно друг друга ).
5. Проверить наличие и качество диагностических сообщений при неверной записи констант:
- целых и вещественных
- символьных и строковых
6. Проконтролировать, допускается ли инициализация переменных при описании; происходит ли инициализация по умолчанию.
7. Проверить, реагирует ли компилятор на попытку изменить константу (внешнюю, автоматическую, статическую; арифметических типов, строковую).
8. Исследовать особенности выполнения операции % с отрицательными операндами.
9. Проверьте, действительно ли операции отношения == и != имеют более низкий приоритет, чем все другие операции отношения.
10. Проверьте, выполняется ли правило "ленивых вычислений" выражений в Си, т.е. прекращается ли вычисление выражений с логическими операциями, если возможно "досрочно" установить значение результата.
11. Проверьте, все ли виды операнда операции sizeof, определяемые стандартом для арифметических типов, допускаются компилятором; действительно ли аргумент-выражение не вычисляется.
12. Определите, каким образом "малое" целое расширяется до int (старшие разряды int заполняются нулями или знаковым разрядом "малого" целого ).
13. Определите, каким образом расширяются unsigned- варианты "малых" целых ( до unsigned int как в "классическом" Си или сначала делается попытка расширить до int, и только в случае неудачи - до unsigned int ).
14. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование знаковых целых
(M-битовое представление ) к знаковым целым (N-битовое представление ) при M > N, M = N, M < N.
15. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование беззнаковых целых
(M-битовое представление ) к знаковым целым (N-битовое представление ) при M > N, M = N, M < N.
16. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование вещественных чисел ( X ) к знаковым целым ( N-битовое представление ) при | X | < 2N-1, | X | >= 2N-1.
17. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование знаковых целых X
(M-битовое представление ) к беззнаковым целым ( N-битовое представление ) при M > N, M = N, M < N; X >= 0, X < 0.
18. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование беззнаковых целых
(M-битовое представление ) к беззнаковым целым ( N-битовое представление ) при M > N, M = N, M < N.
19. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование вещественных чисел ( X ) к беззнаковым целым (N-битовое представление ) при 0<=X< 2N, X < 0, X >= 2N.
Калькулятор
Калькулятор – это программа, вычисляющая значения выражений, вводимых с клавиатуры. Ввод выражений и значений переменных, входящих в выражение, осуществляется по запросу программы.
Требуется контролировать правильность записи выражений. Минимальный набор диагностических сообщений:
- нарушен баланс скобок ( с указанием – открывающих / закрывающих)
- отсутствует операнд
- пропущена операция
- недопустимая операция
- неверный операнд (ошибочно записана константа или имя переменной).
Выражение содержит знаки операций +, - ,, / ; круглые скобки без ограничения уровней вложенности; операнды – константы (целые и вещественные) и переменные. Имя переменной – идентификатор, его максимальная длина – 6 символов; в вещественных константах порядок не используется, т.е. числа имеют вид целая_часть.дробная_часть, где либо одно, либо другое может быть опущено. Целочисленные константы записываются в десятичной форме (восьмеричное и шестнадцатиричное представление не используется).
Старшинство операций и правила приведения типов аналогичны правилам Си. Тип переменной определяется по виду константы – инициализатора.
Некоторые рекомендации:
- если синтаксический анализ реализован методом рекурсивного спуска, то для выхода из «глубокой» рекурсии удобны функции setjmp и longjmp.
- в функции метода рекурсивного спуска можно вставить действия по переводу анализируемого выражения в польскую инверсную запись (ПОЛИЗ). Это позволит за один просмотр провести анализ исходного выражения и генерацию его польской записи; при использовании алгоритма Дейкстры может потребоваться еще один просмотр.
- выражения в ПОЛИЗе можно интерпретировать многократно при разных значениях переменных (если пользователь потребует этого в процессе диалога).
- таблицу переменных удобно представлять с использованием объединений, т.к. для переменных разных типов придется хранить значения типа int и типа double.
Приведенный здесь вариант калькулятора можно упростить: реализовать только целочисленную либо только вещественную арифметику.