Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Объектно-ориентированное программирование

Курсовая Купить готовую Узнать стоимостьмоей работы

Приложение 2. Листинг файла Set. cpp. Объектно-ориентированный анализ и проектирование системы на языке UML. Приложение 3. Листинг файла main. cpp. Приложение. Листинги программ. Инструкция пользователю. Структура программы. Описание системы. Постановка задачи. Список литературы. Программная реализация на C4. 1. Краткая характеристика инструментальной программной среды. Введение. Приложение 1… Читать ещё >

Содержание

  • 1. Введение
  • 2. Описание системы. Постановка задачи
  • 3. Объектно-ориентированный анализ и проектирование системы на языке UML
  • 4. Программная реализация на C
    • 4. 1. Краткая характеристика инструментальной программной среды
    • 4. 2. Структура программы
    • 4. 3. Инструкция пользователю
  • Список литературы
  • Приложение. Листинги программ
  • Приложение 1. Листинг файла Set. h
  • Приложение 2. Листинг файла Set. cpp
  • Приложение 3. Листинг файла main. cpp

Объектно-ориентированное программирование (реферат, курсовая, диплом, контрольная)

cur; }inline bool operator≠(const Iterator& r) const { return !(*this == r); }};//Конструктор по умолчаниюSet ();//Конструктор копирования нужен для использования//функцийSet (const Set& s);//Деструктор удаляет список~Set ();//Добавляем данные к множествуvoid insert (int data);//Удаляем данные из множестваvoid erase (int data);//Ищем данные во множествеNode* lower_bound (int data) const;Node* find (int data) const;//Возвращаем итераторы на начало и конец множестваIterator begin () const;Iterator end () const;//Возвращаем правду если множество не пустоеbool empty () const;//Вывод множества в поток выводаstd: ostream& print (std:ostream& out) const;//Чтение множества из потока вводаstd: istream& read (std:istream& in);};//Интерфейс бинарной операции над множествамиclassBinaryOperation {public:virtual Set apply (const Set& a, const Set& b) const = 0;};//Объединениемножествclass Union: public BinaryOperation {Set apply (const Set& a, const Set& b) const;};//Пересечениемножествclass Intersection: public BinaryOperation {Set apply (const Set& a, const Set& b) const;};#endif // !_NODE_Приложение 2. Листинг файла Set. cpp/* * Файл Set. cpp */#include <stdexcept>#include «Set.h» Node: Node (int d):Data (d), pPrev (nullptr), pNext (nullptr){}Node:~Node (){if (next ()) {next ()->prev (nullptr);delete next (); //Удаляем вначале справа, //выщелкивая указатели}if (prev ()) {//…, апотомслеваprev ()->next (nullptr);delete prev ();}}Node * Node: prev () const{return pPrev;}void Node: prev (Node * p){pPrev = p;}Node * Node: next () const{return pNext;}void Node: next (Node * p){pNext = p;}void Node: insert_after (Node * p){//Если указатель p не нулевой, то включаем ноду справаif (p) {p->prev (this);if (next ()) next ()->prev (p);p->next (next ());next (p);}}void Node: insert_before (Node * p){//Если указатель p не нулевой, то включаем ноду слеваif (p) {p->next (this);if (prev ()) prev ()->next (p);p->prev (prev ());prev (p);}}void Node: data (int d){Data = d;}int Node: data () const{return Data;}Set:Set ():Head (nullptr), Tail (nullptr){}Set:Set (const Set & s):Head (nullptr), Tail (nullptr){for (int d: s) {this->insert (d);}}Set:~Set (){delete Head;}void Set: insert (int data){//Храним данные в отсортированном видеNode * n = new Node (data);if (!Head) {Head = n;Tail = n;}else {Node * cur = lower_bound (data);if (cur) {//Если такое значение уже есть, //тоничегонеделаемif (cur->data () == data) return;if (cur == Head) {//Данные образуют новую головуHead->insert_before (n);Head = n;}else {cur->insert_before (n);}}else {//ДанныепопадаютвхвостTail->insert_after (n);Tail = n;}}}void Set: erase (int data){Node * n = find (data), * c = n->next ();//Отключаем и удаляем указатель, проверяя //попутно не является ли он хвостом или головойif (n->next ()) {n->next ()->prev (n->prev ());n->next (nullptr);}else Tail = n->prev ();if (n->prev ()) {n->prev ()->next (c);n->prev (nullptr);}else Head = c;delete n;}Node * Set: find (int data) const{Node * n = lower_bound (data);if (!n — n->data () ≠ data) return nullptr;return n;}int Set: Iterator:operator*() const{if (!cur) throw std: runtime_error («Попыткаразыменования пустого итератора.»);returncur->data ();}Set:Iterator & Set: Iterator:operator++(){if (!cur) throw std: runtime_error («Попыткаинкрементапустогоитератора.»);cur = cur->next ();return *this;}Set:Iterator Set: Iterator:operator++(int){if (!cur) throw std: runtime_error («Попыткаинкрементапустогоитератора.»);Iterator next (*this);cur = cur->next ();return next;}Set:Iterator & Set: Iterator:operator—(){if (!cur) throw std: runtime_error («Попыткадекрементапустогоитератора.»);cur = cur->prev ();return *this;}Set:Iterator Set: Iterator:operator—(int){if (!cur) throw std: runtime_error («Попыткадекрементапустогоитератора.»);Iterator prev (*this);cur = cur->prev ();return prev;}Set:Iterator Set: begin () const{return Iterator (Head);}Set:Iterator Set: end () const{if (Tail) return Iterator (Tail->next ());else return Iterator (nullptr);}bool Set: empty () const{return !Head;}std:ostream & Set: print (std:ostream & out) const{for (int d: *this) {out << d << ««;}out << std: endl;return out;}std:istream & Set: read (std:istream & in){std:string s;int a;//Читаем первое число для того, чтобы убедится, //что не было лишних символов новой строкиin >> a;this->insert (a);//Читаемвсюстрокуstd:getline (in, s);std:istringstream is (s);while (is >> a) {this->insert (a);}return in;}Node * Set: lower_bound (int data) const{Node * cur = Head;while (cur && cur->data () < data) {cur = cur->next ();}return cur;}Set Union: apply (const Set & a, const Set & b) const{Set res (a);for (int d: b) res. insert (d);return res;}Set Intersection: apply (const Set & a, const Set & b) const{Set res;for (int d: a) if (b.find (d)) res. insert (d);return res;}Приложение 3. Листинг файла main. cpp/*Файл main. cpp: * Программа тестирует заданный класс.*/#include <iostream>#include <locale.h>#include «Set.h» intmain () {//Устанавливаем возможность вывода кириллицы в консольsetlocale (LC_ALL, «Russian»);try {std:cout<< «Начинаем тестирование класса, представляющего» << «множество целых чисел на основе связанного «<< «списка.» ;std:cout<< «n1)Добавление и удаление элемента.» << «nВведите множество целых чисел,<< «разделенных пробелами,» << «и нажмите ENTER (как минимум одно число): «;Set set;set.read (std:cin);std:cout << «nВыввеличисла: «;set.print (std:cout);std:cout<< «nСреди введенных чисел выберите число,» <<» которое вы хотите удалить,» << «nвведите его и нажмите ENTER «<< «(только одно число): «;inta;std:cin >> a;if (!set.find (a)) std: cout<< «nВэтоммножественетчисла: «<< a<< std: endl;else {set.erase (a);std:cout << «nТеперь множество имеет такой вид: «;set.print (std:cout);}std:cout<< «n2) Тестируем операцию объединения.» << «nВведите первое множество целых чисел,» << «разделенных пробелами,» << «nи нажмите ENTER (как минимум одно число): «;Set set1;set1.read (std:cin);std:cout<< «nВведите второе множество целых чисел,» << «разделенных пробелами,» << «nи нажмите ENTER (как минимум одно число): «;Setset2;set2.read (std:cin);std:cout<< «nОбъединение двух множеств имеет вид: «;BinaryOperation * op1 = newUnion;op1->apply (set1, set2).print (std:cout);std:cout<< «n3)Тестируем операцию пересечения.» << «nВведите первое множество целых чисел,» << «разделенных пробелами,» << «nи нажмите ENTER (как минимум одно число): «;Setset3;set3.read (std:cin);std:cout<< «nВведите второе множество целых чисел,» << «разделенных пробелами,» << «nи нажмите ENTER (как минимум одно число): «;Setset4;set4.read (std:cin);std:cout<< «nПересечение двух множеств имеет вид: «;BinaryOperation * op2 = new Intersection;Set intersection_result = op2->apply (set3, set4);if (intersection_result.empty ()) std: cout << «пустоемножествоn» ;else intersection_result.print (std:cout);}catch (const std: exception& ex) {std:cout<< «В ходе выполнения возникло исключение: n» << ex. what () << std: endl;}return 0;}.

