Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Креневич А.П.,Обвінцев О.В.C в задачах і прикладах

..pdf
Скачиваний:
87
Добавлен:
07.03.2016
Размер:
1.37 Mб
Скачать

Розділ 11. Основи об'єктно-орієнтованого програмування 201

/* tobject.h */

 

class TObject {

// Клас довільних об'єктів

public:

 

TObject(){};

// Порожній конструктор

~TObject(){};

// Порожній деструктор

};

 

Опис дека майже повністю повторює опис дека цілих чисел (див. приклад 10.3), розглянутий раніше. Проте сам дек оформимо у вигляді об'єкта, що має властивості bg, en, методи isEmpty, PutBg, PutEn, GetBg, GetEn, конструктор Deque та деструктор ~Deque. Модуль для роботи з деком складається з двох частин – файла заголовків deque.h і файла реалізації deque.cpp.

/* deque.h */ #include "tobject.h"

//Посилання на елемент дека typedef struct delem *dref;

//Елемент дека

struct delem

{

 

TObject *data;

 

dref next,

prev;

 

};

 

 

class Deque {

// Клас Дек

private:

 

 

dref bg,

en; // Перший і останній елементи

public:

 

 

Deque();

 

// Конструктор

~Deque();

// Деструктор

int isEmpty();

// Чи порожній дек?

//Додати елемент у початок void PutBg(TObject *a);

//Додати елемент у кінець void PutEn(TObject *a);

//Взяти елемент з початку

TObject *GetBg();

//Взяти елемент з кінця

TObject *GetEn();

};

Файл реалізації:

/* deque.cpp */ #include <stdlib.h> #include "deque.h" Deque::Deque(){

bg = en = NULL;

202

С у задачах і прикладах

 

}

int Deque::isEmpty() {

if (bg == NULL && en == NULL) return 1;

else

return 0;

}

void Deque::PutBg(TObject *a){ dref p;

p = (dref) malloc(sizeof(struct delem)); p -> data = a;

p -> next = bg;

p -> prev = NULL; if (isEmpty()) {

en = p;

}

else

bg -> prev = p; bg = p;

};

void Deque::PutEn(TObject *a){ dref p;

p = (dref) malloc(sizeof(struct delem)); p -> data = a;

p -> next = NULL; p -> prev = en; if (isEmpty()) {

bg = p;

}

else

en -> next = p; en = p;

};

TObject *Deque::GetBg(){

if (isEmpty()) return NULL; TObject *a;

dref p;

a = bg -> data; p = bg;

if (bg == en) { bg = en = NULL;

}

else {

bg = p -> next;

Розділ 11. Основи об'єктно-орієнтованого програмування 203

bg -> prev = NULL;

}

free(p); return a;

}

TObject *Deque::GetEn(){

//Даний метод отримується з методу GetBg,

//якщо скрізь у описі зробити взаємозаміну

//bg на en і prev на next.

}

Deque::~Deque(){

//Деструктор не тільки видаляє дек з пам'яті,

//а й всі об'єкти, що містяться у деку. TObject *a;

while (!isEmpty()) { a = GetBg(); delete a;

}

}

У головній програмі визначимо клас TPlayer (гравець) як нащадок класу TObject – довільних об'єктів. Цей клас має одну властивість num

– номер гравця, конструктор TPlayer – створити гравця з номером a, метод Show – показати гравця та порожній деструктор ~TPlayer. Об'єкти класу TPlayer зберігатимемо у деку довільних об'єктів. Спочатку в кінець дека додаються n об'єктів класу TPlayer з номерами від 1 до n. При цьому new TPlayer(i) створює новий об'єкт з класу TPlayer, викликає для нього конструктор TPlayer(i) та повертає вказівник на новостворений об'єкт. Цей вказівник передається у метод GetEn об'єкта pd як параметр-аргумент. Зауважимо, що метод GetEn як параметр очікує вказівник типу TObject, але, оскільки TPlayer є нащадком класу TObject, то ця операцію буде виконано коректно.

Після цього, поки дек не спорожніє, перекладаємо m – 1 разів елементи із початку дека у його кінець, а m-й – за ліком елемент виводимо на екран.

/* counter.cpp */

 

 

#include <iostream.h>

 

#include "deque.h"

 

 

class TPlayer : public

TObject{ // Клас гравців

private:

 

 

int num;

//

Номер гравця

public:

 

 

TPlayer(int a); //

Конструктор

204

С у задачах і прикладах

 

~TPlayer();

//

Деструктор

int Show();

//

Повертає номер гравця

};

TPlayer::TPlayer(int a) { num = a;}

TPlayer::~TPlayer(){} int TPlayer::Show(){

return num;

}

void main(){ int i;

int n = 15; // кількість гравців

int m = 11; // кількість слів у лічильці

Deque *pd; TPlayer *p;

pd = new Deque();

for (i = 1; i <= n; i++){ p = new TPlayer(i);

pd -> PutEn(p);

}

while (!pd -> isEmpty()) { for (i = 1; i <= m-1; i++){

/* pd -> GetBg() є вказівником на змінну типу TObject, а p – TPlayer, що є нащадком класу TObject.

Тому використовуємо перетворення типів */ p = (TPlayer *) pd -> GetBg();

pd -> PutEn(p);

}

p = (TPlayer *) pd -> GetBg(); cout << p -> Show() << " " ; delete p;

}

delete pd; cout << "\n";

}

