операторы Delphi. Операторы delphi оператор присваивания
Скачать 92.84 Kb.
|
РАБОТА С ЗАПИСЯМИЗапись – это набор данных, который может содержать поля разных типов и определяется ключевым словом – Record. Имeна полей отделяются от имени записи точкой. Например, запись текущей даты можно определить следующим образом: Type TDate=Record D:1..31; M:1..12; Y:1900..2200; End; Здесь D, M и Y определяются диапазонами значений и соответствуют дню, месяцу и году. Теперь определим, например, запись типа анкеты сотрудника: Type TAnketa=Record
Чтобы не писать каждый раз имя записи и отделять его от поля точкой, можно использовать ключевое слово With с указанием имени записи. Затем в блоке Begin можно работать прямо с полями этой записи. Рассмотрим пример ввода полей записи для массива анкет сотрудников. Будем считать, что приведенные выше типы записей уже определены как глобальные типы. Определим глобальный массив таких записей и текущее число записей. На форме поля записей будут вводиться через элементы TEdit, здесь же будут присутствовать две кнопки – для ввода новой записи и для упорядочения записей по фамилиям сотрудников. Введенные записи будут отображаться в компоненте Memo1, а результат упорядочения – в Memo2: // Определение глобальных констант и переменных Const nmax=20; // Максимальное число записей Var n:integer; // Текущее число записей Ar:array[1..nmax] of TAnketa; // Массив записей // Определение обработчиков событий // Обработчик создания формы Procedure TForm1.FormCreate(Sender: TObject);
Memo2.Clear; end; // Обработчик нажатия кнопки «Добавить запись» procedure TForm1.Button1Click(Sender: TObject); begin Inc(n); // Наращиваем число записей With Ar[n] do Begin Number:=StrtoInt(Edit1.Text); Fio:=Edit2.Text; // Определение текущей записи анкеты Dr.D:=StrtoInt(Edit3.Text); Dr.M:=StrtoInt(Edit4.Text); Dr.Y:=StrtoInt(Edit5.Text); Mr:=Edit6.Text; Dolg:=Edit7.Text; Oklad:=StrtoInt(Edit8.Text); End; Memo1.Clear; // Очищаем поле Memo1 For i:=1 to n do With Ar[i] do Begin // Заново выводим все записи в Memo1. Memo1.Add(’n=’+InttoStr(Number)+’ Fio=’+FIO+’ D=’+InttoStr(Dr.D)+ ’ M=’+InttoStr(Dr.M)+’ Y=’+InttoStr(Dr.Y)+’ Mr=’+Mr+’ Dolg=’+Dolg+ ’ Oklad=’+InttoStr(Oklad)); end; end; // Обработчик нажатия кнопки «Сортировать» procedure TForm1.Button2Click(Sender: TObject);
Begin // Сортировка записей по фамилии методом последовательного // поиска минимального значения For i:=1 to n-1 do do Begin Rmin:=Ar[i]; Imin:=i; For j:=i+1 to n do Begin If Ar[j].FIO Rmin:=Ar[j]; Imin:=j; End; If imin<>I then Begin Rt:=Ar[i]; // Перестановка imin и i–й записей Ar[i]:=Rmin; Ar[imin]:=Rt; End; End; End; Memo2.Clear; // Вывод массива упорядоченных записей в Memo2 For i:=1 to n do With Ar[i] do Begin Memo1.Add(’n=’+InttoStr(Number)+’ Fio=’+FIO+’ D=’+InttoStr(Dr.D)+ ’ M=’+InttoStr(Dr.M)+’ Y=’+InttoStr(Dr.Y)+’ Mr=’+Mr+’ Dolg=’+Dolg+ ’ Oklad=’+InttoStr(Oklad)); end; end; end. Записи могут иметь вариантную часть, которая похожа на оператор Case. В общем виде такая запись определяется так: Type тип записи = record Поле–1: Тип–1; ... Поле–n: Тип–n; case переменная условия выбора: перечисляемый тип of Значение–1: (вариант полей 1); ... Значение–K: (вариант полей K); end; Например, одна и та же память, выделяемая целой переменной длиной 4 байта, может быть разбита на отдельные 4 переменные, каждая из которых занимает в памяти 1 байт: Type Tvar=(FourByte, OneByte); Tr=Record Case Tvar of FB:Integer; B1,B2,B3,B4:Byte; End; End; Var R:Tr; Теперь в программе можно использовать поле R.FB как переменную длиной 4 байта, а можно, например, использовать только младший байт из этой записи – R.B1. |