Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
відповіді ооп( більше половини).docx
Скачиваний:
9
Добавлен:
21.09.2019
Размер:
165.75 Кб
Скачать

39Дайте оцінку такій динамічні структури об’єктів як черги, стеки та деки.

Стеки, черги та деки призначені для тимчасового збереження та почергової обробки даних. Дійсно, ми не можемо отримати, наприклад, другий елемент черги, не змінивши її (для цього потрібно спочатку взяти перший елемент). В той же час, у багатьох задачах дані, маючи динамічний розмір, повинні багаторазово переглядатись та певним чином оброблятись. Для таких цілей використовують списки. Ми розглянемо декілька видів списків, які мають спільні властивості, але відрізняються способами реалізації та складом допустимих дій.

Стек – це такий лінійний список, який має одну точку доступу: з однієї сторони дані додаються і з тієї ж сторони дані вилучаються. Стек організований за принципом LIFO (Last In First Out - останній ввійшов – перший вийшов).

Черга - це такий лінійний список, який має дві точки доступу: з однієї сторони дані в чергу додаються, а з іншої – вилучаються. Черга організована за принципом FIFO (First In First Out – перший ввійшов – перший вийшов).

Head – точка видалення, Tail – точка додавання.

Отже, черга – це асоціація об’єктів, що очікують доступу до системи обслуговування.

дек (deck) (стек із двома кінцями) -- лінійний список, у якому всі додавання й видалення (і звичайно всякий доступ) робляться на обох кінцях списку.

 Дек часто називають двостороннім стеком або двосторонньою чергою. Визначимо дек:

1.    Порожній дек.

2.    Перший елемент; дек.

3.    Дек; останній елемент.

Дек можна представити, як сукупність однотипних елементів, в якій ми маємо доступ до початку або кінця деку для додавання або взяття елементів (Рис. 10.9).

 

Рис. 10.13 – Дек

40.Опишіть та дайте приклади використання зв’язаної організації пам’яті для реалізації рекурсивних структур.

Зв’язана організація пам’яті задає множину структур даних, зв’язки між якими організовуються за допомогою вказівників. Кожен елемент такої структури володіє властивістю - „мати зв’язок з іншими елементами” (асоціація). ДСО володіють властивістю мати змінний склад структури, яка дозволяє розглядати ДСО як асоціацію зв’язаних об’єктів

рекурсивні структури даних у своєму описі посилаються самі на себе. Взагалі поняття динамічних структур даних є більш широким, ніж поняття рекурсивних структур 

47). Організація роботи з файлами у мові С++ з використанням потоків.

Під файлом зазвичай розуміють поіменовану інформацію на зовнішньому носієві, наприклад жорсткому магнітному диску. Логічно файл можна подати як кількість послідовних байтів, тому такі пристрої як дисплей, клавіатуру і принтер також можна розглядати як окремі випадки файлів.

За способом доступу файли можна поділи: на послідовні (текстові), читання і запис в яких проводяться з початку байт за байтом, і файли з довільним доступом (бінарні) , які допускають читання і запис у вказану позицію.

Стандартна бібліотека містить три класи для роботи з файлами:

ifstream — клас вхідних файлових потоків;

ofstrearn — клас вихідних файлових потоків;

fstream — клас двонаправлених файлових потоків.

Ці класи є похідними від класів istream, ostream та iostream відповідно, тому вони містять перевантажені операції << і >>, прапорці форматування, маніпулятори, методи, стани потоків і т. д.

Використання файлів в програмі передбачає наступні операції:

  • створення потоку;

  • відкриття потоку і пов’язування його з файлом;

  • обмін (ввід/вивід);

  • знищення потоку;

  • закриття файлу.

Кожен клас файлових потоків містить конструктори, за допомогою яких можна створювати об'єкти цих класів різними способами.

Конструктори без параметрів створюють об'єкт відповідного класу, не пов'язуючи його з файлом:

ifstream (); { input }

ofstream (); { output }

fstream ();, { file- потік}

Конструктори з параметрами створюють об'єкт відповідного класу, відкривають файл з вказаним ім'ям і пов'язують файл з об'єктом:

іfstream(const char *name, int mode = ios::in);

ofstream(const char *name, int mode = ios::out | ios::trunc);

Другим параметром конструктора є режим відкриття файлу. Якщо встановлене за замовчанням значення не влаштовує програміста, можна вказати інше, склавши його з бітових масок, визначених в класі ios:

enum open_mode {

in = 0x01, //Відкрити для читання

out = 0x02, // Відкрити для запису

ate = 0x04, // Встановити покажчик на кінець файлу

арр = 0x08, // Відкрити для додавання в кінець

trunc = 0x10, // Якщо файл існує, вилучити його

nocreate = 0x20, // Якщо файл не існує, видати помилку

noreplace = 0x40, // Якщо файл існує, видати помилку

binary= 0x80. // Відкрити у двійковому режимі

};

Відкрити файл в програмі можна з використанням або конструкторів, або методу open, що має такі ж параметри, як і у відповідному конструкторі, наприклад

// Використання конструктора

ifstream inpf ("input.txt"); if (!inpf){

cout << "Неможливо відкрити файл для читання"; return 1;}

ostream f;

f.open("output.txt". ios :: out); // Використання методу open

if (!f) {

out << "Неможливо відкрити файл для запису"; return 1 ;}

Читання і запис виконуються або за допомогою операцій читання і вилучення, аналогічних потоковим класам, або за допомогою методів класів.