Здравствуйте! Записался на ваш курс, но не понимаю как произвести оплату. Надо ли писать заявление и, если да, то куда отправлять? как я получу диплом о профессиональной переподготовке? |
Структуры
Встроенные структуры
Как уже говорилось, все значимые типы языка реализованы структурами. В библиотеке FCL имеются и другие встроенные структуры. Рассмотрим в качестве примера структуры Point, PointF, Size, SizeF, Rectangle, находящиеся в пространстве имен System.Drawing (при работе с консольным проектом это пространство нужно подключать). Данные структуры активно используются при работе с графическими объектами. Структуры Point, PointF определяют точки на плоскости. Свойства X и Y позволяют задавать координаты точки, целочисленные или вещественные. Для структур Size и SizeF свойства Height и Width задают высоту и ширину. Структуры Point и Size позволяют сформировать прямоугольную область - структуру Rectangle. Конструктору прямоугольника можно передать в качестве аргументов две структуры: точку, задающую координаты левого верхнего угла прямоугольника, и размер - высоту и ширину прямоугольника.
Между четырьмя структурами определены взаимные преобразования: точки можно преобразовать в размеры и наоборот, сложение и вычитание определено над точками и размерами, но не над точками, плавающий тип которых разными способами можно привести к целому. Ряд операций над этими структурами продемонстрирован в следующем примере:
public void TestPointAndSize() { Point pt1 = new Point(3,5), pt2 = new Point(7,10), pt3; PointF pt4 = new PointF(4.55f,6.75f); Size sz1 = new Size(10,20), sz2; SizeF sz3 = new SizeF(10.3f, 20.7f); pt3 = Point.Round(pt4); sz2 = new Size(pt1); Console.WriteLine ("pt1: " + pt1); Console.WriteLine ("sz2 = new Size(pt1): " + sz2); Console.WriteLine ("pt4: " + pt4); Console.WriteLine ("pt3 = Point.Round(pt4): " + pt3); pt1.Offset(5,7); Console.WriteLine ("pt1.Offset(5,7): " + pt1); Console.WriteLine ("pt2: " + pt2); pt2 = pt2+ sz2; Console.WriteLine ("pt2= pt2+ sz2: " + pt2); }//TestPointAndSize
Результаты его выполнения показаны на рис. 2.1.
Отметим, что метод ToString, определенный для этих структур, выдает строку со значениями полей в приемлемой для восприятия форме.
Еще раз о двух семантиках присваивания
В заключение разговора о ссылочных и развернутых типах построим класс CPoint, являющийся аналогом структуры Point. Не буду приводить описание этого класса, надеюсь, оно достаточно понятно. Ограничусь примером, в котором аналогичные действия выполняются над объектами, принадлежащими структуре Point и классу CPoint:
public void TestClassAndStructPoint() { string s = "Структуры: присваивание развернутого типа!"; Console.WriteLine(s); Point pt1 = new Point(3, 5), pt2; pt2 = pt1; Console.WriteLine("pt1: " + pt1); Console.WriteLine("pt2 = pt1: " + pt2); pt1.Offset(5, 7); Console.WriteLine("pt1.Offset(5,7): " + pt1); Console.WriteLine("pt2: " + pt2); s = "Классы: присваивание ссылочного типа!"; Console.WriteLine(s); CPoint cpt1 = new CPoint(3, 5), cpt2; cpt2 = cpt1; Console.WriteLine("cpt1: " + cpt1); Console.WriteLine("cpt2=cpt1: " + cpt2); cpt1.Offset(5, 7); Console.WriteLine("cpt1.Offset(5,7): " + cpt1); Console.WriteLine("cpt2: " + cpt2); }
Результаты вычислений показаны на рис. 2.2.
Действия над объектами Point и CPoint выполняются аналогичные, а результаты получаются разные: в конце вычислений pt1 и pt2 различны, а cpt1 и cpt2 совпадают. Объяснение этому понятно: в первом случае присваивание структур pt2 и pt1 - значимое, а для объектов cpt1 и cpt2 - ссылочное.
Архитектура Решения
Как обычно, для демонстрации примеров данной лекции построено Решение с именем лекции Ch2_2. В Решение включен единственный консольный проект с именем StructuresAndClasses. К проекту присоединены две DLL с именами ClassSamples и Geometrical_Figures, включенные в Решение Ch2_1, которое приведено в предыдущей лекции. Классы CPoint и SRational из этих библиотек используются в консольном проекте. Консольный проект содержит традиционный класс Testing, большое число его методов представляют собой различные тесты, которые иллюстрируют работу с различными объектами классов из DLL, присоединенных к консольному проекту.
Задачи
В задачах и проекте этой лекции все классы необходимо создавать в двух вариантах - как классы, принадлежащие ссылочному типу, и как структуры, принадлежащие развернутому типу. Windows-проект, строящийся в задачах, должен позволять оценить сходство и различие, появляющееся при работе с объектами ссылочных и развернутых типов.
- Создать DLL с классом Point, описывающим точку на плоскости, заданную декартовыми и полярными координатами. Среди методов класса Point предусмотреть метод Distance, вычисляющий расстояние до заданной точки. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с классом Point.
- Создать DLL с классами Point и Line, описывающими точку и линию на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Line предусмотреть метод, определяющий принадлежность заданной точки линии.
- Создать DLL с классами Point и Square, описывающими точку и квадрат на плоскости со сторонами, параллельными осям координат. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Square предусмотреть метод, определяющий принадлежность заданной точки квадрату.
- Создать DLL с классами Point и Circle, описывающими точку и круг на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Circle предусмотреть метод, определяющий принадлежность заданной точки кругу.
- Создать DLL с классами Point и Rectangle, описывающими точку и прямоугольник на плоскости со сторонами, параллельными осям координат. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Rectangle предусмотреть метод, определяющий принадлежность заданной точки прямоугольнику.
- Создать DLL с классами Point и Rhomb, описывающими точку и ромб на плоскости с осями, параллельными осям координат. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Rhomb предусмотреть метод, определяющий принадлежность заданной точки ромбу.
- Создать DLL с классами Point и Tetragon, описывающими точку и четырехугольник на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Tetragon предусмотреть метод, определяющий принадлежность заданной точки четырехугольнику.
- Создать DLL с классами Point и Triangle, описывающими точку и треугольник на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Triangle предусмотреть метод, определяющий принадлежность заданной точки треугольнику.
- Создать DLL с классами Account и Accounts, описывающими счет в банке и множество счетов клиентов, хранящихся в файле. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с классами Lexeme и AriphmeticExpression, описывающими лексему и арифметическое выражение. Среди методов класса AriphmeticExpression предусмотреть метод, представляющий выражение в виде массива лексем. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с классами Lexeme и LogicExpression, описывающими лексему и логическое выражение. Среди методов класса LogicExpression предусмотреть метод, представляющий выражение в виде массива лексем. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с классами Lexeme и Assignment, описывающими лексему и оператор присваивания. Среди методов класса Assignment предусмотреть метод, представляющий оператор в виде массива лексем. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с классами Student и Exam, описывающими студента и экзамен. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с сервисным классом Poisk, содержащего методы линейного и бинарного поиска. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с сервисным классом Sorting, содержащего методы сортировки. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
- Создать DLL с интерфейсным классом InputArray, позволяющий вводить одномерный массив с проверкой корректности ввода элементов. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.
Проекты
- Дано множество точек P1, P2, Pn со случайными координатами. Построить множество точек P1, P2, Pm ( m <= n ), обход которых позволяет построить многоугольник без пересечений, если это возможно. Уметь вычислять площадь многоугольника, определять, является ли он выпуклым, принадлежит ли заданная точка внутренней области (границам) многоугольника. Построить реализацию в виде класса Polygon, включенного в состав DLL. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с объектами класса Polygon.