Показать весь текст

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

  1. Алгоритмы и структуры данных для начинающих: множества. [Элек-тронный ресурс] // https://tproger.ru/translations/sets-for-beginners/: Telegram-канал для программистов 02.09.2015. (дата обращения: 23.05.2017)
  2. Множество (тип данных). [Электронный ресурс] // https://ru.wikipedia.org/wiki/Множество_(тип_данных): Материал из Википедии — свободной энциклопедии. (дата обращения: 21.05.2017)
  3. . Язык программирования С++. 3-е изд. М.: Бином, 1999. 991 с.
  4. Д.Н. Искусство программирования для ЭВМ. Том 1. Основные алгоритмы. М.: Мир 1976. 734 с.
  5. Std:set. [Электронный ресурс]// http://en.cppreference.com/w/cpp/container/set: cppreference.com. (дата обращения: 21.05.2017)
  6. Std:multiset. [Электронный ресурс]// http://en.cppreference.com/w/cpp/container/multiset: cppreference.com. (дата обращения: 21.05.2017)
  7. Std:unordered_set. [Электронныйресурс] // http://en.cppreference.com/w/cpp/container/unordered_set: cpprefe-rence.com. (датаобращения: 21.05.2017)
  8. Std:unordered_multiset. [Электронныйресурс] // http://en.cppreference.com/w/cpp/container/ unordered_multiset: cppreference.com. (датаобращения: 21.05.2017)
  9. Set. [Электронныйресурс] // http://www.boost.org/doc/libs/140_0/libs/fusion/doc/html/fusion/container/set.html: BoostC++ libraries. (дата обращения: 19.05.2017)
  10. Буч Г., Якобсон А., Рамбо Дж.UML. Классика CS.2-е изд. СПб.: Питер 2006. 736 с.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