Задачи по объектно ориентированному программированию

Стартовая

Основы программирования

Программирование на JAVA

Программирование на C++

Программирование на Pascal

Задачи по программированию

Навигация

6.17. Задачи по теме «Объектно-ориентированное программирование»

1. Построить систему классов для описания плоских геометрических фигур: круга, квадрата, прямоугольника. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и поворота на заданный угол.

2. Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения составных частей адреса, создания и уничтожения объектов этого класса.

3. Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел.

4. Составить описание класса для работы с цепными списками строк (строки произвольной длины) с операциями включения в список, удаления из списка элемента с заданным значением данного, удаления всего списка или конца списка, начиная с заданного элемента.

5. Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами.

6. Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольников на плоскости, изменения размеров, построения наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.

7. Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы индексов, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, умножения и деления всех элементов массива на скаляр, печати (вывода на экран) элементов массива по индексам и всего массива.

8. Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным

1. Построить систему классов для описания плоских геометрических фигур: круга, квадрата, прямоугольника. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и поворота на заданный угол.

2. Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения составных частей адреса, создания и уничтожения объектов этого класса.

3. Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел.

4. Составить описание класса для работы с цепными списками строк (строки произвольной длины) с операциями включения в список, удаления из списка элемента с заданным значением данного, удаления всего списка или конца списка, начиная с заданного элемента.

5. Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами.

6. Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольников на плоскости, изменения размеров, построения наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.

7. Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы индексов, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, умножения и деления всех элементов массива на скаляр, печати (вывода на экран) элементов массива по индексам и всего массива.

8. Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.

Читайте также:  Выравнивание полей в ворде

9. Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта-многочлена, печать (вывод на экран) описания многочлена.

10. Составить описание класса одномерных массивов строк, каждая строка которых задается длиной и указателем на выделенную для нее память. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.

11. Составить описание объектного типа TMatr, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.

12. Простые и иерархические меню.

а) Спроектировать простое меню в одной строке экрана. Меню обеспечивает перебор пунктов в результате нажатия на клавишу Пробел, позволяет зафиксировать выбор нажатием на клавишу Enter или отказаться от выбора нажатием на клавишу Esc. После выбора одного из пунктов в программу возвращается какое-то значение, связанное с выбранным пунктом, например символ. При отказе от выбора в программу возвращается #27.

Перед началом работы меню ему надо передать названия пунктов и возвращаемые символы (ими могут быть первые буквы пунктов или какие-то специальные символы). Все это можно сделать в форме строки вида

«Первое Второе Третье»

«Первое (а) Второе (b) Третье (с)» (здесь за названием пункта следует в скобках возвращаемый символ).

Состояние меню характеризуется координатами меню на экране, номером отмеченного пункта, общим количеством пунктов, перечнем названий пунктов и возвращаемых символов (во втором варианте представления).

Методами объекта являются:

Init — заполняет поле названий пунктов, подсчитывает количество пунктов, делает выбранным первый пункт;

Select — позволяет выбрать пункт меню и возвращает символ выбранного пункта, при отказе от выбора возвращает #27;

Draw — рисует меню, выделяя выбранный пункт цветом;

LeftBoard — возвращает начало названия данного пункта;

Len — возвращает длину названия пункта;

WhatSel — возвращает символ выбранного пункта.

б) Создать новый объект TNeatMenu, наследующий TMenu, который, в отличие от своего предка, будет восстанавливать вид экрана. Для этого нужно добавить новое поле Store, где будет храниться прежний экран во время действия меню, перекрыть метод Init и добавить метод Done, который восстанавливает состояние экрана.

в) Создать меню, которое изображает себя в форме столбца. Для этого рационально воспользоваться виртуальными методами. Достаточно изменить метод Draw объекта TNeatMenu и объявить одноименные методы виртуальными.

г) Разместить объекты в динамической памяти, для этого достаточно описать указатели на них.

д) Построить сложное иерархическое меню: пробел будет открывать главное меню, последовательное нажатие на клавиши Enter и Пробел будет разворачивать подсвеченный пункт в подменю или, если пункт находится на нижнем уровне, клавиша Enter будет сворачивать подменю. Нажатие на клавишу Esc заканчивает работу программы.