Задачі для самостійної роботи

11.1. Описати клас Familiar (Знайомий) на базі класу Person

class Person {

 

private:

 

char Name[20];

// Ім'я

Розділ 11. Основи об'єктно-орієнтованого програмування 205

char Surname[30];

// Прізвище

int BYear;

// Рік народження

public:

 

void Input();

// Зчитати дані

void Output();

// Надрукувати дані

};

 

та реалізувати програму пошуку телефону в телефонній книжці.

11.2.Описати клас Employees (Співробітник) на базі класу Person (задача 11.1) і реалізувати програму розрахунку прибуткового податку.

11.3.Описати клас Guest (Гість) на базі класу Person (задача 11.1) і реалізувати програму розрахунку платні за проживання у готелі.

11.4.Описати клас Passenger (Пасажир) на базі класу Person (задача 11.1) та реалізувати програму розрахунку платні за квиток, залежно від відстані маршруту.

11.5.Описати клас Book (Книжка) та реалізувати програму пошуку книжки за всіма можливими атрибутами у каталозі.

11.6.Описати клас Polynom (Поліном) та реалізувати методи взяття похідної і добутку поліномів.

11.7.Описати клас Polynom (Поліном) і реалізувати методи ділення

поліномів з остачею та відшукання НСД і НСК двох поліномів.

11.8. Описати клас Word (Слово) і реалізувати програму пошуку однокореневих слів у файлі.

11.9. Описати клас Rational (Раціональне_Число) (див. зада-

чу 6.111).

11.10.Описати клас ObjString, що є об'єктно-орієнтованим аналогом рядкового типу. Реалізувати у ньому всі можливі операції над рядками (задача 6.90). На базі цього класу розв'язати задачу 6.58.

11.11.Побудувати клас ObjComplex – об'єктно-орієнтований аналог

універсального комплексного типу (див. задачу 6.113).

11.12.Описати клас точок площини Point. Описати клас Dynamic_List, що є динамічним списком, який містить точки площини. Реалізувати всі необхідні методи для роботи з цими класами та методи обчислення площі та периметра багатокутника, утвореного точками, що містяться у списку.

11.13.Описати клас Dynamic_Array (Динамічний_Масив), реалізувати методи створення та видалення масиву, читання та зміни елемента. Із використанням динамічних масивів розв'язати задачу: у двох ма-

сивах містяться коефіцієнти поліномів степенів m і n, відповідно. Отримати коефіцієнти добутку цих поліномів.

206

С у задачах і прикладах

 

11.14.Описати клас Stack (Стек) із довільних об'єктів і реалізувати дії над стеками (задача 10.1). Описати клас Symbol (Символ) на базі початкового об'єкта та виконати інвертування послідовності символів.

11.15.Описати клас Queue (Черга) із довільних об'єктів і реалізувати

дії над чергами (задача 10.3). Описати клас Purchaser (Покупець) на базі початкового об'єкта та розв'язати задачу 10.6.

11.16.Описати клас List (Список) із довільних об'єктів і реалізувати дії над списками (задача 10.18). Описати клас Element (Елемент) на базі початкового об'єкта та розв'язати задачу 10.18 д).

11.17.Побудувати об'єктно-орієнтований проект для виведення на екран графіків функцій однієї змінної.

11.18.Побудувати об'єктно-орієнтований проект для виведення на екран та переміщення фігур і реалізувати програму розміщення меблів.

11.19.Побудувати об'єктно-орієнтований проект для виведення на екран, переміщення та обертання об'ємних тіл.

11.20.Побудувати об'єктно-орієнтований проект для реалізації двозв'язного списку рядків і реалізувати перегляд текстових файлів.

11.21.Побудувати об'єктно-орієнтований проект для графічного зображення функцій двох змінних.

11.22.Реалізувати об'єктно-орієнтований проект для побудови опуклої оболонки точок тривимірного простору.

Список літератури

1.Абрамов, С.А. Задачи по программированию / С.А. Абрамов, Г.Г. Гнездилова, Е.Н. Капустина, М.И. Селюн. – М. : Наука, 1988. – 224 с.

2.Бауэр, Ф.Л. Информатика. Вводный курс / Ф.Л. Бауэр, Г. Гооз. – М. :

Мир, 1976. – 488 с.

3.Буч, Г. Объектно-ориентированное проектирование с примерами применения / Г. Буч. – К. : Диалектика, 1992. – 519 с.

4.Вирт, Н. Систематическое программирование. Введение / Н. Вирт. –

М. : Мир, 1977. –184 с.

5.Вирт, Н. Алгоритмы + структуры данных = программы / Н. Вирт. –М. :

Мир, 1985. – 406 с.

6.

Дейтел, Х.М.

Как

программировать на

С++

/ Х.М. Дейтел,

П.Дж. Дейтел.– М. : Бином, 2001. –1024 с.: ил.

 

 

