1. ТЕМАТИКА КУРСОВЫХ РАБОТ
Курсовая работа студента – заключительный этап изучения определенной
дисциплины. Цель работы – систематизация и закрепление теоретических знаний,
полученных за время обучения, а также приобретение и закрепление навыков
самостоятельной работы. Работа, как правило, основывается на обобщении
выполненных студентом лабораторных работ или представляет собой
индивидуальное задание по изучаемой дисциплине и подготавливается к защите в завершающий период теоретического обучения.
Тематика курсовых работ по дисциплинам определяется преподавателем кафедры. При этом выбор основывается как на государственном стандарте, так и на направлениях научно-исследовательской и учебно-методической работы, актуальных направлениях работы других организаций, деятельность которых связана с разработкой математического, информационного и программного обеспечения ЭВМ. Студенту предоставляется право выбора одной из предложенных тем или предложения своей темы с обоснованием целесообразности ее разработки.
Курсовая работа должна быть подготовлена к защите в срок, устанавливаемый преподавателем. К защите курсовой работы представляется:
- пояснительная записка;
- электронная реализация в виде программы и данных.
Пояснительная записка содержит основной текст (собственно работа), графические материалы (иллюстрации) и, при необходимости, приложения – разработанную программу с исходным текстом на бумажном и/или дисковом носителе, исходные данные и результаты расчетов, алгоритмы, модели, структуры.
Пояснительная записка включает следующие компоненты:
- титульный лист;
- задание на курсовую работу;
- оглавление, включающее наименование всех разделов и пунктов с указанием номеров страниц;
- введение, в котором обосновывается актуальность темы, указываются цель и задачи исследований;
- теоретическую часть, в которой обосновывается выбранный метод решения или модель и полученные закономерности или содержатся описания примененных в работе алгоритмов, структур данных;
- исследовательскую часть, содержащую структуры и исходные данные, полученные результаты (исследования) и их анализ;
- заключение с краткими выводами по результатам работы и предложениями по их использованию;
- список литературы.
2. ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ РАБОТЫ
Курсовые работы могут выполняться как на выпускающей кафедре, так и в других организациях. Используются фонды университетской и городских библиотек, компьютерная техника вычислительного центра и кафедры. Выполнение курсовой работы студента производится во время завершающего этапа теоретического обучения дисциплины и базируется на обобщении ранее выполненных работ.Руководитель работы выдает задание студенту, оказывает помощь в разработке календарного плана выполнения работы, проводит регулярные консультации, контролирует ход выполнения работы. Ответственность за выбор того или иного решения, правильность расчетов, оформление работы несет студент. Руководитель предостерегает его от ошибочных решений и характеризует достоинства и недостатки различных вариантов решений, при этом право окончательного выбора предоставляется студенту. Если в процессе работы руководитель убеждается в невозможности ее качественного и своевременного выполнения студентом, он может поставить вопрос о прекращении работы.
Последовательность выполнения включает следующие этапы:
- уточнение задания с преподавателем;
- анализ теоретических источников;
- выбор методов, моделей, структур и их обоснование;
- определение наборов исходных данных и алгоритмов их обработки;
- решение поставленной задачи на компьютере и получение результатов;
- анализ полученных результатов;
- оформление пояснительной записки.
Периодический контроль за работой студента осуществляется руководителем в процессе проведения консультаций.
Отчет работе должен содержать следующие разделы:
задание по лабораторной работе;
описание выбранной хэш-функции;
схемы организации таблиц идентификаторов (в соответствии с вариантом задания);
описание алгоритмов поиска в таблицах идентификаторов (в соответствии с вариантом задания);
текст программы (оформляется после выполнения программы на ЭВМ);
результаты обработки заданного набора идентификаторов (входного файла) с помощью методов организации таблиц идентификаторов, указанных в варианте задания;
анализ эффективности используемых методов организации таблиц идентификаторов и выводы по проделанной работе.
описание КС - грамматики входного языка в форме Бэкуса-Наура.
описание алгоритма работы сканера или граф переходов КА для распознавания цепочек (в соответствии с вариантом задания).
текст программы (оформляется после выполнения программы на ЭВМ).
выводы по проделанной работе.
3. ОФОРМЛЕНИЕ РАБОТЫ
Текст работы оформляется в виде пояснительной записки в соответствии с требованиями ГОСТ 2.105.95 “Общие требования к текстовым документам” в объеме 8-40 страниц формата А4. Изложение должно быть последовательным, логичным, конкретным.Работа оформляется с использованием текстового редактора Word и распечатывается на принтере. Текст пояснительной записки к курсовой работе делится на разделы, подразделы и пункты. Размещение текста – с одной стороны листа. Размер шрифта – 14, поля слева – 30 мм, сверху и справа – по 15 мм, снизу – 20 мм. Нумерация страниц – внизу по середине. Первая страница – титульный лист, вторая – задание, далее – оглавление и текст (номера первых двух страниц не указываются). Оглавление создается автоматически средствами текстового редактора.
Для вставки формул используется редактор формул Microsoft Equation (описание его работы – см., например, в книге Р.Борланд. Эффективная работа с Microsoft Word 97). Формулы нумеруются в пределах каждого раздела, номер указывается справа от формулы – у правой границы текста, в круглых скобках по образцу (3.6) – шестая формула в третьем разделе.
Для создания иллюстраций используются графические редакторы или средства графики математических и статистических пакетов. Таблицы могут быть созданы непосредственно в текстовом редакторе или вставлены из прикладной программы. Таблицы и рисунки должны быть пронумерованы и подписаны.
Ссылки на литературные источники указываются в квадратных скобках; при ссылке на информацию, полученную в Internet, указывается соответствующий электронный адрес. Список литературы, использованной при выполнении работы, приводится в конце текста.
4. ПОДГОТОВКА КУРСОВОЙ РАБОТЫ К ЗАЩИТЕ
Оформленная курсовая работа представляется студентом преподавателю для просмотра в соответствии с учебным планом за 2-3 дня до защиты.График защиты курсовых работ составляется преподавателем и доводится до сведения студентов. При необходимости демонстрации программных продуктов защита назначается в компьютерных классах, где есть необходимое программное обеспечение.
Во время защиты курсовой работы студент должен кратко сформулировать цель работы, изложить содержание, акцентируя внимание на наиболее важных и интересных с его точки зрения решениях, в первую очередь, принятых студентом самостоятельно. При выступлении может быть использована демонстрация созданного программного обеспечения.
Результаты работы оцениваются с учетом качества ее выполнения и ответов на вопросы по четырехбалльной системе (отлично, хорошо, удовлетворительно, неудовлетворительно).
При неудовлетворительной оценке работы преподаватель устанавливает, может ли студент представить к повторной защите ту же работу с необходимой доработкой или должен разработать новую тему. Студент, не сдавший в установленный срок курсовую работу, не допускается к сессии.
Защищенные курсовые работы хранятся в университете в течение трех лет.
5. ТИПОВЫЕ ЗАДАНИЯ ДЛЯ КУРСОВЫХ РАБОТ
Курсовая работа состоит из двух заданий – первое задание состоит в разработке программы на языке Assembler в эмуляторе микропроцессора - emu8086, а второе в разработке лексического анализатора для конкретного варианта входного языка.Задание № 1 Циклические конструкции в языке Assembler Цель: изучение реализации циклических конструкций в языке Assembler.
Стартовое окно эмулятора emu8086 выглядит следующим образом (рис. 1). При запуске выбирается пункт new. Далее в следующем окне (рис. 2) нажимаем cancel. Далее в открывшемся окне набирается программа на языке Assembler (рис.3). После запуска программы появляется эмулятор микропроцессора, где видны регистры и их значения. Значения в регистры заносятся в шестнадцатеричной системе счисления. Управляя значениями в регистрах микропроцессора, поучаем необходимый результат также в регистре микропроцессора. Следует иметь в виду что результат всегда получается в регистре AX, поэтому нужно вовремя сохранять промежуточный результат в других регистрах BX, CX, DX.
1. Регистры Помимо ячеек в оперативной памяти для хранения (кратковременного) данных можно использовать регистры – ячейки, расположенные в центральном процессоре. Доступ к регистрам осуществляется намного быстрее, чем доступ к ячейкам памяти, следовательно, используя регистры, возможно существенно увеличить скорость работы программы.
Все регистры имеют размер слова (16 разрядов); за каждым из них закреплено определенное имя. По назначению и способу использования регистры можно разбить на следующие группы:
Регистры общего назначения К этой группе относятся 8 регистров:
Особенностью всех этих регистров является то, что их можно использовать в любых арифметических, логических и других машинных операциях. В то же время каждый из этих регистров имеет определенную специализацию: некоторые команды требуют, чтобы их операнд или операнды обязательно находились в определенных регистрах.
В регистрах AX, BX, CX и DX возможен независимый доступ к их старший (High – выше, старший) и младший (Low – ниже, младший) половинам. Можно сказать, что каждый из этих регистров состоит из двух байтовых регистров. Например, с регистром AX можно работать так:
записать в него слово (16 битов), затем считать только левую половину этого слова (байт из AH), не считывая правую половину, далее можно сделать запись только в AL, не меняя AH.
Сегментные регистры Всего 4 регистра:
Ни в каких арифметических, логических и других операциях эти регистры не могут участвовать. Можно только записывать в них и считывать из них, да и то здесь есть определенные ограничения.
Эти регистры используются для сегментирования адресов, которое является разновидностью модификации адресов и которое используется для сокращения размера команд.
Регистр флагов В ПК имеется регистр флагов. Флаг – это бит, принимающий значение 1 («флаг установлен»), если выполнено некоторое условие, и значение 0 («флаг сброшен») в противном случае. В ПК используется 9 флагов, причем инструктивно они собраны в один 16 – разрядный регистр. Каждый флаг – это один из разрядов данного регистра:
ODI TSZ A
Некоторые флаги принято называть флагами условий; они автоматически меняются при выполнении команд и фиксируют те или иные свойства их результата; проверка этих флагов позволяет проанализировать результаты команд. Другие флаги называются флагами состояний;сами по себе они не меняются, и менять их должна программа; состояние этих флагов оказывает влияние на дальнейшее поведение процессора.
Флаги условии:
CF - Флаг переноса. Он наиболее полезен в арифметических операциях над числами без знака.
Например, если результат арифметической операции не помещается в отведенную ячейку, CF=1, иначе CF=0.
OF - Флаг переполнения. Этот флаг наиболее полезен в арифметических операциях со знаком.
Получает значение 1, если в результате операции произошло переполнение мантиссы.
ZF - Флаг нуля. ZF=1, если результат команды оказался нулевым.
SF - Флаг знака. Устанавливается в 1, если в операции над знаковыми числами получился определенный результат.
PF - Флаг четности. Он равен 1, если в 8 младших битах результата очередной команды содержится четное количество двоичных единиц. Учитывается обычно только в операциях вводавывода.
AF - Флаг дополнительного переноса. Фиксирует особенности выполнения операции над двоично-десятичными числами.
Флаги состояний:
DF - Флаг направления. Устанавливает направление просмотра строк в строковых командах;
при DF=0 строки просматриваются «вперед» (от начала к концу), при DF=1 – в обратном направлении.
IF – Флаг прерываний. При IF=0 процессор перестает реагировать на поступающие к нему прерывания, а при IF=1 блокировка прерывании снимается.
TF – Флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание, чем можно воспользоваться при отладке программы – для ее трассировки.
Реализация циклов С помощью команд перехода можно реализовать любые разветвляющиеся и циклические алгоритмы. Ниже приведены примеры, в которых S, S1 и S2 - какие-то операторы, а X – знаковая переменная.
На практике наиболее часто встречаются циклы с заранее известным числом повторений.
Например, пусть некоторую группу команд S (тело цикла) надо повторить N раз (N>0). Тогда на Ассемблере этот цикл можно реализовать по такой схеме:
В ПК введена специальная команда, которая объединяет в себе действие трех последних команд:
Управление циклом по счетчику: LOOP Действие этой команды можно описать так:
CX: =CX-1; IF CX0 THEN GOTO С помощью команды LOOP наш цикл запишется в следующем виде:
Однако, команда LOOP имеет ряд особенностей:
1) команда LOOP требует, чтобы в качестве счетчика цикла обязательно использовался 2) начальное значение для CX должно быть занесено до цикла, причем этому регистру надо присвоить ровно столько, сколько должен повторятся цикл (например, нельзя организовать цикл от 3 до 103) 3) поскольку команда LOOP ставится в конце цикла, тело цикла хотя бы раз обязательно выполнится. Поэтому для случая CX=0 цикл все равно выполнится хотя бы один раз.
Поэтому, если возможен вариант CX=0, то тело цикла следует обойти при CX=0 (именно для этих случаев в ПК введена команда JCXR) 4) как и команда условного перехода, команда LOOP реализует только короткий переход, поэтому расстояние от нее до начала цикла (метки L) не должно превышать 127 – байт (примерно 30 – 40 команд). Если цикл содержит больше команд, то цикл следует реализовать по-другому.
Задание.
Взять из таблицы 1 задание, соответствующее варианту. Написать программу, реализующую алгоритм решения задачи.
варианта 1. Определить, является ли число k степенью числа 3.
2. Даны два целых числа A и B (A < B). Найти сумму всех целых чисел от A до B 3. Даны два целых числа A и B (A < B). Найти произведение всех целых чисел от A до 4. Дано вещественное число A и целое число N (> 0). Найти A в степени N 5. Дано целое число N (> 1). Найти наименьшее целое число K, при котором 6. Найти произведение двузначных нечетных чисел, кратных 13.
8. Определить, является ли число k степенью числа 2.
Вычислить j + i, 0< m, n, =, десятичные числа с плавающей точкой (в обычной и логарифмической форме), знак присваивания (:я).
4. Входной язык содержит операторы цикла типа for (...;...;...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения, -, десятичные числа с плавающей точкой (в обычной и логарифмической форме), знак присваивания (:=).
5. Входной язык содержит арифметические выражения, разделенные символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, римских чисел, знака присваивания (:~), знаков операций +, -, *, / и круглых скобок.
6. Входной язык содержит логические выражения, разделенные символом; (точка с запятой).
Логические выражения состоят из идентификаторов, констант 0 и 1, знака присваивания (:~), знаков операций or, xor, and, not и круглых скобок.
7. Входной язык содержит операторы условия типа if... then... else и if... then, разделенные символом; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения, =, римские числа, знак присваивания (:=).
8. Входной язык содержит операторы цикла типа for (...;...;...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения, =, римские числа, знак присваивания (:=).
9. Входной язык содержит арифметические выражения, разделенные символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, шестнадцатеричных чисел, знака присваивания (:=), знаков операций +, -, *, / и круглых скобок.
10. Входной язык содержит логические выражения, разделенные символом; (точка с запятой).
Логические выражения состоят из идентификаторов, шестнадцатеричных чисел, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок.
11. Входной язык содержит операторы условия типа if... then... else и if... then, разделенные символом; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения, -, шестнадцатеричные числа, знак присваивания (:=*).
12. Входной язык содержит операторы цикла типа for (...;.,.;...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения, -, шестнадцатеричные числа, знак присваивания (:=•).
13. Входной язык содержит арифметические выражения, разделенные символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, символьных констант (один символ в одинарных кавычках), знака присваивания (:-), знаков операций +, -, *, / и круглых скобок.
14. Входной язык содержит логические выражения, разделенные символом; (точка с запятой).
Логические выражения состоят из идентификаторов, символьных констант ‘Т’ и ‘F’, знака присваивания (:=), знаков операций or, хог, and, not и круглых скобок.
15. Входной язык содержит операторы условия типа if... then... else и if... then, разделенные символом; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения, =, строковые константы (последовательность символов в двойных кавычках), знак присваивания (:=).
16. Входной язык содержит операторы цикла типа for (...;...;...) do, разделенные символом ;
(точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения, =, строковые константы (последовательность символов в двойных кавычках), знак присваивания (:=).
6. ОСНОВНЫЕ КОНТРОЛЬНЫЕ ВОПРОСЫ.
1. Как можно организовать циклы в ассемблере?2. Какой регистр в ассемблере используется как «счетчик» цикла?
3. Для чего используется оператор Loop?
4. Какими командами можно заменить оператор Loop?
5. Что такое трансляция, компиляция, транслятор, компилятор?
6. Из каких процессов состоит компиляция? Расскажите об общей структуре компилятора.
7. Какую роль выполняет лексический анализ в процессе компиляции?
8. Что такое лексема? Расскажите, какие типы лексем существуют в языках программирования.
9. Как могут быть связаны между собой лексический и синтаксический анализ?
10. Какие проблемы могут возникать при определении границ лексем в процессе лексического анализа? Как решаются эти проблемы?
11. Что такое таблица лексем? Какая информация хранится в таблице лексем?
12. В чем разница между таблицей лексем и таблицей идентификаторов?
13. Что такое грамматика? Дайте определения грамматики. Как выглядит описание грамматики в форме Бэкуса-Наура.
14. Какие классы грамматик существуют? Что такое регулярные грамматики?
15. Что такое конечный автомат? Дайте определение детерминированного и недетерминированного конечных автоматов.
16. Опишите алгоритм преобразования недетерминированного конечного автомата в детерминированный.
17. Какие проблемы необходимо решить при построении сканера на основе конечного автомата?
18. Объясните общий алгоритм функционирования лексического анализатора.