2. Динамический массив указателей на структуры.

advertisement
Курсовые работы и проекты
Требования к выполнению курсовой работы и содержанию
пояснительной записки
Требования к содержанию и тестированию программы.
1. Программа должна быть проверена на входных данных различной
размерности, например, на файлах различного размера. Необходимо
фиксировать время выполнения программы, а также количество основных
операций, например, сравнения. Строятся графики зависимостей этих
параметров от характеристик файла (количество слов, размер).
Производится оценка вида полученной зависимости (квадратичная,
линейно-логирифмическая).
2. Программа должна отображать текущее состояние структуры данных, ее
основные ее характеристики – количество элементов, процент их
заполнения, разброс (минимальное и максимальное значение), время
выполнения последней операции и т.п..
Требования к оформлению пояснительной записки:

текст
должен
структурирован;

основной текст – Times New Roman, шрифт 12;

фрагменты программ – Arial или Courier. Текст программ должен
быть отформатирован в соответствии с синтаксической структурой
(вложенность фрагментов), иметь одинарный интервал между
стоками (плотный текст);

текст программы не должен содержать грамматических ошибок.
быть
единообразно
отформатирован
и
При невыполнении указанных требований записка возвращается на
доработку.
Содержание пояснительной записки:
1. Задание.
2. Структурное описание разработки должно быть выполнено виде
связного структурированного текста и давать разностороннее
представление о программе: какие основные решения приняты при
разработке, как работает программа, какие данные являются
статическими, какие – динамическими и т.д.. Должны быть
упомянуты особенности алгоритмов и дано их содержательное
описание. Необходимо использовать структурные схемы и рисунки.
Особенно это касается того, что не может быть наблюдаемо
непосредственно в тексте программы:

основные компоненты и связи между ними;
 форматы входных и выходных данных, форматы внутренних
структур данных;
 содержательное описание алгоритмов работы на уровне компонент,
