Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
49
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать

Практическое задание.

Это задание посвящено изучению свойств структур данных переменного размера и потоков данных в языке C++. При выполнении практических задач студенты знакомятся с основными динамическими структурами данных: списками, динамическими и ассоциативными массивами, деревьями. Реализуя динамические структуры данных в своих программах, студенты должны предусмотреть возможность сохранения объектов на диске и восстановления их из файла. Эти функции должны быть реализованы на основе потоков языка C++.

Необходимым условием при реализации функций сохранения и восстановления данных является их совместимость по форматам данных (т.е. чтобы объект, спасенный одной программой мог быть прочитан и восстановлен другой без коррекции файла данных).

Вариант A.

Очередью называется связный список объектов с доступом в двух точках — голове и хвосте очереди. Объект добавляется в хвост очереди, а извлекается из ее головы. Таким образом первый элемент, помещенный в очередь, будет извлечен первым.

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

Вариант B.

Деревом называется структура данных, основанная на порядке типа "Отец‑Сыновья". Дерево состоит из узлов. Каждый узел (кроме одного) имеет единственного родителя и одного или нескольких сыновей. Родители и сыновья, в свою очередь, также являются узлами и т.д. Дерево имеет также единственный узел, не имеющий родителя, но имеющий сыновей. Таким образом, все остальные узлы дерева являются прямыми или косвенными сыновьями этого узла. Такой узел называется корнем дерева. Узлы, имеющие и родителей и сыновей, часто называют ветвями дерева, а узлы, имеющие только родителей, но не имеющие сыновей называют листьями. По максимальному количеству сыновей у одного узла различают бинарные — 2 сына, тринарные — 3 сына, тетрарные — 4 сына и т.д. деревья.

Разработайте класс "Тринарное дерево" и напишите на его основе программу, строящую плоский фрактал по следующему рекуррентному алгоритму:

Предусмотрите операции спасения дерева на диск и восстановления его с диска. Глубину прорисовки фрактала определите в программе исходя из количества свободной памяти в системе.

Вариант C.

Ассоциативным массивом (или картой) называется массив объектов с индексированием по набору заранее неизвестных и необязательно последовательных величин — ассоциаций (например строк, соответствующих названиям объектов).

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

Вариант D.

Упорядоченным списком называется список объектов, в котором порядок следования элементов определяется из соотношений "больше‑меньше" некоторого заданного параметра (ключевой параметр). В этом случае первому элементу списка будет соответствовать элемент с наименьшим значением ключевого параметра, второй — с ключом большим, чем у первого, третий — с большим, чем у второго и т.д.

Разработайте класс "Упорядоченный список" и напишите программу, строящую упорядоченную круговую диаграмму по заданному набору величин. Предусмотрите возможности сохранения упорядоченного списка на диске и восстановления его из файла.

Вариант E.

Разработайте класс "Двусвязный список" и напишите программу создающую список из последовательных квадратов и пробегающую по этому списку от головы к хвосту и обратно. Текущий элемент списка выделяйте цветом. Предусмотрите возможности сохранения списка на диске и восстановления его из файла.

Вариант F.

Разработайте класс "Динамически изменяемый стек" и напишите программу, создающую набор произвольных объектов (например, букв на экране) и уничтожающую их в обратном порядке. Предусмотрите возможности сохранения стека на диске и восстановления его из файла.

Вариант G.

Разработайте класс "Динамически изменяемая очередь" и напишите программу, создающую набор произвольных объектов (например, окружностей на экране) и уничтожающую их в том же порядке, в котором объекты создавались. Предусмотрите возможности сохранения очереди на диске и восстановления его из файла.

    1. Полнофункциональный ввод-вывод в С++.

Особенности ввода-вывод в языке С++.

В языке С++ ввод/вывод описывается как набор классов, описанный в заголовочном файле iostream.h. Аналогами потоков stdin, stdout, stderr являются классы cin, cout и cerr. Эти три потока открываются автоматически. Поток cin связан с клавиатурой, а cout, cerr - с дисплеем.

Классы iostream используют перегруженные операции “<<” для записи (занесения в поток) и операциb “>>” для чтения (извлечения из потока). Операции возвращают ссылку на тип iostream, что позволяет сцеплять потоковые операции. Они перегружаются для всех типов данных (в том числе и для пользовательских), тем самым необходимость проверки соответствия типов отпадает. Компилятор самостоятельно выбирает необходимую функцию в соответствии с типом данных:

int ivalue;

float fvalue;

char c;

cin>>ivalue>>fvalue>>c;

cout<<”integer: “<<ivalue<<endl<<” float: “<<fvalue<<”char: “<<c;

Для вставки символа перевода строки необходимо либо выводить символ ‘\n’, либо константу endl.

Для форматирования выводимых данных для объектов iostream включены следующие методы:

precision(int p) - количество знаков после запятой,

width(int w) - размер поля для вывода,

setf(long manip) - установка флагов, определяющих формат вывода(ios::dec, ios::oct, ios::hex, ios::fixed, ios::scientific, ios::left, ios::right).