Опубликован: 03.09.2010 | Доступ: свободный | Студентов: 2841 / 488 | Оценка: 4.11 / 3.69 | Длительность: 10:38:00
Лекция 3:

Типы данных, определяемые программистом

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

Записи

В программах часто возникает необходимость логического объединения разнородных данных (например, база данных предприятия содержит для каждого сотрудника его фамилию, дату рождения, должность, оклад и т. д.). Для этого предназначен тип 'запись'. Он вводится с помощью ключевого слова record. Элементы записи называются полями.

type имя_типа = record
    описание 1-го поля записи;
    описание 2-го поля записи;
    ...
    описание n-го поля записи;
end;

Поля записи могут быть любого типа, кроме файлового. Например, для каждого товара на складе требуется хранить его наименование, цену и количество единиц:

type goods = record
    name   : string[20];
    price  : real;
    number : integer;
end;

Переменные типа 'запись' описываются обычным образом. Можно задавать описание типа при описании переменной, создавать массивы из записей, записи из массивов, и т. д.

var g1, g2  : goods;
    stock   : array [1 .. 100] of goods;
    student : record
        name  : string [30];
        group : byte;
        marks : array [1 .. 4] of byte;
    end;

С записями целиком можно делать то же, что и с массивами: присваивать одну запись другой, если они одного типа, например:

g1 := g2; g2 := stock[3];

Все остальные действия выполняются с отдельными полями записи. Есть два способа доступа к полю записи: либо с помощью конструкции имя_записи.имя_поля, либо с использованием оператора присоединения with, например:

g1.price := 200;
with g1 do begin
    price := 200; number := 10
end;

Пример. Сведения о товарах на складе хранятся в текстовом файле. Для каждого товара отводится одна строка, в первых 20 позициях которой записано наименование товара, а затем через произвольное количество пробелов его цена и количество единиц. Программа по запросу выдает сведения о товаре или сообщение о том, что товар не найден ( пример 3.5).

program store;
const Max_n = 100;
type str20 = string [20];
     goods = record
        name   : str20;
        price  : real;
        number : integer;
     end;
var stock     : array[1 .. Max_n] of goods;
    i, j, len : integer;
    name      : str20;
    found     : boolean;
    f         : text;
begin
    assign(f, 'stock.txt'); reset(f); 
    i := 1;
    while not Eof(f) do begin
        with stock[i] do readln(f, name, price, number); 
        inc(i); 
        if i > Max_n then begin                                    { 1 }
            writeln('Переполнение массива'); exit end;
    end;
    while true do begin                                            { 2 }
        writeln('Введите наименование'); Readln(name);
        len := length(name);
        if len = 0 then break;                                     { 3 }
        for j := len + 1 to 20 do name := name + ' ';              { 4 }
        found := false;
        for j := 1 to i – 1 do begin                               { 5 }
            if name <> stock[j].name then continue; 
            with stock[j] do    writeln (name:22, price:7:2, number:5); 
            found := true;
            break;
        end;
        if not found then writeln ('Товар не найден');             { 6 }
    end;
end.
Листинг 3.5.

Инициализация записей выполняется в разделе констант, при этом для каждого поля задается его имя, после которого через двоеточие указывается значение.

const g : goods = (name : 'boots'; price : 200; number : 10);

Множества

Множественный тип данных в языке Паскаль соответствует математическому представлению о множествах: это ограниченная совокупность различных элементов. Множество создается на основе элементов базового типа — это может быть перечисляемый тип, интервальный или byte. В множестве не может быть более 256 элементов, а их порядковые номера должны лежать в пределах от 0 до 255.

Множество описывается с помощью служебных слов set of.

type имя_типа = set of базовый_тип;

Примеры описания множественных типов:

type Caps   = set of 'A' .. 'Z';
    Colors  = set of (RED, GREEN, BLUE);
    Numbers = set of byte;

Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных, например:

var oct : set of 0 .. 7;

Тип 'множество' задает набор всех возможных подмножеств его элементов, включая пустое. Если базовый тип, на котором строится множество, имеет k элементов, то число подмножеств, входящих в это множество, равно 2k.

Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:

['A', 'D'] [1, 3, 6] [2, 3, 10 .. 13].

Порядок перечисления элементов базового типа в константах не имеет значения. Константа вида [ ] означает пустое подмножество. Переменная типа 'множество' содержит одно конкретное подмножество значений множества. Пусть имеется переменная b интервального типа:

var b : 1 .. 3; { переменная может принимать три различных значения: 1, 2 или 3 }

Переменная m типа 'множество'

var m : set of 1 .. 3;

может принимать восемь различных значений:

[ ] [1] [2] [3] [1, 2] [1, 3] [2, 3] [1, 2, 3]

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
София Шишова
София Шишова

Я завершила экзамен 90 баллов на 5. Сертификат не заказала. Сейчас пытаюсь найти как его заказать. у меня указано экзамен пройден баллы оценка видно, а чтоб заказать сертификат нигде не видно.

Алексей Масютин
Алексей Масютин
Россия, Дзержинск
Павел Макагонов
Павел Макагонов
Россия