procedure TfrmPopupMenu.DisplayMessage(Sender: TObject);
begin
muiMessage.Checked:= not(muiMessage.Checked);
pmiMessage.Checked:= muiMessage.Checked;
lblMessage.Visible:= muiMessage.Checked;
end;
procedure TfrmPopupMenu.DisplayEditor(Sender: TObject);
begin
muiEditor.Checked:= not(muiEditor.Checked);
pmiEditor.Checked:= muiEditor.Checked;
memEditor.Visible:= muiEditor.Checked;
end;
procedure TfrmPopupMenu.AboutBox(Sender: TObject);
begin
Application.MessageBox('Это простой редактор, версия 0.02',
'О программе...', MB_OK);
end;
Так как обработка событий главного и всплывающего меню одинакова, то централизовать действия можно с помощью списка действий (см. пример 15. 4) или же, выбрав один и тот же метод для обработки событий выбора пункта меню (OnClick) на совпадающих пунктах меню.
Порядок выполнения работы
1. Для решения задачи табулирования функции согласно варианту создать форму и разместить на ней:
· главное меню (компонент типа TMainMenu) с командами: завершить работу программы, табулировать функцию, очистить поле вывода результатов;
· контекстное меню (компонент типа TPopupMenu);
· группу переключателей, с помощью которых задать способ вывода результатов (на экран, в файл, в массив), если не один из способов не выбран меню «Табулирование» не должно быть доступным.
· поля ввода исходных данных;
· область просмотра (компонент типа TMemo), которая должна снабжаться вертикальной полосой прокрутки и служить только для вывода информации.
2. В поля ввода допустимо вводить только цифры и точку, все остальные символы не должны водиться. Поле вывода не должно быть доступно для редактирования. Следует обработать все возможные исключительные ситуации. Возможный вид главной формы показан на рис. 15.9.
Рис. 15.9. Вид формы лабораторной работы №15
Варианты
1. . Проверка: в интервале [2,3] F(2,2985)≈0.
2. Проверка: в интервале [-1,0] F(- 0,2877)≈0.
|
3. Проверка: в интервале [0,1] F(0,4538)≈0.
4. Проверка: в интервале [1,2] F(1,2388)≈0.
5. Проверка: в интервале [1,2] F(1,8756)≈0.
6. Проверка: в интервале [0,1] F(0,7672)≈0.
7. Проверка: в интервале [1,2] F(1,1183)≈0.
8. Проверка: в интервале [0,1] F(0,5629)≈0.
9. Проверка: в интервале [2,4] F(3,23)≈0.
10. Проверка: в интервале [1,3] F(1,3749)≈0.
11. Проверка: в интервале [1.2,2] F(1,3077)≈0.
12. Проверка: в интервале [3,4] F(3,5265)≈0.
13. Проверка: в интервале [1,3] F(1,8832)≈0.
14. Проверка: в интервале [2,3] F(2,0267)≈0.
15. Проверка: в интервале [2,3] F(2,8459)≈0.
16. Проверка: в интервале [0,1.5] F(1,1474)≈0.
17. Проверка: в интервале [1,2] F(1,36016)≈0.
18. Проверка: в интервале [2,3] F(2,25078)≈0.
19. Проверка: в интервале [0,1] F(0,5768)≈0.
20. Проверка: в интервале [0.5,1] F(0,7376)≈0.
21. Проверка: в интервале [2,3] F(2,2985)≈0.
22. Проверка: в интервале [-1,0] F(-0,2877)≈0.
23. Проверка: в интервале [0,1] F(0,4538)≈0.
24. Проверка: в интервале [1,2] F(1,2388)≈0.
25. Проверка: в интервале [1,2] F(1,8756)≈0.
26. Проверка: в интервале [0,1] F(0,7672)≈0.
27. Проверка: в интервале [1,2] F(1,1183)≈0.
28. Проверка: в интервале [0,1] F(0,5629)≈0.
29. Проверка: в интервале [2,4] F(3,23)≈0.
30. Проверка: в интервале [1,3] F(1,3749)≈0.
Контрольные вопросы
1. Компонент флажок. Основные свойства.
2. Группа компонентов. Основное назначение и свойства.
3. Список действий. Основное назначение. Редактор списка действий.
4. Компонент меню. Основные свойства этого компонента.
5. Компонент TPopupMenu (контекстное меню). Основные свойства.
6. Компонент TMemo (многострочный редактор). Основные свойства.
Лабораторная работа № 16
Обработка динамических массивов данных.
Компонент TStringGrid (Таблица строк)
|
Цель работы: Изучение компонента TStringGrid и его основных свойств.
Теоретические сведения
Компонент TStringGrid (таблица строк)
Компонент TStringGrid (таблица) представляет собой элемент, позволяющий отображать данные, разбитые на строки и столбцы. Добавляется компонент с помощью кнопки на дополнительной (Additional) панели инструментов. Таблица строк позволяет хранить и автоматически отображать текстовую информацию. Некоторые свойства компонента TStringGrid приведены в табл. 16.1.
Таблица 16.1. Свойства TMemo
Свойство | Описание свойства | Примеры значений |
ColCount | Количество столбцов таблицы | 3; 7 |
RowCount | Количество строк таблицы | 5; 8 |
DefaultColWith | Ширина колонки приведена в пикселях, свойство распространено на все ячейки, кроме тех, где установлены свои значения | 64 — по умолчанию; 50 |
DefaultRowHeight | Высота строки дана в пикселях, свойство распространено на все ячейки, кроме тех, где установлены свои значения | 24 — по умолчанию; 50 |
FixedCols | Количество фиксированных столбцов таблицы, которые не перемещаются слева и могут выделяться цветом | 1 — по умолчанию); 3 |
FixedRows | Количество фиксированных строк таблицы, которые не перемещаются вверх и могут выделяться цветом | 1 — по умолчанию; 2 |
Cells[ACol, ARow: Integer]: string; | Строка, содержащаяся в столбце ACol и строке ARow | Произвольная строка символов |
ScrollBars | Наличие полос прокрутки | ssBoth — обе полосы; ssNone — прокрутка допустима |
Пример 16.1. Создать и вывести на экран динамическую матрицу целых чисел указанного размера. Матрицу заполнить с помощью датчика случайных чисел. Экранная форма программы показана на рис. 16.1. Фрагмент кода программы с описанием матрицы, подпрограммой формирования матрицы и вывода матрицы в компонент TStringGrid имеет вид
|
type
TaArray= arrayofarrayof integer; //описание типа динамической матрицы
...
var
FrmMain: TFrmMain;
A:TAarray; //глобальная переменная — динамическая матрица
Implementation
{формирование динамической матрицы размера Row Х Col}
procedure inputArray( var Arr:TAarray;Row,Col:integer);
var i,j:integer;
begin
randomize;
SetLength(Arr,Row,Col); //выделяем память под матрицу
for i:=low(Arr) to high(arr) do
for j:=low(Arr[i]) to high(Arr[i]) do
Arr[i,j]:=random(10); //заполняем элементы матрицы
// случайными числами от 0 до 10
end;
{Обработчик события нажатия кнопки «Заполнение матрицы»}
procedure TFrmMain.BtnRandClick(Sender: TObject);
var i,j,r,c:integer;
begin
r:=strtoint(EdtRow.Text);
c:=strtoint(EdtCol.Text);
inputArray(A,r,c); //заполнение матрицы
strGrdA.ColCount:=c+1;
StrGrdA.RowCount:=r+1;
StrGrdA.ColWidths[0]:=90;//увеличиваем ширину 0-го столбца
StrGrdA.Cells[0,0]:='строки/столбцы';
for j:=1 to c+1 do
StrGrdA.Cells[j,0]:=inttostr(j); //строка заголовка
for i:=1 to r+1 do
StrGrdA.Cells[0,i]:=inttostr(i); //столбец заголовка
for i:=low(A) to high(A) do //вывод матрицы в компонент
for j:=low(A[i]) to high(A[i]) do
StrGrdA.Cells[j+1,i+1]:=inttostr(A[i,j]);
end;
Рис. 16.1. Экранная форма примера 16.1
Порядок выполнения работы
1. Создать приложение для решения задачи формирования и обработки двумерного динамического массива согласно варианту. Приложение должно содержать главную форму, в которой находится:
· главное меню;
· компоненты TStringGrid для ввода и вывода результатов;
· контекстное меню.
2. Разработать отдельные подпрограммы с параметрами:
· формирования динамической квадратной матрицы целочисленных данных;
· вывода на экран динамической матрицы в компонент StringGrid,
· удаления элементов (с изменением размера) динамической матрицы, заданных в варианте.
Размер исходной матрицы N вводится с клавиатуры и фактически не ограничен (ограничен оперативной памятью).
3. Обработать все возможные исключительные ситуации.
Возможный вид формы изображен на рис. 16.2.
Рис. 16.2. Экранная форма лабораторной работы №16
Варианты
1. Удалить все элементы, кратные 3:
![]() | 2. Удалить все элементы, равные 0:
![]() |
3. Удалить все четные элементы:
![]() | 4. Удалить все нечетные элементы:
![]() |
5. Удалить все нулевые элементы в четных строках:
![]() | 6. Удалить все элементы, равные 0:
![]() |
7. Удалить все элементы, равные 0, выше главной диагонали:
![]() | 8. Удалить все элементы, равные 0, в нечетных столбцах:
![]() |
9. Удалить все элементы, равные 1, расположенные ниже дополнительной диагонали:
![]() | 10. Удалить все элементы слева от нечетных значений:
![]() |
11. Удалить все элементы, равные 0:
![]() | 12. Удалить все элементы, которые больше N / 2:
![]() |
13. Удалить все элементы, равные 1, выше главной диагонали:
![]() | 14. Удалить все элементы, которые меньше N / 2:
![]() |
15. Удалить все элементы, равные 0, в четных строках и 1 в нечетных:
![]() | 16. Удалить все четные элементы:
![]() |
17. Удалить все элементы, кратные 2:
![]() | 18. Удалить все элементы, кратные 3:
![]() |
19. Удалить все ненулевые элементы, стоящие справа от четных значений:
![]() | 20. Удалить все элементы, равные 0, с нечетной суммой индексов:
![]() |
21. Удалить все элементы, равные 1, с четной суммой индексов
![]() | 22. Удалить k нулевых элементов в k строке:
![]() |
23. Удалить все нулевые элементы, расположенные выше главной диагонали и все единичные ниже ее:
![]() | 24. Удалить все элементы, стоящие ниже нечетного значения на главной диагонали:
![]() |
25. Удалить все четные элементы, расположенные выше дополнительной диагонали:
![]() |
Контрольные вопросы
1. Компонент TStringGrid (таблица строк). Особенности его использования для вывода матрицы.
2. Основные свойства таблицы строк.
3. Особенности создания форм многооконных приложений.
4. Доступ к элементам дочерних форм.
5. Особенности закрытия дочерних форм.
Лабораторная работа № 17
Работа с объектами. Инкапсуляция. Наследование.
Полиморфизм. Создание заставки
Цель работы: получение навыков по созданию собственных классов.
Теоретические сведения
Понятие класса и объекта
Класс — это структура, включающая в себя описание данных, процедур и функций, которые могут быть выполнены применительно к представителю класса — объекту.
Пример объявления простого класса:
TPerson = class
private
fname: string[15];
faddress: string[35];
public
procedure Show;
end;
Данные класса называют полями, процедуры и функции — методами. В приведенном примере TPerson — это имя класса, fname и faddress — имена полей, show — имя метода.
В программе помещают описание класса в раздел описания типов (type).
Объекты в программе как представители класса объявляются в разделе var, например:
var
student: TPerson;
professor: TPerson;
Объект — это динамическая структура. Переменная-объект содержит не данные, а ссылку на данные объекта. Поэтому необходимо выделить память для этих данных.
Выделение памяти осуществляется с помощью специального метода класса — конструктора, которому обычно присваивают имя Create (создать). Для того, чтобы подчеркнуть особую роль и поведение конструктора, в описании класса вместо слова procedure используется слово constructor.
Например, описание класса TPerson, в состав которого введен конструктор, имеет вид
TPerson = class
private
fname: string [15];
faddress: string [ 35 ];
constructor Create; // конструктор
public
procedure show; // метод
end;
Помимо выделения памяти конструктор, как правило, решает задачу присваивания полям объекта начальных значений, т. е. осуществляет инициализацию объекта. Ниже приведен пример реализации конструктора объекта TPerson:
constructor TPerson.Create;
begin
fname:= '';
faddress:= ' ';
end;
Выделение памяти для данных объекта происходит путем присваивания значения результата применения метода-конструктора к типу (классу) объекта. Например, после выполнения инструкции
professor:= TPerson.Create;
выделяется необходимая память для данных объекта professor.
После объявления и инициализации объект можно использовать, например, установив значение поля объекта. Доступ к полю объекта осуществляется указанием имени объекта и имени поля, которые отделяются друг от друга точкой. Например, для доступа к полю fname объекта professor имеет вид
professor.fname
Для освобождения памяти, занимаемую объектом, используют специальный метод-деструктор Free, который вызывает деструктор. Например, освобождение памяти, занимаемую полями объекта professor, имеет вид:
professor.Free;
Метод
Методы класса – это процедуры и функции, объявление которых включено в описание класса. Они выполняют действия с полями класса, для чего указывают имя объекта и имя метода, отделив одно имя от другого точкой. Например, инструкция professor.Show; вызывает применение метода show к объекту professor. Фактически инструкция применения метода к объекту — это специфический способ записи вызова процедуры.
Методы класса определяются в программе аналогично обычным процедурам и функциям, за исключением того, что имя процедуры или функции, являющейся методом, состоит из двух частей: имени класса, к которому принадлежит метод, и имени метода. Имя класса от имени метода отделяется точкой.
Например, определение метода show класса TPerson имеет вид:
procedure TPerson.Show;
begin
writeln('Имя:' + fname + #13 + 'Адрес:' + faddress);
end;
В операторах метода доступ к полям объекта осуществляется без указания имени объекта.
Инкапсуляция и свойства объекта
Под инкапсуляцией понимается скрытие полей объекта в целях обеспечения доступа к ним только посредством методов класса.
Ограничение доступа к полю объекта реализуется с помощью свойствобъекта. Свойство объекта характеризуется полем, сохраняющим значение свойства, и двумя методами, обеспечивающими доступ к полю свойства. Метод установки значения свойства называетсяметодом записи свойства (write), а метод получения значения свойства — методом чтения свойства (read).
В описании класса перед именем свойства записывают зарезервированное слово property (свойство). После имени свойства указывается его тип, затем имена методов, обеспечивающих доступ к значению свойства. После слова read указывается имя метода, обеспечивающего чтение свойства, после слова write — имя метода, отвечающего за запись свойства.
Например, описание класса TPerson, содержащего два свойства: Name и Address, имеет вид
type
TName = string[15];
TAddress = string[35];
TPerson= class // класс
private
FName: TName; // значение свойства Name
FAddress: TAddress; // значение свойства Address
Constructor Create(Name:Tname);
Procedure Show;
Function GetName: TName;
Function GetAddress: TAddress;
Procedure SetAddress(NewAddress:TAddress);
public
Property Name: Tname // свойство Name
read GetName; // доступно только для чтения
Property Address: TAddress // свойство Address
read GetAddress // доступно для чтения
write SetAddress; // и записи
end;
В программе для установки значения свойства записывается оператор присваивания значения свойству. Например, чтобы присвоить значение свойству Address объекта student, достаточно записать
student.Address:= 'С.Петербург, ул.Садовая 21, кв.З';
Компилятор перетранслирует преобразует приведенную инструкцию присваивания значения свойству в инструкцию вызова метода
student.SetAddress('С.Петербург, ул.Садовая 21, кв.З');
Наследование
Механизм получения новых классов посредством добавления полей, свойств и методов к уже существующим классам называется наследованием. При этом новый, порожденный класс (потомок) наследует свойства и методы своего базового, родительского класса.
В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса TPerson путем добавления поля FDepartment (отдел). Объявление класса TEmployee в этом случае может выглядеть так:
TEmployee = class (TPerson)
FDepartment: integer; // номер отдела
constructor Create (Name:TName; Dep:integer);
end;
Класс TEmployee должен иметь свой собственный конструктор, обеспечивающий инициализацию класса-родителя и своих полей. Например, реализация конструктора класса TEmployee имеет вид
constructor TEmployee.Create(Name:Tname;Dep:integer);
begin
inherited Create(Name);
FDepartment:=Dep;
end;
В приведенном примере директивой inherited вызывается конструктор родительского класса. После этого присваивается значение полю класса-потомка.
Полиморфизм и виртуальные[BP3] методы
Полиморфизм — это возможность использовать одинаковые имена для методов, входящих в различные классы. Концепция полиморфизма обеспечивает в случае применения метода к объекту использование именно того метода, который соответствует классу объекта.
Например, определены три класса, один из которых является базовым для двух других:
Type
// базовый класс
TPerson = class
fname: string; // имя
constructor Create(name:string);
function info: string; virtual;
end;
// производный от TPerson
TStud = class (TPerson)
fgr:integer; // номер учебной группы
constructor Create(name:string;gr:integer);
function info: string; override;
end;
// производный от TPerson
TProf = class (TPerson)
fdep:string; // название кафедры
constructor Create (name:string;dep:string);
function info: string; override;
end;
Var p: TPerson; // Определяем переменную типа TPerson
Begin
p:= TStud.Create(’Иванов’);
Writeln(p.info); // Вызов TPerson.info замещается TStud.info
p.Free;
p:= TProf.Create(’Петров’);
Writeln(p.info); // Вызов TPerson.info замещается TProf.info
end.
В каждом из этих классов определен метод info. В базовом классе с помощью директивы virtual метод info объявлен виртуальным, что дает возможность дочернему классу заменить виртуальный метод своим собственным. В каждом дочернем классе определен свой метод info, помеченный директивой override, который замещает соответствующий метод родительского класса.
Директивы, используемые при объявлении класса
Любой создаваемый класс может содержать секции (разделы), характеризуемые зарезервированными словами, определяющими области видимости класса:
· Published (опубликованные)
· Private (закрытые)
· Protected (защищенные)
· Public (открытые)
· Automated (автоматизированные)
Public не накладывает ограничений на область видимости перечисляемых в ней полей, методов и свойств — их можно вызывать в любом другом модуле программы.
Published также не ограничивает область видимости, однако в ней перечисляются свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования программы (в окне инспектора объектов).
Private сужает область видимости до минимума: элементы описания, указанные в этой секции, доступны только внутри методов данного класса и подпрограмм, находящихся в том же модуле, где описан класс. Элемент, объявленный в private, не доступен даже ближайшим потомкам класса, если они размещаются в других модулях.
Protected доступна только методам самого класса, а также любым его потомкам независимо от того, находятся ли они в том же модуле или нет.
Automated используется только для объявления свойств и методов, которые будут добавлены к так называемому интерфейсу OLE-объектов автоматизации; область видимости членов этой секции не ограничена.
Порядок выполнения работы
1. Создать приложение с использованием наследования, инкапсуляции и полиморфизма которое позволяет:
· создавать динамический список объектов класса согласно варианту;
· просматривать список;
· демонстрировать применение методов к объектам.
2. Разместить описание свойств и методов класса и подклассов в отдельном модуле. Класс должен иметь общие свойства и методы, а подклассы — свои свойства. Класс должен обязательно иметь свойство - указатель на следующий объект для организации динамической структуры.
3. Создать виртуальные методы для формирования строки с описанием объекта и реализации вычислений.
4. Предусмотреть обработку наиболее типичных исключительных ситуаций. При загрузке программы должна появляться заставка с краткой информацией о разработчике программы.
Возможный вид формы показан на рис. 17.1.
[BP4]
Рис. 17.1. Вид формы для лабораторной работы №17
Варианты
1. Класс «Плоские фигуры», имеющий свойства (высота, основание) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: треугольник и параллелограмм. Для вычисления площадей воспользоваться формулами
и
.
2. Класс «Плоские фигуры», имеющий свойства (сторона 1, сторона 2) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: треугольник со свойством сторона 3, и параллелограмм. Для вычисления периметров воспользоваться формулами
и
.
3. Класс «Параллелограммы», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: прямоугольник со свойством сторона 2, и квадрат. Для вычисления периметров воспользоваться формулами
и
.
4. Класс «Параллелограммы», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: прямоугольник со свойством сторона 2, и квадрат. Для вычисления площадей воспользоваться формулами
и
.
5. Класс «Четырехугольники», имеющий свойства (сторона 1, высота) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: трапеция со свойством сторона 2, и ромб. Для вычисления площадей воспользоваться формулами
и
.
6. Класс «Круглые тела», имеющий свойство (радиус) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: цилиндр со свойством высота, и сфера. Для вычисления объема воспользоваться формулами
и
.
7. Класс «Круглые тела», имеющий свойство (радиус) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: цилиндр со свойством высота, и сфера. Для вычисления площади полной поверхности воспользоваться формулами
и
.
8. Класс «Круглые тела», имеющий свойство (радиус) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: конус со свойством высота, и сфера. Для вычисления площади полной поверхности воспользоваться формулами
и
.
9. Класс «Круглые тела», имеющий свойство (радиус) и методы: (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: конус со свойством высота, и сфера. Для вычисления объема воспользоваться формулами
и
.
10. Класс «Круглые тела», имеющий свойства (радиус, высота) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: конус и цилиндр. Для вычисления объема воспользоваться формулами
и
.
11. Класс «Круглые тела», имеющий свойства (радиус, высота) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: конус и цилиндр. Для вычисления площади полной поверхности воспользоваться формулами
и
.
12. Класс «Параллелепипед», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: прямоугольный параллелепипед со свойствами сторона 2, сторона 3 и куб. Для вычисления площади полной поверхности воспользоваться формулами
и
.
13. Класс «Параллелепипед», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: прямоугольный параллелепипед со свойствами сторона 2, сторона 3 и куб. Для вычисления объема воспользоваться формулами
и
.
14. Класс плоские фигуры, имеющий свойства: сторона и методы: формирование строки с описанием объекта и вычисление площади. Описать классы-потомки: треугольник со свойством высота и квадрат. Для вычисления площадей воспользоваться формулами
и
.
15. Класс «Плоские фигуры», имеющий свойство (сторона) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: треугольник со свойствами сторона 1 и сторона 2 и квадрат. Для вычисления периметров воспользоваться формулами
и
.
16. Класс «Плоские фигуры», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: прямоугольник со свойством сторона 2 и параллелограмм со свойством высота. Для вычисления площадей воспользоваться формулами
и
.
17. Класс «Плоские фигуры», имеющий свойство (сторона 1) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: трапеция со свойствами сторона 2 и высота, и квадрат. Для вычисления площадей воспользоваться формулами
и
.
18. Класс «Плоские фигуры», имеющий свойство (сторона 1) и методы: формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: треугольник со свойством высота и прямоугольник сосвойством сторона 2. Для вычисления площадей воспользоваться формулами
и
.
19. Класс «Плоские фигуры», имеющий свойства (сторона 1, сторона 2) и методы (формирование строки с описанием объекта и вычисление периметра). Описать классы-потомки: треугольник со свойством сторона 3 и прямоугольник. Для вычисления периметров воспользоваться формулами
и
.
20. Класс «Плоские фигуры», имеющий свойства (сторона 1, высота) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: трапеция со свойством сторона 2, и параллелограмм. Для вычисления площадей воспользоваться формулами
и
.
21. Класс «Объемные тела», имеющий свойство (сторона или высота) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: цилиндр со свойством радиус, и куб. Для вычисления объема воспользоваться формулами
и
.
22. Класс «Объемные тела», имеющий свойство (сторона или высота) и методы (формирование строки с описанием объекта и вычисление площади полной поверхности). Описать классы-потомки: цилиндр со свойством радиус, и куб. Для вычисления площади полной поверхности воспользоваться формулами
и
.
23. Класс «Объемные тела», имеющий свойство (сторона или высота) и методы (формирование строки с описанием объекта и вычисление объема). Описать классы-потомки: конус со свойством радиус, и куб. Для вычисления объема воспользоваться формулами
и
.
24. Класс «Плоские фигуры», имеющий свойства (сторона 1, высота) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: треугольник и трапеция со свойством сторона 2. Для вычисления площадей воспользоваться формулами
и
.
25. Класс «Плоские фигуры», имеющий свойства (сторона 1, сторона 2) и методы (формирование строки с описанием объекта и вычисление площади). Описать классы-потомки: прямоугольник и трапеция со свойством высота. Для вычисления площадей воспользоваться формулами
и
.
Контрольные вопросы
1. Понятие класса, поля и метода.
2. Понятие инкапсуляции.
3. Понятие полиморфизма.