Скачать презентацию 10 Пример задания 10 1 Постановка задачи Скачать презентацию 10 Пример задания 10 1 Постановка задачи

10.Пример задания.pptx

  • Количество слайдов: 18

10. Пример задания 10. Пример задания

10. 1. Постановка задачи Прикладная программа должна иметь возможность обрабатывать разные геометрические фигуры – 10. 1. Постановка задачи Прикладная программа должна иметь возможность обрабатывать разные геометрические фигуры – окружность, прямоугольник, … Для каждой фигуры необходимо иметь возможность вычислить ее площадь и периметр (длину окружности), вывести координаты и определить тип фигуры 2

10. 1. Постановка задачи (продолжение) Окружность задается координатами центра и значением радиуса. Прямоугольник задается 10. 1. Постановка задачи (продолжение) Окружность задается координатами центра и значением радиуса. Прямоугольник задается координатами двух противоположных углов. Различные геометрические фигуры должны храниться в одном контейнере. Каждая фигура однозначно идентифицируется своим именем 3

10. 1. Постановка задачи (продолжение) Необходимо иметь возможность поместить новую фигуру в контейнер или 10. 1. Постановка задачи (продолжение) Необходимо иметь возможность поместить новую фигуру в контейнер или заменить существующую фигуру; найти фигуру, указав ее имя; вывести все содержимое контейнера; иметь возможность последовательно выбирать все фигуры из контейнера. Емкость контейнера не должна быть ограничена. 4

10. 2. Иерархия классов Assoc. It * 1 Итератор Assoc Ассоциативный массив * Pair 10. 2. Иерархия классов Assoc. It * 1 Итератор Assoc Ассоциативный массив * Pair 1 Строка String Элемент ассоциативного массива 1 Shape Фигура 5

10. 2. Иерархия классов (продолжение) Shape Фигура Окружность Circle 1 Rect Прямоугольник 2 Point 10. 2. Иерархия классов (продолжение) Shape Фигура Окружность Circle 1 Rect Прямоугольник 2 Point Точка 6

10. 3. Структура программы Файл Описание Shape. h Определение классов: Point (точка) абстрактный базовый 10. 3. Структура программы Файл Описание Shape. h Определение классов: Point (точка) абстрактный базовый класс Shape (фигура) производный класс Circle (окружность) производный класс Rect (прямоугольник) Shape. cpp Реализация классов Point, Shape, Circle и Rect Assoc_1. h Определение классов: Pair – структура; элемент контейнера Assoc – контейнер; ассоциативный массив Assoc. It – класс-итератор для контейнера Assoc_1. cpp Реализация классов Pair, Assoc и Assoc. It Appl_1. cpp Тестирующая программа для отладки разработанных классов 7

10. 8. Элемент контейнера: Pair (из задачи 6) struct Pair { string first; int 10. 8. Элемент контейнера: Pair (из задачи 6) struct Pair { string first; int second; Pair(): first(string()), second(0){} Pair(const string &indx, int val = 0): first(indx), second(val){} }; ostream & operator <<(ostream &s, const Pair &p); 16

10. 9. Контейнерный класс: Assoc (из задачи 6) class Assoc{ private: static const int 10. 9. Контейнерный класс: Assoc (из задачи 6) class Assoc{ private: static const int QUOTA = 10; int cnt, cur; Pair *arr; int find(const string &) const; public: Assoc(): cnt(QUOTA), cur(0), arr(new Pair[QUOTA]){ } 18

10. 9. Контейнерный класс: Assoc (из задачи 6 – продолжение) Assoc(const Assoc&); ~Assoc() {delete 10. 9. Контейнерный класс: Assoc (из задачи 6 – продолжение) Assoc(const Assoc&); ~Assoc() {delete [ ] array; } Assoc& operator = (const Assoc &); int & operator [](const string &); friend class Assoc. It; typedef Assoc. It Iterator; Iterator begin(); Iterator end(); }; 19

10. Класс – итератор (из задачи 6) class Assoc. It { private: Pair *cur; 10. Класс – итератор (из задачи 6) class Assoc. It { private: Pair *cur; public: Assoc. It(): cur(0){ } Assoc. It(Pair *a): cur(a){ } 24

10. Класс – итератор (из задачи 6 – продолжение) Pair & operator *(); Assoc. 10. Класс – итератор (из задачи 6 – продолжение) Pair & operator *(); Assoc. It & operator ++( ); Assoc. It operator ++(int); int operator !=(const Assoc. It &) const; int operator ==(const Assoc. It &) const; }; 25

10. 11. Прикладная программа // Добавление фигуры int Add(Assoc &a) { Shape *ptr = 10. 11. Прикладная программа // Добавление фигуры int Add(Assoc &a) { Shape *ptr = NULL; Circle c; Rect p; string name; int ans; const char *alt; 26

10. 11. Прикладная программа (продолжение) while(ans = Answer(Sh, Num. Sh)){ cout << 10. 11. Прикладная программа (продолжение) while(ans = Answer(Sh, Num. Sh)){ cout << "Enter a shape name: --> "; cin >> name; switch(ans){ // что нужно ввести case 1: alt = "Enter values for center and radius: --> "; ptr = &c; break; 27

10. 11. Прикладная программа (продолжение) case 2: alt = 10. 11. Прикладная программа (продолжение) case 2: alt = "Enter coords for two opposite tops: --> "; ptr = &p; break; } 28

10. 11. Прикладная программа (продолжение) cout << alt; cin >> (*ptr); cin. ignore(80, 'n'); 10. 11. Прикладная программа (продолжение) cout << alt; cin >> (*ptr); cin. ignore(80, 'n'); a[name] = *ptr; } return 0; } 29

10. 11. Прикладная программа (продолжение) int Find(Assoc &a) { string name; cout << 10. 11. Прикладная программа (продолжение) int Find(Assoc &a) { string name; cout << "Enter a shape name: --> "; cin >> name; Assoc: : Iterator p = a. find(name); if(p == a. end()){ cout << "The Shape with Name "" << name << "" is absent in container « << endl; return -1; } 30

10. 11. Прикладная программа (продолжение) cout << 10. 11. Прикладная программа (продолжение) cout << "The Shape with Name "" << name << "" is a " << Names[(*p). second->i. Am()] << endl; cout << (*p) << endl; cout << "It's perimeter is equal to " << (*p). second->perimeter() << " and it's area is equal to " << (*p). second->area() << endl; return 0; } 31