Правила создания записного типа — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Правила создания записного типа

2021-04-18 69
Правила создания записного типа 0.00 из 5.00 0 оценок
Заказать работу

ЛАБОРАТОРНАЯ РАБОТА №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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.546 с.