е) Построить иерархическое меню: пробел будет открывать главное меню, нажатие на клавишу Enter будет разворачивать подсвеченный пункт в меню или, если пункт находится на самом нижнем уровне, клавиша Enter сворачивает подменю. Нажатие на клавишу Esc заканчивает работу программы. Нижний уровень — вертикальный.

13. Составить программу, работающую со связанными списками. Мы будем рассматривать связанный список как объект, содержащий связанный список данных и операций (методов), которые вы можете с ними выполнять. Связанный список данных состоит из указателей на начало («голову») и конец («хвост») связанного списка (в нашем примере из-за его гибкости используется двунаправленный связанный список). Каждый элемент связанного списка представляет собой реализацию отдельного объекта. Возможности, необходимые для использования связанного списка, предоставляют следующие операции:

Читайте также:  Изменить соотношение сторон монитора

• создание связанного списка (выделение для него памяти);

• уничтожение связанного списка (освобождение используемой памяти);

• инициализация связанного списка;

• деинициализация связанного списка;

• вставка элемента в середину списка перед существующим элементом;

• присоединение элемента к концу связанного списка;

• удаление элемента из связанного списка;

• возвращение первого элемента связанного списка;

• возвращение последнего элемента связанного списка.

Необходимо иметь в виду, что создание и инициализация, а также уничтожение и деинициализация методов — это не синонимы. При создании и уничтожении методы create и destroy выделяют и освобождают память для объекта (связанного списка), а методы инициализации и деинициализации initialize и deinitialize только инициализируют и деинициализируют ранее выделенные экземпляры объекта. Вы можете видеть, как объект связанного списка наследуется объектами стека или очереди, поскольку очередь и стек можно реализовать как связанный список с ограниченным числом операций. Например, можно реализовать очередь в виде связанного списка, в котором элементы могут добавляться к концу и извлекаться из начала. Если вы таким образом реализуете очередь, то нужно запретить наследуемые методы связанного списка, которые для очереди недопустимы (например, вставку в середину списка).

14. Определить объект TFish — аквариумная рыбка. Рыбка имеет координаты, скорость, размер, цвет, направление движения. Методами объекта являются:

• Init — устанавливает значения полей объекта и рисует рыбу на экране методом Draw.

• Draw — рисует рыбу в виде уголка с острием в точке Coord и направленного острием по ходу движения рыбы.

• Look — проверяет несколько точек на линии движения рыбы. Если хоть одна из них отличается по цвету от воды, возвращаются ее цвет и расстояние до рыбы.

• Run — перемещает рыбу в текущем направлении на расстояние, зависящее от текущей скорости рыбы. Иногда случайным образом меняет направление движения рыбы. Если рыба видит препятствие, направление движения меняется, пока препятствие не исчезнет из поля зрения рыбы.

15. Определить объект TAquarium, который является местом обитания рыб (см. задачу 14 данного раздела). Он представляет собой область экрана, наполненную водой. Рыбы живут в аквариуме, поэтому экземпляры объекта TFish должны быть полями объекта TAquarium.

• Init — включает графический режим, заполняет аквариум водой, камнями и рыбами.

• Run — организует бесконечный цикл, в котором выполняется метод Run всех обитателей аквариума.

• Done — выключает графический режим.

16. Определить два объекта TPike и TKаrр, которые наследуют объект Tfish (см. задачу 14). Оба они отличаются от TFish тем, что по-разному изображают себя на экране: TPike — в виде зеленой стрелки, а ТКаrр — в виде красного треугольника. Воспользуйтесь виртуальными методами. Для этого вернитесь к определению TFish и откорректируйте его, сделав Draw пустым и виртуальным.

17. Объединить карпов и щук (см. задачу 16) в две стаи. Стая — это связанный список рыб в динамической памяти. Для связи добавьте в объекты TPike и ТКаrр поле Next — указатель на следующую рыбу в стае. Сделайте аквариум владельцем не отдельных рыб, а двух стай и позвольте пользователю пополнять стаи, вводя рыб с клавиатуры.

18. Позволить щукам (см. задачу 16) проявить свой дурной характер и поедать карпов, как только они их увидят. Здесь возникнет проблема — установить, какого именно карпа видит щука. Она решается путем просмотра всей стаи карпов и поиска того, чьи координаты близки к координатам данной щуки. Найденный карп удаляется из стаи.