связей и форматов данных.
3. Функциональное описание. Содержательное описание типов данных,
переменных,
интерфейсов
функций,
классов,
фрагментов
нетривиальных алгоритмов. Для описания рекомендуется использовать
смешанное словесно/формальное представление программы с
включением этих элементов в связный текст изложения материала.
4. Описание работы программы на контрольных примерах. Результаты
измерений времени работы программы и количества основных
операций для входных файлов различной размерности (не менее 4).
Графики и оценка вида полученных зависимостей. Выводы.
Ограничения (по памяти, по времени), ошибки, особенности
проектирования.
5. Приложение: исходный текст программы с комментариями по
существу алгоритма и структур данных.
В пояснительной записке структурное описание разработки должно давать
представление о том, какие основные решения приняты при разработке, как
работает программа, какие данные являются статическими, какие –
динамическими, должны быть упомянуты
особенности
алгоритмов.
Структурное описание – словесное, с привлечением графических иллюстраций
(схем, рисунков), фрагментов оригинальных алгоритмов и структур данных.
Критерии оценки и процедура защиты
Для каждой группы вариантов устанавливается средний (начальный)
уровень оценки, определяемый сложностью задания для данной дисциплины и
семестра. При идеальном выполнении задания она может быть повышена, но не
более, чем на балл.
Защита курсовой работы происходит в форме собеседования с вопросами
как по пояснительной записке, так и по тексту программы. При желании можно
получить предварительную консультацию по проблемам программирования или
оформления пояснительной записки (при наличии соответствующих черновых
материалов). Пояснительная записка сдается в виде оформленного документа
(файл и твердая копия (без приложения)). Сдается также исходный текст
программы.
Варианты заданий
Варианты заданий
1. Графика и анимация
1. Программа рисования графиков функций 2 переменных в виде
поверхности, образованной линиями, параллельными осям x и y.
2. По экрану движется вращающийся куб, изображаемый в виде граней.
Вариант: управление вращением с клавиатуры.
3. По экрану движется вращающийся квадрат, отскакивая от границ экрана,
в момент отскока скорость вращения возрастает, с течением времени –
уменьшается.
4. Падающий текст. Из текстового файла читаются символы, которые
«сыплются» с правого верхнего угла экрана. Начальная скорость
варьируется в некоторых пределах. Символы «отскакивают» от нижнего
края экрана (неупругое соударение).
5. «Насекомое и лампочка». Насекомое летит на источник света таким
образом, чтобы угол между источником и направлением вектора скорости
был постоянным, т.е. по спирали. Ударяясь о поверхность лампочки,
переходи в режим свободного падения с сохранением горизонтальной
составляющей скорости при ударе (отскок от поверхности). Насекомые
появляются со случайными начальными точками и скоростями.
6. «Реальный маятник». В маятнике, закрепленном на жесткой оси,
составляющая силы тяжести, вызывающая угловое ускорение
равна F0*sin(fi),
при
малых fi≈sin(fi) –
маятник
становится
математическим. Изобразить график колебаний маятника y(t).
7. «Грузик» раскачивается и колеблется на пружине. Имеется начальное
отклонение грузика от R-R0 – от исходного размера пружины и угол
поворота fi. На грузик действуют сила сжатия/растяжения пружины и сила
тяжести (проекция m*g*sin(fi) вызывает угловое ускорение m*g*cos(fi)
– складывается с силой сжатия/растяжения. Изобразить траекторию
движения.
8. «Шарики в силовом поле». Шарики движутся по поверхности экрана,
отталкиваясь от стенок. На каждую пару шариков действует сила
притяжения вида k/R2-k/R02 , т.е. начиная с R0притяжение сменяется на
отталкивание. (Варианты: 2 шарика, произвольное количество шариков).
9. «Кипящий суп». На дне кастрюли возникают пузырьки, которые
всплывают, увеличиваясь в размере. Усложнение: интенсивность
появления пузырьков зависит от температуры «дна»T (регулируется) и
температуры «воды» (интегрирует разницу T-T0).
10. «Рыбки в аквариуме» плавают, пуская воздушные пузыри.
11. «Светофор».
12. «Шагающий человечек».
13. «Снегопад» - случайным образом падают «снежинки», образуя сугробы по
всем поверхностям картинки.
14. «Салют». Движущиеся шарики, увеличивающиеся в размере. Шарики
«лопаются», создавая множество мелких, разлетающихся в разные стороны
и исчезающих.
15. Анимация сортировок с использованием графической библиотеки.
Значение отображается в виде шарика – десятки соответствуют диаметру,
единицы – цвету.
16. Анимация обработки строки с использованием графической библиотеки.
Символы строки должны изображаться «неровно» (положение, размер) и
двигаться неравномерно или с «дрожанием».
Примечание: при работы в оконных приложениях в можно использовать не
графические объекты, а движущиеся элементы управления (например, текстовые
поля).
2. Простые структуры данных в памяти
Задана структурированная переменная со списком полей – запись
хранимой таблицы. Поля, представляющие собой строки неограниченной
размерности (например, адрес), хранятся в виде указателей на динамические
массивы. Структура данных должна быть полностью динамической и
увеличивать свою размерность при заполнении. Обязательные операции – ввод,
постраничный просмотр, удаление и редактирование, сортировка по любому
полю, сохранение и чтение из текстового файла. Основная таблица может
использовать справочные данные, которые выбирает из соответствующих
массивов указателей на строки, помещая в основную таблицу номер строки.
Справочные таблицы неизменяемого вида задаются в виде статического массива
указателей на строковые константы, изменяемые справочные таблицы
загружаются из того же файла, что и основная таблица, в динамические массивы
указателей и могут дополняться. Поля с повторяющимися значениями должны
быть реализованы в виде динамических массивов значений или списков.
Содержание записи (строки) основной таблицы
1. Список студентов факультета. Основная таблица: Фамилия, дата
рождения, дата поступления, дата отчисления, адрес, группа.
Неизменяемый справочник групп. Вывод по выбранной группе.
Сортировка по фамилии. Редактирование с выбором по группе и шаблону
фамилии.
2. Доска объявлений. Категория объявления: куплю-продам, рубрика:
транспорт, недвижимость, спорт, хобби, материалы и т.д – справочник.
Текст объявления – строка (абзац) неограниченной длины, дата подачи,
контактный телефон. Подача объявления, поиск по заданной рубрике и по
шаблону искомого слова в тексте объявления. Сортировка по дате подачи .
3. Движение поездов. Номер поезда, дни недели отправления, время
отправления, время в пути (часов, минут). Станция отравления,
назначения, промежуточные станции. Все станции вводятся из
постоянного справочника. Промежуточные станции запоминаются в
динамическом массиве номеров станций. Поиск всех поездов, следующих
до заданной станции.
4. Учет посещаемости индивидуальных и коллективных занятий. Фамилия,
группа, динамический массив дат посещения занятий. Изменяемый
справочник групп. Операции добавления даты посещения для выбранного
слушателя и для выбранной группы слушателей. Вывод список
посетителей по заданной дате. Добавление и удаление групп. Сортировка
по количеству посещений и по фамилии.
5. Справочник склада. Товар, Изменяемый (постоянный) справочник
категорий товара. Количество, дата поступления, цена и процент торговой
надбавки. Сортировка по всем параметрам. Составление фактуры: выбор
нескольких товара, количества (с уменьшением его на складе), подсчет
общей суммы и торговой надбавки.
6. База данных междугородных переговоров. Постоянный справочник
городов. Таблицы-справочники: город(индекс)-код, код-зона, зона-тариф.
Дата, время переговоров, продолжительность в минутах, телефон
абонента, код города, дата оплаты. Сортировка по дате переговоров. Вывод
списка неоплаченных переговоров и суммы оплаты (дата оплаты пуста).
“Оплата” переговоров абонентом.
7. База данных пункта проката. Постоянный справочник предметов проката.
Таблица стоимостей проката предметов. Дата, время получения и возврата
предмета, фамилия. Несданные предметы – пустая дата возврата. Подсчет
суммы оплаты за сданный предмет, подсчет дохода пункта за заданный
год/месяц.
Вид структуры данных основной таблицы
1. Динамический массив структур
2. Динамический массив указателей на структуры.
3. Односвязный список структур..
4. Двусвязный список структур.
5. Двусвязный циклический список структур.
6. Дерево, вершина которого содержит два указателя на поддеревья,
счетчик количества вершин и структурированную переменную.
3. Форматирование текстового файла
Выходной файл представляет собой HTML-документ, с требуемым по
заданию табличным представлением данных, либо наличием ссылок на
выделяемые фрагменты. Входной файл – обычный текстовый файл, полученный
сохранением документа (doc) в тестовый файл (txt) (абзац документа – строка
текста). При разработке системы адресации производится ставятся якоря
(метки) либо на все абзацы, либо на сами выделенные фрагменты. Необходимая
информация сохраняется в динамических структурах данных. При выполнении
работы произвести измерение зависимости «грязного» времени работы
программы и ее трудоемкости (количества базовых операций). Оценить вид
полученной зависимости (линейно-логарифмическая, квадратичная).
1. Термином называется слово, написанное прописными (большими)
буквами. Читается текстовый файл и формируется список терминов При
обнаружении в отформатированном тексте термина, написанного
соответствующими строчными (маленькими) буквами, формируется
ссылка на абзац, где этот термин встречается в первый раз, либо на сам
термин.
2. Термином называется слово, написанное прописными (большими)
буквами. Читается текстовый файл и формируется список терминов.
Формируется файл отсортированных в алфавитном порядке терминов со
ссылками на определяющие их абзацы, либо на сами термины.
3. Программа подсчитывает частоты появления слов в тексте, слова
считаются одинаковыми при совпадении первых 70% букв (% совпадения
можно менять, синтаксис слов не учитывается). Формируется таблица из
первых n наиболее часто встречающихся слов, в таблице содержится само
слово и ссылки на все абзацы, где оно появляется.
4. Программа читает текст пословно, слова считаются одинаковыми при
совпадении первых 70% букв (% совпадения можно менять, синтаксис слов
не учитывается). При форматировании текста и обнаружении слова
формируется ссылка на предыдущий абзац, где это слово встречается, либо
на само слово.
5. Лексический контроль текста. При чтении очередного слова в него
«снимаются» окончания, а затем суффиксы. Полученная основа ищется в
упорядоченном словаре и при ее отсутствии добавляется в словарь. Сам
словарь хранится в виде отдельного текстового файла и для каждой основы
содержит список найденных слов.
Вид структуры данных основной (слова, термины) и вспомогательной
(номера абзацев) таблиц
1. Динамический массив структур
2. Динамический массив указателей на структуры.
3. Односвязный список структур..
4. Двусвязный список структур.
5. Двусвязный циклический список структур.
4. Форматирование гипертекстового (HTML) файла
Выходной файл представляет собой HTML-документ, с требуемым по
заданию табличным представлением данных, либо наличием ссылок на
выделяемые фрагменты. Входной файл представляет собой гипертекстовый
документ (html-файл). При выполнении работы произвести измерение
зависимости «грязного» времени работы программы и ее трудоемкости
(количества базовых операций). Оценить вид полученной зависимости
(линейно-логарифмическая, квадратичная).
1. Термином является слово, выделенное «жирным» шрифтом (тег <b></b>).
Программа находит термины в группе html-файлов, находящихся в
заданном каталоге, и составляет таблицу ссылок на них, либо на абзацы, в
которых они находятся.
2. Термином является слово, выделенное «жирным» шрифтом (тег <b></b>).
Программа находит термины в html-файле, при обнаружении того же слова
в последующем тексте формируется ссылка на термин, либо на его
предыдущее упоминание (ссылку).
3. Программа открывает гипертекстовый документ и копирует его в
заданный каталог. При обнаружении локальных гиперссылок, она также
копирует документы, на которые они ссылаются.
4. Программа открывает гипертекстовый документ и копирует его в
заданный каталог. При обнаружении локальных ссылок на изображения
(теги типа <img>), она копирует соответствующие двоичные файлы.
5. Программа подсчитывает частоты появления слов в html-файле, слова
считаются одинаковыми при совпадении первых 70% букв (% совпадения
можно менять, синтаксис слов не учитывается). Формируется таблица из
первых n наиболее часто встречающихся слов, в таблице содержится само
слово и ссылки на все абзацы, где оно появляется.
6. Программа читает текст в html-файле, слова считаются одинаковыми при
совпадении первых 70% букв (% совпадения можно менять, синтаксис слов
не учитывается). При форматировании текста и обнаружении слова
формируется ссылка на предыдущий абзац, где это слово встречается, либо
на само слово.
7. Лексический контроль текста в html-файле. При чтении очередного слова
в него «снимаются» окончания, а затем суффиксы. Полученная основа
ищется в упорядоченном словаре и при ее отсутствии добавляется в
словарь. Сам словарь хранится в виде отдельного текстового файла и для
каждой основы содержит список найденных слов.
5. Иерархические структуры данных в памяти
На логическим уровне разрабатываемая структура данных представляет
собой обычную линейную последовательность элементов (например, строк) со
стандартным набором операций (добавление в конец, вставка и удаление по
логическому номеру, сортировка, бинарный поиск, вставка с сохранением
порядка, сохранение и загрузка из текстового файла, выравнивание
(балансировка - выравнивание размерностей структур данных нижнего
уровня). Физическая структура данных имеет два уровня. На нижнем уровне
поддерживается ограничение размерности структуры данных: при переполнении
она разбивается пополам, соответствующие изменения вносятся в верхний
уровень. При выполнении работы произвести измерение зависимости
«грязного» времени работы программы и ее трудоемкости (количества
базовых операций). Оценить вид полученной зависимости (линейнологарифмическая, квадратичная).
1. Список - элемент содержит статический массив указателей на строки.
Включение с сохранением упорядоченности. Если после включения строки
массив заполняется полностью, то создается еще один элемент списка с
массивом указателей, в который переписывается половина указателей из
старого.
2. Список, каждый элемент которого содержит динамический массив
указателей на строки, упорядоченные по длине. Размерность массива в
каждом следующем элементе в 2 раза больше, чем в предыдущем. Строка
включается в структуру данных с сохранением упорядоченности. Если
строка включается в заполненный массив, то последний указатель
перемещается в следующий элемент и так далее).
3. Двухуровневый массив указателей на строки. Массив верхнего уровня статический, массивы нижнего уровня - динамические. Включение строки
с сохранением упорядоченности. Если после включения строки массив
заполняется полностью, то создается еще один массив указателей, в
который переписывается половина указателей из старого.
4. Двухуровневый массив указателей на строки, упорядоченные по длине.
Размерность каждого следующего массива нижнего уровня в 2 раза
больше предыдущего. Если строка включается в заполненный массив, то
последний указатель перемещается в следующий элемент и так далее).
5. Массив указателей на заголовки списков. Элемент списка содержит
указатель на строку. (При включении последним предусмотреть
ограничение длины текущего списка и переход к следующему). Текущие
длины списков также необходимо хранить для исключения
последовательного просмотра списков.
6. Список - каждый элемент является заголовком односвязного списка.
Элемент списка второго уровня содержит указатель на строку. (Включение
элемента последним в список производить с учетом выравнивания длины
текущего и следующего списков).
7. Односвязный (двусвязный) список. Для ускорения доступа к элементу
списка создается список верхнего уровня, для каждой группы
из N элементов исходного списка создается элемент списка верхнего
уровня с указателем на начало группы и числом элементов в ней. При
вставке/удалении меняется «длина» группы, в которой производится
операция.
8. Односвязный (двусвязный) список. Для ускорения доступа к элементу
списка создается массив указателей верхнего уровня, для каждой группы
из N элементов исходного списка в нем имеется указатель на начало
группы. Имеется также динамический массив «длин» групп. При
вставке/удалении меняется «длина» группы, в которой производится
операция.
6. Древовидные структуры
Для древовидных структур данных предусмотреть вывод характеристик
сбалансированности дерева (средняя длина ветви) и процедуру выравнивания
(балансировки). При выполнении работы произвести измерение зависимости
«грязного» времени работы программы и ее трудоемкости (количества
базовых операций). Оценить вид полученной зависимости (линейнологарифмическая, квадратичная).
1. Дерево, концевая вершина которого содержит внешний (динамический)
массив указателей постоянной размерности, а промежуточная - 2 указателя
на потомков и счетчик вершин в поддереве. При переполнении концевой
вершины она становится промежуточной и порождает два концевых
потомка.
2. Двоичное дерево, каждая вершина которого содержит указатель на строку,
счетчик вершин в поддереве.
3. Двоичное дерево в динамическом массиве с вычисляемыми индексами
потомков (2n и 2n+1). Для хранении текста (слов) используется
динамический массив указателей char**.
4. Упрощенное 2-3 дерево. Вершина дерева содержит два указателя на
объекты и три указателя на поддеревья. Данные в дереве упорядочены.
5.
6. Двоичное дерево с массивом объектов вершине. Вершина дерева
содержит статический массив указателей на объекты и два указателя на
правое и левое поддерево. Значения в дереве упорядочены. (массив в
каждом элементе упорядочен, дерево в целом также упорядочено). Если
при включении указателя в найденный массив последний переполняется,
то самый правый указатель переносится в правое поддерево.
7. Дерево (иерархический каталог) объектов. Каждый каталог содержит
список объектов (например, строк) и подкаталоги. Разработать операции
создания пустого корневого каталога, позиционирования по дереву
каталогов, добавление объектов и каталогов в текущий каталог, удаление
объекта и каталога, а также поиск объекта по полному пути (parse).
Структура данных – вершина с идентификатором типа (объект, каталог),
именем и динамическим массивом указателей на потомков
8. Дерево (иерархический каталог) объектов. Каждый каталог содержит
список объектов (например, строк) и подкаталоги. Разработать операции
создания пустого корневого каталога, позиционирования по дереву
каталогов, добавление объектов и каталогов в текущий каталог, удаление
объекта и каталога, а также поиск объекта по полному пути (parse).
Структура данных – вершина с идентификатором типа (объект, каталог),
именем и односвязным списком потомков.
7. Динамическое распределение памяти
Разработать собственные функции динамического распределения памяти,
используя в качестве «кучи» динамический массив, создаваемый обычной
функцией
распределения
памяти
(malloc).
Разработанная
функция my_malloc должна возвращать указатель на выделенную область,
причем в память перед указателем должен быть записан размер выделенной
области, необходимый при ее возвращении, либо сохранена другая необходимая
системная
информация.
При
освобождении
памяти
функцией my_free производится объединение соседних свободных областей.
Необходимы также средства отображения текущего состояния системы ДРП –
размеры и адреса свободных (и занятых) областей. Для собственных структур
данных система ДРП не должна использовать дополнительной внешней памяти,
то есть размещать из в той же «куче», не используя дополнительных
системных malloc и free. Предусмотреть вывод текущего состояния системы ДРП
– адресов и размерностей занятых и свободных областей. Оценить
производительность системы и степень фрагментации памяти при
выполнении
запросов
зависимости
от
количества
занятых
элементов: разработать
генератор
случайных
запросов
на
выделение/освобождение
памяти:
сначала
запрашивается
выделение N элементов и их адреса запоминаются в массиве указателей. Затем в
цикле из этого массива выбирается любой фрагмент и освобождается,
запрашивается новый и его адрес помещается на то же самое место. Провести
измерения при резервировании областей фиксированного и переменного
(случайного) размера.
1. Свободные области – односвязный список. Выделенные области –
односвязный список. Выделение по принципу наиболее подходящего.
2. Свободные области – односвязный список. Первый элемент списка –
исходная “куча”. Если при поиске не находится элемента с размером, точно
совпадающим с требуемым, новый элемент выделяется из элемента –
“кучи”. Возвращаемые элементы не “склеиваются”, а используются при
повторном выделении памяти того же размера.
3. Свободные области – динамический массив указателей. Выделение по
принципу первого подходящего.
4. Свободные области – динамический массив указателей. Первый свободная
область – исходная “куча”. Если при поиске не находится элемента с
размером, точно совпадающим с требуемым, новый элемент выделяется из
элемента – “кучи”. Возвращаемые элементы не “склеиваются”, а
используются при повторном выделении памяти того же размера.
8. Обработка звука и изображения в двоичных файлах
Программа «вручную» читает волновой звуковой файл (wav) или
растровый файл изображения (bmp), выполняя заданные преобразования звука
или изображения. Допускаются ограничения на форматы обрабатываемых
файлов (только «моно», 256-цветов и т.п).
1. Изменение контрастности и яркости изображения.
2. Уменьшение разрешающей способности путем усреднения групп
пикселей (2х2, 3х3).
3. Искажение изображения («линза», проецирование на сферическую
поверхность).
4. Рисование элементарных графических объектов (линии, окружности,
точки).
5. Амплитудные преобразования звука: сжатие динамического диапазона
(компрессия) звука: усиление слабого сигнала по заданной кривой или
функции.
6. Временные преобразования звука: эхо, реверберация.
Download