Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
2021-04-18 | 69 |
5.00
из
|
Заказать работу |
|
|
ЛАБОРАТОРНАЯ РАБОТА №9
Комбиированный тип - ЗАПИСЬ
Тип данных – Запись
Запись - это структура данных, которая используется для представления в программе объектов, обладающих несколькими свойствами разного типа. Например, объект Книга, может быть определена свойствами: фамилия автора, название книги, год издания, издательство. Запись позволяет представить объект, обладающих несколькими свойствами, одной переменной.
Формат определения типа.
Тип данных Запись (Record) состоит из двух частей: фиксированная часть; вариантная часть. Вариантная часть начинается с ключевого слова Case, располагается в конце определения типа, является необязательной.
type
Имя типа=record
Имя поля 1: тип поля;
Имя поля 2: тип поля;
…………………………
Имя поля 3: тип поля;
[case идентификатор: имя типа of
Константа1:(имя поля1:тип; имя поля2: тип;…..имя поляN:тип]);
Константа2:(имя поля1:тип; имя поля2: тип;…..имя поляN:тип);
……………………………………………………………….
КонстантаN:(имя поля1:тип; имя поля2: тип;…..имя поляN:тип);]
End;
Примечание. Квадратные скобки не используются при определении вариантной части, они указывают на то, что эта часть типа может быть опущена. Каждая строка вариантной части называется альтернативой.
Правила создания записного типа
1. Имя поля должно быть уникально в пределах одного типа Record.
2. Тип поля – это любой тип языка Delphi кроме файлового.
3. Если несколько полей имеют одинаковый тип, то их имена можно перечислить через запятую.
Примеры определения переменных типа запись
1) Для хранения информации о точке на плоскости.
Var
R:record x:real; y:real end;
2) Переменная должна хранить фамилию студента и шесть оценок за экзамены в сессию.
|
Type
TSessia=record
Fam:string[40];
Marke:array [1..6] of byte;
End;
Var
S:TSessia;
3) Переменная должна хранить анкетные данные сотрудника: фамилия, дата рождения, адрес.
Type
Tdate=record
Day:1..31;
Month:1..12;
Year:word
End;
Tadress=record
City:string[30];
Street:string[50];
NumHause, NumRoom:byte
End;
Temploye=record
Fam:string[40];
Date:Tdate;
Adress:Tadress
End;
Var
E:Temploye;
Представление переменной типа запись в памяти
Переменная R для представления точки на плоскости
x | y |
Переменная S типа Tsession
Fam | marke |
Переменная Е типа Temploye
day | month | year | City | Street | NumHouse | NumRoom | |
Fam | Date | Adress |
Доступ к значению поля в записи
Для доступа к значению поля используется уточненное имя. Уточненное имя формируется по правилу: имя переменной. имя поля. Если имя поля в свою очередь представляет переменную типа запись, то правило распостраняется на имя этого поля.
Примеры формирования имени.
1) Имя поля переменной R.
R.x или R.y
2) Доступ к значению оценки по третьему экзамену в сессию.
S.marke[3]
3) Доступ к значению поля City переменной E.
E.Adress.City
Расчет объема памяти, выделяемого переменной типа запись
Количесво байтов памяти, выделяемой полям фиксированной части плюс количество байтов для самой длинной альтернативы вариантной части.
Требования к выполнению лабораторной работы
Требуется создать сначала консольное одномодульное приложение, затем из одномодульного создать многомодульное приложение.
Создание одномодульного приложения
1. Разработать структуру данных массив, элементами которой являются записи. Структура одной записи определена вариантом.
2. Разработать подпрограммы:
· заполнение отдельной записи;
· вывод записи;
· добавление нового элемента в динамический массив;
· сортировка мАссива (методом, указанным в варианте);
|
· подзадач, которые будут выявлены вами при разработке дополнительной операции;
· вывод массива записей;
· вывод результатов операций.
Примечание. Обмен данными с подпрограммами обеспечить через механизм параметров.
3. Разработать консольное приложение, управляемое пользовательским интерфейсом и продемонстрируйте работу всех операций.
Варианты заданий
Структура записи | Метод сортировки | Дополнительная операция | |
1 | Сведения о студенте: Номер зачетной книжки, Фамилия, Имя, Дата рождения, Номер телефона, Дата поступления, Признак удаления записи | Метод прямого выбора. Отсортировать массив по дате рождения(перевести ее сначала в число исчисляя начало 1900 годом) | Найти и удалить всех окончивших институт (т.е. более срок обучения более 6 лет) |
2 | Сведения о спортсмене:Фамилия, Имя, Дата рождения, Вес, Рост, Пол | Метод “Пузырька”. Отсортировать массив по полю Вес. | Сформировать список спортсменов мужчин не старше 22 лет |
3 | Сведения о расписании занятий: Номер группы, название дисциплины, вид занятия (лек, лаб, практ), номер аудитории, день недели, номер пары, фамилия преподавателя.. | Отсортировать массив по номеру группы, используя алгоритм Шейкер сортировки. | Сформировать список групп, у которых лекция проходит в потоке. |
4 | Сведения о жителе: Фамилия, Город, Адрес: улица, дом, квартира. | Отсортировать массив методом вставки, упорядочивая по возрастанию по городам | Вывести фамилии двух жителей, живущих в разных городах по одному адресу. |
5 | Сведения о книге: Автор, Название, Инвентарный номер, Издательство, Количество страниц, Цена | Отсортировать массив по по Автору, используя метод улучшенного Пузырька. | Вставить новую книгу в упорядочен -ный массив. |
6 | Сведения об успеваемости одного студента по одной дисциплине: Номер зачетной книжки, Шифр группы, Название дисциплины, Дата получения оценки, Оценка, Фамилия преподавателя[1]. | Отсортировать массив методом Вставки по Названию дисциплины | Сформировать ведомость успеваемости группы по определенной дисциплине (Шифр группы и Название дисциплины вводятся). Найти средний балл группы по Дисциплине. |
7 | Учет выдачи книг пользователям библиотеки. Карточка пользователя библиотеки содержит сведения, о выданной книге: Инвентарный номер, Автор, Название, Дата выдачи, Дата возврата | Отсортировать по дате выдачи методом прямого выбора | Сформировать список книг, которые не возвращены вовремя. |
8 | Успеваемость группы студентов. Сведения по одному экзамену одного студента: Номер зачетной книжки, Название дисциплины, Дата получения оценки, Оценка, Фамилия преподавателя. (по каждому студенту будет столько записей сколько экзаменов он сдал). При вводе данных в строковые поля предусмотреть преобразование их к формату: первая буква большая, остальные маленькие | Отсортировать в хронологическом порядке по дате получения оценки. | Найти студентов с наибольшим баллом и вывести их фамилии. |
9 | Список экспортируемых товаров. Об отдельном товаре хранятся данные: Наименование товара, Страна импортирующая товар, Количество(в штуках). | Отсортировать список методом Пузырька по Стране | Сформировать массив стран, в которые импортируется указанный товар(название товара вводит пользователь) |
10 | Магазин игрушек. Сведения об игрушке: Название(например: кукла, конструктор и т.д.), стоимость в копейках(вводится может дробное число, содержащее рубли и копейки), возрастные границы детей, для кого игрушка предназначена(два поля – начальный возраст и конечный) | Отсортировать методом улучшенного пузырька по возрастным группам | Сформировать список игрушек для детей указанного возраста и определенной стоимости. |
11 | Служба знакомств. Структура данных хранит сведения о претендентах. Об отдельном претенденте: Фамилия, Имя Отчество, Возраст, Рост, Цвет глаз, Цвет волос, Зарплату, Наличие квартиры, Наличие машины. | Отсортировать список претендентов по возрасту методом прямой вставки. | Сформировать список пар, которые можно построить на основе некоторого критерия. Критерий определите сами |
12 | Продажа квартир. Сведения о продаваемой квартире: Общая площадь, Жилая площадь, Площадь кухни, Наличие лоджии, Наличие санузла и его характеристики(совмещенный или нет), Панельный или кирпичный дом, Этаж, Общее количество этажей, Адрес, Стоимость, Район города | Отсортировать по убыванию методом Пузырька по общей площади и по району | Сформировать список квартир по заданному критерию. Критерий составить самим. Отбор должен осуществляться минимум по трем параметрам. |
13 | Поликлиника. Структура содержит данные о жителях, обслуживаемых данной поликлиникой. О жителе хранятся сведения: Фамилия, Имя, Отчество, Адрес, Место работы, Наличие прививки от гриппа, Дата последней флюорографии | Отсортировать методом прямой вставки по дате флюорографии. | Сформировать список не сделавших прививку от гриппа. |
14 | ГИБДД. Структура хранит данные об автомашинах, О каждой машине: Модель, Номер(код региона, цифровой код, буквенный код), Цвет, Сведения о владельце(Фамилия, Имя, Адрес), дата последнего техосмотра. | Отсортировать по моделям методом бинарной сортировки | Сформировать список номеров машин модели “Волга” не прошедших техосмотр в этом году. |
15 | Справочник владельца видеотеки. О каждом видеофильме хранятся данные: Название, Студия, Жанр, Год выпуска, Режиссер, Исполнители главных ролей(не более 10): фамилия. | Отсортировать по возрастанию методом прямого выбора по жанру. | Сформировать список видеофильмов данного режиссера, за данный год и указанного жанра |
16 | Справочник фаната. Содержит данные о спортсменах: Анкетные и антропологические данные, Гражданство, Вид спорта, Клуб, Данные о личном рекорде(дата, призовое место) | Отсортировать по призовому месту методом улучшенного пузырька. | Сформировать список спортсменов различных стран, по одному виду спорта, принадлежащих одному клубу |
17 | Справочник коммерческих банков. Об отдельном банке хранятся данные: Наименование, Адрес, Статус(форма собственности), условия хранения средств на личном счету(годовые проценты на различных видах вкладов) | Отсортировать в порядке убывания по годовым процентам методом прямого выбора. | Выбрать банк с наибольшим процентом для заданного вида вклада |
18 | Автосалон. Об отдельном автомобиле: Марка, Год выпуска, Мощность двигателя, Количество цилиндров, Запрашиваемая цена. Сведения о покупателях: контактный телефон, Марка, Технические характеристики, Финансовые возможности. | Отсортировать по марке и году выпуска методом Пузырька | Выполнить подбор вариантов для покупателя (подбор по всем поля покупателя, кроме контактного телефона) |
19 | Справочник туриста. Турагенство предлагает услуги: Страна, Город, Условия проживания(Отель-звезды, Автобус и т. д.), Условия проезда, Экскурсионное обслуживание, Сервис принимающей стороны, Стоимость путевки. | Выполнить сортировку методом прямой вставки по стране и стоимости | Сформировать список туров по стране и стоимости |
Пример разработки одномодульного приложения.
|
|
Разработать приложение, выполняющее арифметические операции с обыкновенной дробью, состоящей из числителя и знаменателя. Числитель и знаменатель представлены целыми числами.
|
Пример кода одномодульного приложения
Program PrimRec;
Uses
sysutils;
type
TDroby=record
a:integer;
b:integer;
end;
TDar=array of Tdroby;
//Добавление записи в массив
procedure Add_to_Array(var Mass:TDar;r:TDroby);
var
i:word;
begin
i:=high(Mass);
setlength(Mass,i+1);
Mass[i]:=r;
end;
//Сложение двух дробей
function ADD(r1,r2:TDroby):TDroby;
begin
result.a:=r1.a*r2.b+r1.b*r2.a;
result.b:=r1.b*r2.b;
sokrashenye_droby(result);
end;
//наибольший общий делитель числителя и знаменателя дроби //для сокращения дроби
function NOD_a_b(r:TDroby):integer;
var
n,m,modr:integer;
begin
n:=r.a;
m:=r.b;
modr:= n mod m;
while modr<>0 do
begin
n:=m;
m:=modr;
modr:=n mod m;
end;
result:=m;
end;
//Сокращение дроби
procedure sokrashenye_droby(var r:Tdroby);
var
del:integer;
begin
del:=NOD_a_b(r);
r.a:=r.a div del;
r.b:=r.b div del;
end;
//Нахождение суммы дробей массива
function Add_Mass(Var Mass:TDar):Tdroby;
var
i:integer;
sum:Tdroby;
begin
if length(Mass)=0 then showMessage('Массив дробей не создан')
else
begin
sum.a:=Mass[0].a;
sum.b:=Mass[0].b;
for i:=1 to high(Mass) do
begin
sum:=ADD(sum,Mass[i])
end;
end;
result:=sum;
end;
//Ввод дроби
procedure input_record(var r:Tdroby;var p:boolean);
begin
p:=true;
MY_writeln('Введите дробь');
MY_writeln('Числитель');readln(r.a);
MY_writeln('Знаменатель');readln(r.b);
if (r.a=0) or (r.b=0) then p:=false
else
sokrashenye_droby(r);
end;
//Ввод данных в массив записей (дробей)
procedure input_Array(var mass:Tdar;var p:boolean);
var
otvet:char;
r:TDroby;
i:integer;
begin
i:=0;
MY_writeln('Создание массива завершается по требованию пользователя');
repeat
input_record(r); p:=true;
Add_to_Array(Mass,r);
MY_writeln('Продолжить ввод дробей Y/N');
readln(otvet)
until (otvet='N') or (otvet='n');
end;
//вывод записи
procedure out_record(var r:Tdroby);
begin
my_write('Дробь=');
writeln(r.a,'/',r.b);
end;
//Вывод массива записей
procedure out_Array(var mass:Tdar);
var
i:integer;
begin
for i:=0 to high(mass) do
with mass[i] do
write(a,'/', b,' ');
end;
procedure my_writeln(const s:string);
begin
writeln(RUSANSI1251_ASCII866(s));
end;
procedure my_write(const s:string);
begin
writeln(RUSANSI1251_ASCII866(s));
end;
//ОСНОВНАЯ ПРОГРАММА
var
r1,r2:TDroby;
mass:TDar;
n,num:byte;
p1,p2:boolean; //признаки заполнения массива
otvet:char;
sum:Tdroby;
begin
P1:=false;P2:=false;
while true do
begin
My_writeln('Набор операций');
My_writeln('1.Формирование одной дроби');
My_writeln('2.Вывод дроби');
My_writeln('3.Создание массива дробей');
MY_writeln('4.Вывод массива');
MY_writeln('5.Сложение всех дробей массива');
MY_writeln('6.Выход');
MY_writeln('Введите номер операции');
Readln(num);
case num of
1: begin
input_record(r1,p1); //p1 - признак заполнения записи
end;
2: begin
if p1 then
out_record(r1)
else
My_writeln('Дробь не введена');
end;
3: begin
input_Array(mass,p2);
end;
4:
if p2 then
out_Array(mass)
else
MY_writeln('Масcив не создан');
5:if p2 then
begin
sum:=ADD_Mass(mass);
MY_write(' Сумма=');
out_record(sum);
end
else
MY_writeln('Масcив не создан');
6:halt(0);
end
end;
end.
Пример кода созданного многомодульного проекта
program Drody;
{$APPTYPE CONSOLE}
Uses SysUtils, MY_Unit_Def, Convertor, MY_Unit_Input_Output in MY_Unit_Input_Output.pas, MY_Unit_Operation;
var
r1,r2:TDroby;
mass:TDar;
n,num:byte;
p1,p2:boolean; //признаки заполнения массива
otvet:char;
sum:Tdroby;
begin
P1:=false;P2:=false;
while true do
begin
My_writeln('Набор операций');
My_writeln('1.Формирование одной дроби');
My_writeln('2.Вывод дроби');
My_writeln('3.Создание массива дробей');
MY_writeln('4.Вывод массива');
MY_writeln('5.Сложение всех дробей массива');
MY_writeln('6.Выход');
MY_writeln('Введите номер операции');
Readln(num);
case num of
1: begin
input_record(r1,p1); //p1 - признак заполнения записи
end;
2: begin
if p1 then
out_record(r1)
else
My_writeln('Дробь не введена');
end;
3: begin
input_Array(mass,p2);
end;
4:
if p2 then
out_Array(mass)
else
MY_writeln('Масcив не создан');
5:if p2 then
begin
sum:=ADD_Mass(mass);
MY_write(' Сумма=');
out_record(sum);
end
else
MY_writeln('Масcив не создан');
6:halt(0); end end;end.
Контрольные вопросы
1. Из каких 2 –х частей может состоять структура данных – запись?
2. Как называются элементы структуры запись?
3. Какое количество памяти выделяется переменной типа запись, и как размещаются данные в этой переменной?
4. Как обратиться к элементу записи: - простой структуры; - типа массив?
5. Приведите определение структуры данных для хранения сведений о результатах сессии студента, обучающегося в вузе в течении 5 лет и получающего каждую сессию пять оценок.
6. Приведите пример записного типа с вариантной частью.
7. Что такое «уточненное имя»?
8. Как рассчитать количество памяти, выделяемой под переменную – запись?
9. Определите имя элемента в структуре структуры mass:
Type
data=record
Day:1..31; Momth:1..12;Years:word;
End;
Tar=array [byte] of data;
Var mass:Tar;
10. Для чего используется оператор with? Продемонстрируйте его использование при организации ввода данных для примера п.4.
11. Определите структуру для хранения данных линейного многочлена n-ой степени вида и алгоритм для ее заполнения. Подсказка: данными являются коэффициенты и степени; члены многочлена, поступающего на обработку, не обязательно располагаются по возрастанию степеней.
Лабораторная работа 10
Требования к выполнению лабораторной работы
Задание 2. Создать проект под Windows для вашего варианта лабораторной 9.
1. Преобразуйте консольное приложение, разработанное в лабораторной работе №9, в приложение под Windows. Включите в него модули. Для этого создайте новое приложение под Windows и подключите к нему модули из проекта лабораторной 9.
uses
SysUtils, MY_Unit_Def in 'MY_Unit_Def.pas', MY _Unit_ Operation in MY_Unit_Operation.pas;
Примечание. В проект не включен модуль ввода-вывода. Так как ввод-вывод организуется через элементы управления формы.
2. Разработайте проект формы (рис.11) – позволяющей осуществлять ввод данных, отображение данных, выбор выполняемой операции.
Рис. 11. Проект формы
Модуль формы
unit Lab_prim_91;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,MY_Unit_Def,MY_Unit_Operation;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button3: TButton;
Memo1: TMemo;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Massiv:TDar;
sum:Tdroby;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var r:TDroby;
begin
r.a:=strtoint(edit1.Text);
r.b:=strtoint(edit2.Text);
if (r.b=0) or (r.a=0) then ShowMessage('знаменатель= 0')
else
Add_to_Array(Massiv,r);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
sline:string;
begin
if radiobutton2.checked then
begin
Memo1.lines[0]:='Элементы массива';
for i:=0 to high(Massiv) do
begin
sline:=inttostr(Massiv[i].a)+'/'+inttostr(Massiv[i].b);
Memo1.Lines.Add(sline);
end
end
else
if radiobutton1.checked then
begin
Memo1.lines[0]:='Ñóììà';
sum:=Add_Mass(Massiv);
Memo1.lines[0]:='Сумма=';
Memo1.lines.ADD(' '+inttostr(sum.a)+'/'+ inttostr(sum.b))
end
else
ShowMessage(Операция не выбрана');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Clear
end;
procedure TForm1.Button5Click(Sender: TObject);
begin close end;
end.
Контрольные вопросы
1. Каково основное назначение формы проекта?
2. Сколько форм может быть в проекте?
3. Что такое событие?
4. Что представляет собой обработчик события?
5. Как установить событие для объекта, включенного в форму?
6. Как изменить значение свойства объекта?
7. Как выполнить форматирование группы элементов формы?
8. Какое событие может организовать перемещение к следующему полю ввода при нажатии клавиши Enter?
9. Какие разделы содержит модуль формы?
10. В каких разделах размещены глобальные имена типов, переменных, обработчики событий?
11. Что определяет имя Tform 1?
12. Какие переменные определены в модуле?
13. Что определяет переменная Form 1?
ЛАБОРАТОРНАЯ РАБОТА №11
Определение класса
Класс это тип определяемый пользователем. Используется для создания множества объектов, имеющих общие свойства и поведение. Так как класс – это тип данных, то он должен обеспечить: представление в памяти объектов типа и набор операций над ними.
Объектно-ориентированное программирование опирается на три основных свойства: инкапсуляция, наследование, полиморфизм. Инкапсуляция – данные и операции над ними образуют одну структуру. Наследование – создание новых классов (типов) на основе существующих т.е. развитее класса родителя в потомках. Наследник (потомок) наследует все данные и методы класса родителя и дополняет его своими данными и методами. Полиморфизм – обеспечивает различную реализацию одноименным методам разных уровней одной иерархии.
Формат определения базового класса
Type
Имя класса=class
[private]
элементы класса
[public]
элементы класса
[protected]
элементы класса
[publeshed]
элементы класса
[property]
свойства класса
end;
Элементами класса являются поля данных и методы. Поля данных предназначены для хранения значений свойств объектов, а методы – это подпрограммы, реализующие операции над объектами класса или полями данных.
Ключевые слова private, public, protected, published обеспечивают уровень доступа к элементам класса. Так к элементам класса, перечисленным после слова private разрешен доступ только из методов этого класса, а перечисленным после public разрешен доступ из других модулей. Под protected указываютя элементы, которые должны быть доступны в методах наследника.
Поля класса
Используются для определения свойств реального объекта. Могут быть любого типа, в том числе и типа класса. Поля являются глобальными переменными для методов своего класса. Доступ к полю в методах класса осуществляется по имени поля, если поле доступно наследнику, то тоже по имени.
Методы
Это процедуры и функции, которые реализуют операции над данными класса. Методы можно разбить на виды:
· специальные: конструктор и деструктор;
· методы доступа к полям;
· методы модификации полей;
· методы – операции с данными полей.
Методы могут быть объявлены в любом разделе: public, protected, private. Методы, которые могут использоваться приложениями должны быть объявлены в разделе public. Методы могут иметь параметры. Параметры могут быть любого типа, включая объекты того же класса, что и метод, либо другого класса.
Реализация методов
Это определения всех подпрограмм класса. Определения методов в Delphi вынесены из класса и могут находиться в одном модуле с определением класса или в разных модулях. Имя подпрограммы, реализующей метод организуется по правилу: ИмяКласса. ИмяМетода.
Метод конструктор
Этот метод предназначен для создания объектов определенного класса и инициализации полей данных, а так же помещает ссылку на объект во системную переменную с именем self, которая по умолчанию присутствует в классе.
В приложениях Delphi можно использовать два вида методов конструктор: конструктор по умолчанию – Create, и конструктор разработанный пользователем.
В Delphi объект (экземпляр класса) – это переменная типа класс. Переменная в свою очередь является указателем на динамическую область памяти, т.е. объект в Delphi – это динамическая структура данных, которая создается во время выполнения программы конструктором и ссылку на эту область хранит указатель.
Метод деструктор
Этот метод предназначен для удаления из памяти (уничтожения) объекта (экземпляра класса). Приложение может использовать для уничтожения объекта один из деструкторов: по умолчанию или созданный пользователем.
Деструктор по умолчанию – Destroy
Этот метод автоматически вызывается при завершении программы для каждого созданного в программе объекта. Если объект требуется уничтожить раньше завершения программы, то этот метод надо вызвать явно.
Явно определенный деструктор
Предназначен для уничтожения экземпляра класса, как и Destroy. Деструктор - это подпрограмма процедура с заголовком вида Destructor ИМЯ(список параметров). Явно определенный деструктор автоматически вызовет деструктор по умолчанию. В деструкторе можно выполнить дополнительные действия над данными объекта. Деструктор должен быть определен в классе, в котором используются динамические структуры данных, например, динамический массив, динамический список и т.д. для удаления этих структур при уничтожении самого объекта, так как деструктор по умолчанию удалит объект, но не удалит динамическую структуру, связанную с объектом.
Другие методы класса
Класс может иметь методы, которые производят операции над данными: например, находят количество дней между двумя датами, сортируют массив или удаляют из него элементы, или складывают две дроби, или вычисляют значение интеграла.
Вызов методов
Метод вызывается по тем же правилам, что и соответствующая методу подпрограмма – процедура или функция. Но метод предназначен выполнять действия с данными некоторого объекта (применяется к объекту).
Формат вызова метода:
ИМЯ объекта.Имя метода (список фактических параметров)
Метод применяется к объекту, который указывается слева от него.
Пример реализации класса Интеграл
//модуль определения класса
unit Unit2;
interface
Type
Tfunc=function(x:real):real;
Integral=class
protected
a, b,eps:real; //пределы интегрирования и точность
F:Tfunc;
//метод вычисления интеграла на заданном числе разбиений //отрезка интегрирования
function Int(n:word):real;
public
procedure setA(a1:real);
procedure setB(b1:real);
constructor create;
procedure setEps(e:real);
procedure setF(f1:Tfunc);
//метод вычисления интеграла с заданной точностью
function Metod:real;
end;
implementation
//реализация методов
constructor Integral.create;
begin
a:=0;b:=0; eps:=0;
end;
procedure Integral.setA(a1:real);
begin
a:=a1;
end;
procedure Integral.setB(b1:real);
begin
b:=b1;
end;
procedure Integral.setEps(e:real);
begin
eps:=e;
end;
procedure Integral.setF(f1:Tfunc);
begin
F:=f1;
end;
function Integral.Int(n:word):real;
var i:word;
s,x,h:real;
begin
result:=0; x:=a; h:=(b-a)/n;
for i:=1 to n do
result:=result+ (f(x)+f(x+i*h))*(b-a)/2;
end;
function Integral.Metod:real;
var Int1, Int2:real;
n:word;
begin
n:=1;
Int1:=Int(n);
Int2:=INT(2*n);
while(abs(Int1-Int2)<eps) do
begin
Int1:=Int2;
n:=n*2;
Int2:=INT(n);
end;
result:=INT1;
end;
end.
Программные объекты
Простые объекты
Это переменные типа класс. Объекты – это динамические переменные создаваемые конструктором. Как и всем переменным объектам выделяется память для хранения данных и ссылок на методы.
Массивы объектов
Массив объектов – это массив указателей на объекты.
Пример создания и использования объекта.
var
I1: Integral;
Function fx(x:real):real;
Begin
F:=x*x
End;
begin
o:= Integral.Create;
I1.SetA(0);
I1.SetB(1);
I1.SetEps(0.001);
I1.setF(fx);
Writeln(¢Значение интеграла=¢, I1.Metod);
End.
Свойства класса
Это механизм доступа к полям объекта. Используется для того, чтобы проверить значение перед тем, как оно будет присвоено полю. Этот механизм позволяет использовать оператор присваивания для записи значения в поле и считывания значения поля.
Для реализации доступа к полю по чтению и записи в классе должны быть предусмотрены методы: Метод записи типа Set(записать значение) и Метод чтения Get (прочитать значение поля). Каждое свойство связано с отдельным полем. В определении свойства можно указать только один метод, например, разрешить через механизм свойства только чтение данных из поля.
Форматы определения свойства в классе:
1) При использовании методов чтения и записи
Property <имя свойства>:тип свойства read Метод чтения write Метод записи;
2) Использование имени поля для чтения и записи его значений
Property <имя свойства>:тип свойства read Имя поля write Имя поля;.
Пример определения и использования свойств класса
//Модуль определения класса Рациональная дробь
unit ClassDroby;
interface
type
Tdroby =class
private
fa,fb,fr: byte;
p:boolean;
function NOD:byte;
PROCEDURE Sokrash;
public
constructor create(x,y:byte);
procedure set_a (x:byte);
procedure set_b(x:byte);
procedure get_a (var x:byte);
procedure get_b(var x:byte);
function get_priznak:boolean;
procedure ADD(D:Tdroby); //Сложение дробей
//свойства класса
property a:byte read get_a write set_a;
property b:byte read get_b write set_b;
end;
implementation
procedure Tdroby.set_a (x:byte);
begin
if x=0 then pa:=false
else begin fa:=x;pa:=true end;
end;
procedure Tdroby.set_b(x:byte);
begin
if x=0 then pb:=false
else begin fb:=x;pb:=true end;
end;
function Tdroby.get_a:byte;
begin
result:=fa
end;
function Tdroby.get_b:byte;
begin
result:=fb
end;
procedure Tdroby.ADD(D:Tdroby);
begin
a:=D.a*b+D.b*a;
b:=D.b*b;
r:=NOD;
sokrash;
end;
end.
//Основная программа
var
R:TDroby;
c,b:byte;
begin
R:=TDroby.Create;
R.set_a(5); //присваивание значения полю методом
R.set_b(7);
writeln(R.get_a,'/',R.get_b);
R.a:=6; //присваивание значения полю через свойства
R.b:=7;
c:=R.a; //присваивание переменной значения поля
b:=R.b;
writeln(c,'/',b);
readln
end.
Наследование
Формат определения класса наследника
Type
Имя класса=class(Имя класса родителя)
[private/ public/ protected/published]
элементы класса
[property]
свойства класса
end;
Пример определения класса наследник от класса Droby.
Новый класс должен иметь помимо методов родителя еще и метод умножения дробей.
Unit Nasl;
Interface
Uses ClassDroby;
Type
Tnasl=class(Tdroby)
Public
procedure Tdroby.Mult(D:Tdroby);
end;
procedure Tnasl. Mult (D:Tdroby);
begin
a:=D.a*a;
b:=D.b*b;
r:=NOD;
sokrash;
end;
end.
//использование наследника в приложении
uses Nasl;
var
O1, o2: Tnasl;
Begin
O1:=Tnasl.create;
O2:=Tnasl.create;
O1.set_a(5);
O2.set_b(7);
O2.set_a(2);
O2.set_b(3);
O1.mult(O2);
Writel(O1.get_a, ‘/’, O1.get_b)
End.
Варианты заданий
Объект | Список полей | |
1 | Студент | Номер зачетной книжки, Фамилия, Имя, Дата рождения, Номер телефона, Дата поступления, Признак удаления записи |
2 | Спортсмен | Фамилия, Имя, Дата рождения, Вес, Рост, Пол |
3 | Запись в записной книжке | Фамилия, Номер телефона, Дата рождения. |
4 | Житель | Фамилия, Город, Адрес: улица, дом, квартира. |
5 | Книга | Автор, Название, Инвентарный номер, Издательство, Количество страниц, Цена |
6 | Успеваемость | Номер зачетной книжки, Шифр группы, Название дисциплины, Дата получения оценки, Оценка, Фамилия преподавателя При вводе данных в строковые поля предусмотреть преобразование их к формату: первая буква большая, остальные маленькие) |
7 | Запись в Карточке пользователя библиотеки | Инвентарный номер, Автор, Название, Дата выдачи, Дата возврата |
8 | Работающий студент | Номер зачетной книжки, Группа, Код специальности, место работы |
9 | Игрушка | конструктор и т.д.), стоимость в копейках(вводится может дробное число, содержащее рубли и копейки), возрастные границы детей, для кого игрушка предназначена(два поля -начальный возраст и конечный) |
10 | Претендент | Фамилия, Имя Отчество, Возраст, Рост, Цвет глаз, Цвет волос, Зарплату, Наличие квартиры, Наличие машины |
11 | Пациент | Фамилия, Имя, Отчество, Адрес, Место работы, Наличие прививки от гриппа, Дата последней флюорографии |
12 | Квартира | Общая площадь, Жилая площадь, Площадь кухни, Наличие лоджии, Наличие санузла и его характеристики(совмещенный или нет), Панельный или кирпичный дом, Этаж, Общее количество этажей, Адрес, Стоимость, Район города |
13 | Автомобиль | Модель, Номер(код региона, цифровой код, буквенный код), Цвет, Сведения о владельце(Фамилия, Имя, Адрес), дата последнего техосмотра. |
13 | Видеофильм | Название, Студия, Жанр, Год выпуска, Режиссер, фамилии исполнителей главных роли(не более 10). |
14 | Спортсмен | Анкетные и антропологические данные, Гражданство, Вид спорта, Клуб, Данные о личном рекорде(дата, призовое место) |
15 | Банк | Наименование, Адрес, Статус(форма собственности), условия хранения средств на личном счету(годовые проценты на различных видах вкладов) |
16 | Требования Покупателя автосалона | Контактный телефон, Финансовые возможности, Техническое состояние,. Марка, Год выпуска, Технические характеристики(Мощность двигателя, Количество цилиндров, и т.д.), Особенности исполнения, Запрашиваемая цена. |
17 | Тур | Страна, Город, Условия проживания(Отель-звезды, Автобус и т. д.), Условия проезда, Экскурсионное обслуживание, Сервис принимающей стороны, Стоимость путевки. |
Контрольные вопросы.
1. В чем состоит основная идея ООП?
2. Что определяет класс?
3. В каком разделе программы должен быть описан объект (экземпляр класса)?
4. Что отличает структуру объекта от структуры запись?
5. Что такое метод?
6. Какова суть свойстваинкапсуляция?
7. Что означает наследование объекта?
8. Укажите, что будет базовыми объектами для объекта – многоэтажный многоквартирный дом.
9. Что понимается под полиморфизмом операций?
10. Что такое конструктор, деструктор?
11. Что значит – виртуальный метод?
ЛАБОРАТОРНАЯ РАБОТА №12
Файлы
Текстовыйфайл
Текстовый файл – это структра данных, размещенная на внешнем носителе, элементом которой является символ. Текстовый файл может содержать символы управления: конец строки, перевод каретки, конец файла. Последовательность символов, заканчивающаяся символом конец строки, называют строкой текстового файла. Файл организован последовательно, то есть новый элемент добавляется всегда в конец файла.
Для доступа к элементам файла, в программе, следует объявить файловую переменную.
Типизированный файл
Типизированный файл - это файл, в котором записаны идентичные структуры. Типизированный файл можно создать только программным путем. Он состоит из записей фиксированной длины. Содержимое файла - это машинное представление данных. Типизированные файлы так же называют двоичными т.к. они содержат информацию в двоичном коде. С каждым типизированным файлом связана переменная - указатель. Указатель определяет смещение от начала файла в
|
|
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!