7.

Збірник задач

з

дисципліни "Інформатика

і

програмування" /

Є.С. Вакал, В.В. Личман, О.В. Обвінцев, В.В. Бублик, Б.П. Довгий, В.В. Попов. –2-ге вид., випр. та доп. –К. :ВПЦ "Київський університет", 2006.– 94 с.

8. Златопольский, Д.М. Сборник задач по программированию / Д.М. Златопольский. – 2-е изд., перераб. и доп. – СПб. : БХВ-Петербург, 2007. –240 с.: ил.

9. Калиткин, Н.Н. Численные методы / Н.Н. Калиткин. – Наука, 1978. –

512с.

10.Керниган, Б. Язык программирования Си / Б. Керниган, Д. Ритчи. – 3-е узд. – СПб. : Невский диалект, 2001. – 352 с.

11.Керниган, Б. Язык программирования Си. Задачи по языку Си / Б. Керниган, Д. Ритчи, А. Фьюэр. – М. : Финансы и статистика, 1985. – 279 c.

12.Кнут, Д. Искусство программирования для ЭВМ : В 3 т. / Д. Кнут. Т.3. Сортировка и поиск. – М. : Мир, 1978. – 846 с.

13.Крячков, А.В. Программирование на С и С++. Практикум : учеб. посо-

бие / А.В. Крячков, И.В. Сухинина, В.К. Томшин. – 2-е изд., испр.– М.

:Горячая линия–Телеком, 2000. – 344 с.: ил.

14.Методические указания и задания к лабораторным занятиям по курсу "Вычислительные машины и программирование" для студентов механикоматематического факультета / В.В. Бублик – К. : КГУ, 1986. –60 с.

15.Пильщиков, В.Н. Сборник упражнений по языку Паскаль : учеб. пособие для вузов / В.Н. Пильщиков. – М. : Наука, 1989. – 160 с.

16.Проскуряков, И.В. Сборник задач по линейной алгебре / И.В. Проскуряков. – 11-е изд., стереотип. – СПб. : Лань, 2008. – 480 с.

17.Проценко, В.С. Техніка програмування мовою Сі / В.С. Проценко, П.Й. Чаленко, А.Б. Ставровський. – К. : Либідь, 1993. – 224 с.

18.Подбельский, В.В. Язык программирования Си++ / В.В. Подбельский.

– М. : Финансы и статистика, 2002. – 560 с.: ил.

19.Страуструп, Б. Язык программирования С++ / Б. Страуструп. – Вторая редакция. Ч1. – К. : Диасофт, 1993. –264 с.

20.Страуструп, Б. Язык программирования С++ / Б. Страуструп. – Вторая редакция. Ч2. – К .: Диасофт, 1993. – 296 с.

21.Уинер, Р. Язык Турбо Си / Р. Уинер.– М. : Мир, 1991. – 384 с.

22.Уэйт М. Язык Си / М. Уэйт, С. Прата, Д. Мартин. – М. : Мир, 1988. – 512 с.

Зміст

 

ВСТУП..............................................................................................................................................................................

3

Розділ 1. ЛІНІЙНІ ПРОГРАМИ................................................................................................................

5

Розділ 2. РОЗГАЛУЖЕНІ ПРОГРАМИ.............................................................................................

13

2.1. Основи алгебри висловлювань.............................................................................................

13

2.2. Умови та мулеве присвоювання...........................................................................................

18

2.3. Розгалуження..........................................................................................................................................

21

Розділ 3. ЦИКЛІЧНІ ПРОГРАМИ........................................................................................................

25

3.1. Цикли з лічильником........................................................................................................................

25

3.2. Програмування рекурентних співвідношень..........................................................

31

3.3. Цикли за умовою..................................................................................................................................

44

Розділ 4. ПРОСТІ ТИПИ ДАНИХ..........................................................................................................

53

4.1. Цілі типи даних.......................................................................................................................................

53

4.2. Дійсні типи даних.................................................................................................................................

58

4.3. Символьний тип даних...................................................................................................................

64

4.4. Тип даних перерахування. Оператор вибору..........................................................

72

Розділ 5. ПІДПРОГРАМИ...........................................................................................................................

79

Розділ 6. СКЛАДЕНІ ТИПИ ДАНИХ..................................................................................................

90

6.1. Масиви.............................................................................................................................................................

90

6.2. Рядки.............................................................................................................................................................

100

6.3. Структури та об'єднання...........................................................................................................

112

6.4. Організація пошуку та вибору інформації.............................................................

121

Розділ 7. ФАЙЛИ...........................................................................................................................................

127

7.1. Двійкові файли...................................................................................................................................

127

7.2. Текстові файли...................................................................................................................................

141

Розділ 8. СОРТУВАННЯ ТА ШВИДКИЙ ПОШУК...............................................................

145

Розділ 9. МОДУЛЬНА СТРУКТУРА ПРОГРАМ.....................................................................

157

Розділ 10. РЕКУРСИВНІ СТРУКТУРИ ДАНИХ.....................................................................

164

Розділ 11. ОСНОВИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ.......

189

Список літератури................................................................................................................................

207

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]