В тех задачах, где нужно выполнять операции сложения, вычитания и т.п. имеется в виду операции с созданными вами типами данных, например:
HexNumber one = new HexNumber("ab10"); HexNumber two = new HexNumber("cd05"); Console.WriteLine(one + two);
Для реализации операции сложения, как в примере выше, в вашем классе нужно сделать Перегрузку операторов. (На лекциях этого не было, но ничего сложного там нет)
Построить систему классов для описания плоских геометрических фигур: круга, квадрата, прямоугольника. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и поворота на заданный угол.
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения составных частей адреса, создания и уничтожения объектов этого класса.
Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел.
Составить описание класса для работы с цепными списками строк (строки произвольной длины) с операциями включения в список, удаления из списка элемента с заданным значением данного, удаления всего списка или конца списка, начиная с заданного элемента.
Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами.
Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность пе ремещения прямоугольников на плоскости, изменения размеров, построения наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.
Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы индексов, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, умножения и деления всех элементов массива на скаляр, печати (вывода на экран) элементов массива по индексам и всего массива.
Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.
Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта-многочлена, печать (вывод на экран) описания многочлена.
Составить описание класса одномерных массивов строк, каждая строка которых задается длиной и указателем на выделенную для нее память. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.
Составить описание объектного типа TMatrix, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
Простые и иерархические меню.
Спроектировать простое меню в одной строке экрана. Меню обеспечивает перебор пунктов в результате нажатия на клавишу Пробел, позволяет зафиксировать выбор нажатием на клавишу Enter или отказаться от выбора нажатием на клавишу Esc. После выбора одного из пунктов в программу возвращается какое-то значение, связанное с выбранным пунктом, например символ. При отказе от выбора в программу возвращается #27.
Перед началом работы меню ему надо передать названия пунктов и возвращаемые символы (ими могут быть первые буквы пунктов или какие-то специальные символы). Все это можно сделать в форме строки вида «Первое Второе Третье» или «Первое (а) Второе (о) Третье (с)» (здесь за названием пункта следует в скобках возвращаемый символ).
Состояние меню характеризуется координатами меню на экране, номером отмеченного пункта, общим количеством пунктов, перечнем названий пунктов и возвращаемых символов (во втором варианте представления).
Методами объекта являются:
Создать новый объект TNeatMenu, наследующий TMenu, который, в отличие от своего предка, будет восстанавливать вид экрана. Для этого нужно добавить новое поле store, где будет храниться прежний экран во время действия меню, перекрыть метод init и добавить метод done, который восстанавливает состояние экрана.
Создать меню, которое изображает себя в форме столбца. Для этого рационально воспользоваться виртуальными методами. Достаточно изменить метод draw объекта TNeatMenu и объявить одноименные методы виртуальными.
Разместить объекты в динамической памяти, для этого достаточно описать указатели на них.
Построить сложное иерархическое меню: пробел будет открывать главное меню, последовательное нажатие на клавиши Enter и Пробел будет разворачивать подсвеченный пункт в подменю или, если пункт находится на нижнем уровне, клавиша Enter будет сворачивать подменю. Нажатие на клавишу Esc закан чивает работу программы.
Построить иерархическое меню: пробел будет открывать главное меню, нажатие на клавишу Enter будет разворачивать подсвеченный пункт в меню или, если пункт находится на самом нижнем уровне, клавиша Enter сворачивает подменю. Нажатие на клавишу Esc заканчивает работу программы. Нижний уровень — вертикальный.
Составить программу, работающую со связанными списками. Мы будем рассматривать связанный список как объект, содержащий связанный список данных и операций (методов), которые вы можете с ними выполнять.
Связанный список данных состоит из указателей на начало («голову») и конец («хвост») связанного списка (в нашем примере из-за его гибкости используется дву направленный связанный список). Каждый элемент связанного списка представляет собой реализацию отдельного объекта. Возможности, необходимые для использования связанного списка, предоставляют следующие операции:
Вы можете видеть, как объект связанного списка наследуется объектами стека или очереди, поскольку очередь и стек можно реализовать как связанный список с ограниченным числом операций. Например, можно реализовать очередь в виде связанного списка, в котором элементы могут добавляться к концу и извлекаться из начала. Если вы таким образом реализуете очередь, то нужно запретить наследуемые методы связанного списка, которые для очереди недопустимы (например, вставку в середину списка).
Определить объект TFish — аквариумная рыбка. Рыбка имеет координаты, скорость, размер, цвет, направление движения. Методами объекта являются:
Определить объект TAquarium, который является местом обитания рыб (см. задачу 14 данного раздела). Он представляет собой область экрана, наполненную водой. Рыбы живут в аквариуме, поэтому экземпляры объекта TFish должны быть полями объекта TAquarium.
Методы:
Определить два объекта TPike и ТКагр, которые наследуют объект TFish (см. задачу 14). Оба они отличаются от TFish тем, что по-разному изображают себя на экране: TPike — в виде зеленой стрелки, а ТКагр — в виде красного треугольника. Воспользуйтесь виртуальными методами. Для этого вернитесь к определению TFish и откорректируйте его, сделав метод draw пустым и виртуальным.
Объединить карпов и щук (см. задачу 16) в две стаи. Стая — это связанный список рыб. Для связи добавьте в объекты TPike и ТКагр поле next — указатель на следующую рыбу в стае (связанный список). Сделайте аквариум владельцем не отдельных рыб, а двух стай и позвольте пользователю пополнять стаи, вводя рыб с клавиатуры.
Позволить щукам (см. задачу 16) проявить свой дурной характер и поедать карпов, как только они их увидят. Здесь возникнет проблема — установить, какого именно карпа видит щука. Она решается путем просмотра всей стаи карпов и поиска того, чьи координаты близки к координатам данной шуки. Найденный карп удаляется из стаи.
Составить программу для игры в шашки. Шашка каждого нового цвета выступает в качестве отдельного объекта. Характеристики шашки — цвет и позиция на доске. Методы — перемещение. Не забудьте о таких объектах, как «дамки».
Составить программу для игры в домино. В качестве объектов выступают кости домино. Методы — способы выставления той или иной кости.
Составить программу для игры в шахматы. Каждая уникаль ная шахматная фигура выступает в качестве отдельного объекта. Она характеризуется цветом, положением на доске, способом перемещения. Предусмотреть возможность превращения пешки в ферзя.
Реализовать в виде класса набор методов для выполнения следующих операций над комплексными числами:
Реализовать в виде класса набор методов для выполнения следующих операций над обыкновенными дробями вида ^ (Р — целое, Q — натуральное):
Реализовать в виде класса набор методов для выполнения следующих операций с квадратными матрицами:
Реализовать в виде класса набор методов для выполнения следующих операций над векторами:
Реализовать в класс для выполнения следующих операций над натуральными числами в Р
-ичной системе счисления (2 < Р < 9
):
Реализовать класс для выполнения следующих операций над натуральными числами в шестнадцатеричной системе счисления:
Реализовать класс для выполнения следующих операций над длинными числами:
Реализовать класс для выполнения операций с многочленами от одной переменной (первый многочлен степени т
, второй — степени п
):
к
;х0
.Разработать способ представления множеств, содержащих более 255 элементов (до 2000). Создать модуль, позволяющий вы полнять следующие операции над элементами таких множеств: