«Программное обеспечение вычислительной техники и автоматизированных систем»
Вид материала | Учебное пособие |
СодержаниеРезультаты работы программы Учебное пособие |
- Рабочая программа для специальности: 220400 Программное обеспечение вычислительной, 133.96kb.
- Рабочая программа по дисциплине "Программирование на языке высокого уровня" для специальности, 137.39kb.
- Рабочая программа по дисциплине Архитектура вычислительных систем Для специальности, 122.63kb.
- Рабочая программа по дисциплине "Вычислительная математика" для специальности 230105, 201.66kb.
- Рабочая программа по дисциплине «Информатика» для специальности 230105(220400) «Программное, 259.13kb.
- Методические указания для студентов специальности 230105 «Программное обеспечение вычислительной, 223.95kb.
- Рабочая программа по дисциплине организация ЭВМ и систем для студентов дневного отделения, 91.9kb.
- «Программное обеспечение вычислительной техники и автоматизированных систем», 75.83kb.
- План занятий третьего года обучения, по специальности «Программное обеспечение вычислительной, 103.35kb.
- Рабочая программа по дисциплине "Методы оптимизации" для специальности 230105 "Программное, 106.67kb.
Примеры выполнения РГЗ 3
Пример 1
Задание. Используя производные классы, определить класс параметризованного бинарного дерева поиска. Применить его для построения дерева, состоящего из рациональных дробей.
Программа
#include
#include
#include
#include
// Класс рациональной дроби
class fraction
{
int m, n; // Числитель и знаменатель дроби
public:
// Конструктор
fraction(int m1, int n1 = 1):m(m1), n(n1)
{
if (n == 0) n = 1;
if (n < 0) {m = -m;n = -n;}
}
// Перегрузка оператора <=
int operator<=(fraction g)
{
if (m * g.n - g.m * n <= 0) return 1; else return 0;
}
// Перегрузка оператора <
int operator<(fraction g)
{
if (m * g.n - g.m * n < 0) return 1; else return 0;
}
// Перегрузка оператора ==
int operator==(fraction g)
{
if (m * g.n - g.m * n == 0) return 1; else return 0;
}
// Перегрузка оператора <<
friend ostream &operator<<(ostream &o, fraction &f);
// Перегрузка оператора >>
friend istream &operator>>(istream &i, fraction &f);
};
// Перегрузка оператора <<
ostream &operator<<(ostream &o, fraction &f)
{
o << f.m << "/" << f.n;
return o;
}
// Перегрузка оператора >>
istream &operator>>(istream &i, fraction &f)
{
i >> f.m >> f.n;
if (f.n < 0)
{
f.m = -f.m;
f.n = -f.n;
}
return i;
}
// Узел бинарного дерева
template
struct NODE
{
T info; // Содержимое узла
// Указатели на левое и правое поддерево
struct NODE
};
// Корень бинарного дерева
template
struct LIST
{
NODE
// Консруктор
LIST() { root = NULL; }
};
// Класс бинарного дерева
template
class TREE:public LIST
{
public:
// Добавление элемента в дерево
void insert(T x)
{
root = ::insert(root, x);
}
// Удаление элемента из дерева
void remove(T x)
{
root=::remove(root, x);
}
// Поиск элемента в дереве
int find(T x)
{
if (::find(root, x)) return 1;
else return 0;
}
// Вывод дерева на экран
void show()
{
::show(root);
}
};
// Добавление элемента в бинарное дерево
template
NODE
{
// Если узел пустой
if (root == 0)
{
root = (NODE
root->info = x ;
root->left = root->right = 0 ;
}
// Если не пустой
else if (x <= root->info) root->left = insert ( root->left, x );
else root->right = insert ( root-> right, x );
return root;
}
// Удаление элемента из бинарного дерева
template
NODE
{
NODE
if (root == 0) return 0;
if (x == root->info)
{
if (root->left == 0)
{
b = root->right; delete root; return b;
}
b = root->left;
while (b->right) b = b->right;
b->right = root->right;
return root->left;
}
if (x <= root->info) root->left = remove(root->left, x);
else root->right = remove(root->right, x);
return root;
}
// Поиск элемента в бинарном дереве
template
NODE
{
if(t)
{
if(x == t->info) return t;
else if (x < t->info) return find(t->left, x);
else return find(t->right, x);
}
else return 0;
}
// Вывод дерева на экран
template
void show( NODE
{
if (p)
{
show (p->left);
cout << " " << p->info;
show (p->right);
}
}
void main()
{
int num;
fraction n(0, 1); // Дробь для ввода
TREE
// Интерфейс работы с деревом
do
{
clrscr();
cout << "Элементы данного дерева: \n";
tree.show();
cout << "\n\nВыберете действие\n\
<1> Добавить элемент в дерево\n\
<2> Удалить элемент из списка\n\
<3> Вывести элементы дерева\n\
<4> Поиск элемента дерева по значению\n\
<5> Закончить\n";
num = getch();
switch (num)
{
case '1':
cout << "Введите значение узла \n";
cin >> n;
tree.insert(n);
break;
case '2':
cout << "Введите значение узла \n";
cin >> n;
tree.remove(n);
break;
case '3':
tree.show();
cout << "\n Нажмите любую клавишу для продолжения...";
getch();
break;
case '4':
cout << "Введите значение узла \n";
cin >> n;
if (tree.find(n))
cout << "В этом дереве есть число " << n << endl;
else
cout << "В этом дереве нет числа " << n << endl;
cout << "\n Нажмите любую клавишу для продолжения...";
getch();
}
} while (num != '5');
}
^
Результаты работы программы
Элементы данного дерева:
-5/2 -6/3 -3/5 -2/5 2/7 2/5 3/5 3/4
Выберете действие
<1> Добавить элемент в дерево
<2> Удалить элемент из списка
<3> Вывести элементы дерева
<4> Поиск элемента дерева по значению
<5> Закончить
Введите значение узла
-2
1
В этом дереве есть число -2/1
Нажмите любую клавишу для продолжения...
ЛИТЕРАТУРА
- Белецкий Я. Турбо Си++: Новая разработка. – М.: Машиностроение, 1994. – 400 с.
- Вайнер Р., Пинстон Л. С++ изнутри. – Киев: «ДиаСофт», 1993. – 304 с.
- Дьюхарст С., Старк К. Программирование на С++. – Киев: «ДиаСофт», 1993. – 272 с.
- Лукас П. С++ под рукой. – Киев: «ДиаСофт», 1993. – 176 с.
- Намиот Д.Е. Язык программирования TURBO C++: Учеб. пособие / Под ред. В.А. Сухомлинова. – М.: МГУ, 1991. – 121 с.
- Рассохин Д. От Си к Си++. – М.: Издательство «ЭДЕЛЬ», 1993. – 128 с.
- Подбельский В.В. Язык Си++. – М.: Финансы и статистика, 2002. – 560 с.
- Страуструп Б. Язык программирования Си++. – Киев: «ДиаСофт», 1993. Ч. 1. – 264 с. Ч. 2. – 296 с.
- Тан К.Ш. Символьный С++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования / К.Ш. Тан, В.-Х. Стиб В.-Х, Й. Харди. – М.: Мир, 2001. – 622 с.
- Топп У., Форд У. Структуры данных в С++. – М.: ЗАО «Издательство БИНОМ», 1999. – 816 с.
- Шамис В. Borland C++ Builder 5: учебный курс. – СПб.: Питер, 2002. – 688 с.
- Шилдт Г. Теория и практика С++. – СПб.: BHV – Санкт-Петербург, 1996. – 416 с.
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ…………………………………………………………………………………..3
- ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ Си++………………………………....4
- Локальные и глобальные переменные………………………………………….4
- Подпрограммы и их аргументы…………………………………………………4
- Определение данных……………………………………………………………..5
- Операторы динамического распределения памяти…………………………….8
- Перегрузка функций и операций………………………………………………..9
- Локальные и глобальные переменные………………………………………….4
- КЛАССЫ И ОБЪЕКТЫ…………………………………………………………….13
- Класс как обобщение структуры………………………………………………13
- Определение первичного класса……………………………………………….16
- Перегрузка операций для класса………………………………………………18
- Конструкторы…………………………………………………………………...21
- Список инициализации…………………………………………………………23
- Деструктор………………………………………………………………………24
- Дружественные классы…………………………………………………………27
- Статические элементы класса………………………………………………….29
- Шаблоны функций……………………………………………………………...31
- Класс как обобщение структуры………………………………………………13
- КОНТЕЙНЕРНЫЕ КЛАССЫ……………………………………………………..38
- Шаблоны классов……………………………………………………………….38
- Параметризованные очереди и стеки………………………………………….41
- Бинарные деревья……………………………………………………………….45
- Определение класса множества………………………………………………..51
- Шаблоны классов……………………………………………………………….38
- ПРОИЗВОДНЫЕ КЛАССЫ………………………………………………………..63
- Определение производного класса…………………………………………….63
- Доступ к полям и функциям базового класса…………………………………64
- Класс дерева поиска…………………………………………………………….66
- Параметризованный связный список………………………………………….68
- Множественное наследование…………………………………………………73
- Виртуальные классы……………………………………………………………76
- Определение производного класса…………………………………………….63
- ВИРТУАЛЬНЫЕ ФУНКЦИИ……………………………………………………..81
- Переопределение составной функции………………………………………...81
- Организация списка объектов различного типа………………………………83
- Техническая реализация виртуальных функций……………………………...86
- Виртуальные деструкторы……………………………………………………..87
- Абстрактные классы……………………………………………………………88
- Переопределение составной функции………………………………………...81
ЗАКЛЮЧЕНИЕ…………………………………………………………………………….98
РАСЧЕТНО-ГРАФИЧЕСКОЕ ЗАДАНИЕ 1……………………………………………99
РАСЧЕТНО-ГРАФИЧЕСКОЕ ЗАДАНИЕ 2…………………………………………..112
РАСЧЕТНО-ГРАФИЧЕСКОЕ ЗАДАНИЕ 3…………………………………………..121
ЭКЗАМЕНАЦИОННЫЕ ВОПРОСЫ И ЗАДАЧИ…………………………………...126
ЛИТЕРАТУРА…………………………………………………………………………….133
Учебное издание
Ахмет Аксанович Хусаинов
Наталья Николаевна Михайлова
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
^
Учебное пособие
Редактор Е.В. Трифонова
ЛР № 020825 от 21.09.93
Подписано в печать 13.08.2003.
Формат 60 х 84 1/16. Бумага писчая. Печать офсетная.
Усл. печ. л. 15,46. Уч.-изд. л. 7,15. Тираж
Редакционно-издательский отдел ГОУВПО «Комсомольский-
на-Амуре государственный технический университет»
681013, Комсомольск-на-Амуре, пр. Ленина, 27.
Полиграфическая лаборатория ГОУВПО «Комсомольский-
на-Амуре государственный технический университет»
681013, Комсомольск-на-Амуре, пр. Ленина, 27.5>4>3>2>1>5>4>3>2>1>