Главная страница
Навигация по странице:

  • Type TDate=Record D:1..31; M:1..12; Y:1900..2200; End;

  • Number:integer; //

  • DR:TDate; // День рождения MR:String[50];

  • Dolg:String[40]; // Должность Oklad:Longint; End;

  • Const nmax=20; //

  • Procedure TForm1.FormCreate(Sender: TObject);

  • Memo1.Clear; // Очищаем текстовые редакторы Memo2.Clear; end;

  • Dr.Y:=StrtoInt(Edit5.Text); Mr:=Edit6.Text; Dolg:=Edit7.Text; Oklad:=StrtoInt(Edit8.Text); End;

  • Memo1.Add(’n=’+InttoStr(Number)+’ Fio=’+FIO+’ D=’+InttoStr(Dr.D)+ ’ M=’+InttoStr(Dr.M)+’ Y=’+InttoStr(Dr.Y)+’ Mr=’+Mr+’ Dolg=’+Dolg+

  • Var i,j,imin:Integer; // Внутренние переменные Rt,Rmin:Tanketa;

  • Begin // Сортировка записей по фамилии методом последовательного // поиска минимального значения For i:=1 to n-1 do do Begin

  • Imin:=j; End; If imin I then Begin Rt:=Ar[i];

  • For i:=1 to n do With Ar[i] do Begin Memo1.Add(’n=’+InttoStr(Number)+’ Fio=’+FIO+’ D=’+InttoStr(Dr.D)+

  • Type Tvar=(FourByte, OneByte); Tr=Record Case Tvar of FB:Integer; B1,B2,B3,B4:Byte; End;

  • операторы Delphi. Операторы delphi оператор присваивания


    Скачать 92.84 Kb.
    НазваниеОператоры delphi оператор присваивания
    Анкорdelphi
    Дата10.03.2020
    Размер92.84 Kb.
    Формат файлаdocx
    Имя файлаоператоры Delphi.docx
    ТипДокументы
    #111464
    страница4 из 5
    1   2   3   4   5

    РАБОТА С ЗАПИСЯМИ


    Запись – это набор данных, который может содержать поля разных типов и определяется ключевым словом – Record. Имeна полей отделяются от имени записи точкой. Например, запись текущей даты можно определить следующим образом:

    Type TDate=Record

    D:1..31;

    M:1..12;

    Y:1900..2200;

    End;

    Здесь D, M и Y определяются диапазонами значений и соответствуют дню, месяцу и году. Теперь определим, например, запись типа анкеты сотрудника:

    Type TAnketa=Record

    Number:integer;

    // Порядковый номер

    FIO:String[80];

    // Фамилия, имя и отчество

    DR:TDate;

    // День рождения

    MR:String[50];

    // Место рождения

    Dolg:String[40];

    // Должность

    Oklad:Longint;

    End;

    // Оклад

    Чтобы не писать каждый раз имя записи и отделять его от поля точкой, можно использовать ключевое слово With с указанием имени записи. Затем в блоке Begin можно работать прямо с полями этой записи. Рассмотрим пример ввода полей записи для массива анкет сотрудников. Будем считать, что приведенные выше типы записей уже определены как глобальные типы. Определим глобальный массив таких записей и текущее число записей. На форме поля записей будут вводиться через элементы TEdit, здесь же будут присутствовать две кнопки – для ввода новой записи и для упорядочения записей по фамилиям сотрудников. Введенные записи будут отображаться в компоненте Memo1, а результат упорядочения – в Memo2:

    // Определение глобальных констант и переменных

    Const nmax=20; // Максимальное число записей

    Var n:integer; // Текущее число записей

    Ar:array[1..nmax] of TAnketa; // Массив записей // Определение обработчиков событий

    // Обработчик создания формы

    Procedure TForm1.FormCreate(Sender: TObject);

    begin




    n:=0;

    // Зануляем число записей

    Memo1.Clear;

    // Очищаем текстовые редакторы

    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);

    Var i,j,imin:Integer;

    // Внутренние переменные

    Rt,Rmin:Tanketa;

    // Внутренние записи

    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.
    1. 1   2   3   4   5


    написать администратору сайта