19. Составить программу для игры в шашки. Шашка каждого нового цвета выступает в качестве отдельного объекта. Характеристики шашки — цвет и позиция на доске. Методы — перемещение. Не забудьте о таких объектах, как «дамки».

20. Составить программу для игры в домино. В качестве объектов выступают кости домино. Методы — способы выставления той или иной кости.

21. Составить программу для игры в шахматы. Каждая уникальная шахматная фигура выступает в качестве отдельного объекта. Она характеризуется цветом, положением на доске, способом перемещения. Предусмотреть возможность превращения пешки в ферзя.

Читайте также:  Забыл аккаунт гугл на телефоне самсунг

22—25. Задачи 18—21 в графическом режиме. 26—35. Задачи 1-Х из раздела «Задачи по теме "Модули"».

Не нашли то, что искали? Воспользуйтесь поиском:

Как вы уже знаете данный ресурс посвящённ изучению ООП, здесь полностью представлена теоретическая часть, но я могу быть полностью уверенным, что бы освоить все азы ООП нужно много практики, тут я предоставляю задачи и задачники по всем рассматриваемым языкам на данном ресурсе.

Общие задачи по ООП:

1) Класс Дробное число со знаком (Fractions). Число должно быть представлено двумя полями: целая часть – длинное целое со знаком, дробная часть – беззнаковое короткое целое. Реализовать арифметические операции сложения, вычитания, умножения и операции сравнения. В функции main проверить эти методы.

2) Класс Деньги для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа unsigned char – для копеек. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой. Реализовать сложение, вычитание, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения. В функции main проверить эти методы.

3) Класс Равнобочная трапеция, члены класса: координаты 4-х точек. Предусмотреть в классе конструктор и методы: проверка, является ли фигура равнобочной трапецией; вычисления и вывода сведений о фигуре: длины сторон, периметр, площадь. В функции main продемонстрировать работу с классом: дано N трапеций, найти количество трапеций, у которых площадь больше средней площади.

4)Описать базовый класс Строка. Обязательные поля класса:

указатель pChar хранит адрес динамически выделенной памяти для размещения символов строки;
значение типа word хранит длину строки в байтах.
Реализовать обязательные методы следующего назначения:
-конструктор без параметров;
-конструктор, принимающий в качестве параметра строковый литерал; п конструктор, принимающий в качестве параметра символ;
-метод получения длины строки;
-метод очистки строки (делает строку пустой);
-деструктор.

Описать производный от Строка класс Комплексное число.

Строки данного класса должны состоять |из двух полей разделочных символом i. Первое поле задает значение действительной части числа, а второе – значение мнимой. Каждое из полей может содержать только символы десятичных цифр и символы – и +, определяющие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будет встречен любой символ, отличный от допустимых, объект класса Комплексное число должен принимать нулевое значение. Примеры строк: 33il2, -7U00, +5i-21.

Для класса Комплексное_число определить следующие методы:
-проверка на равенство;
-сложение чисел;
-умножение чисел.
Написать тестовую программу, которая демонстрирует работу методов базового и производного классов.

5) Описать шаблонный класс List для работы с однонаправленными списками в динамической памяти.

Для объектов класса List определить операции проверки списка на пустоту, добавления элемента в начато списка, в конец списка, подсчет числа вхождений элемента в список, удаление элемента из списка.

Продемонстрировать работу с шаблонным классом для списка с целыми элементами и с элементами-строками.

Задачник по ООП в С++

C++ ООП Задачи и упражнения (В.В Лаптев, А.В Морозов, А.В. Бокова) 2007

Задачи по ООП в Java

Для Java есть отличный совет, на сайте википедия содержится список структур данных, которые используются в данном языке реализовав их все , вы не только освоите ООП(т.к. Java полность объектно-ориентированный язык), но и узнаете большинство структур данных.

Задачи по ООП в PHP

ООП в скриптовых языках(РНР, Ruby) несколько сложнее в понимании, по этому я смею предложить поправктиковаться в java или C. Но если за вами больой опыт в скриптовых языках, то не бойтесь.

Задачник по ООП в Ruby

Всё сказанное про РНР так же равносильно и к Ruby, за исключением того, что Ruby полностью объектно-ориентированный, как и Java, по этому задачник из викиучебника подходит для данного курса.

Ссылка на основную публикацию
Adblock detector