Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Записи в языке Pascal






    Запись — структурированный тип данных. Записи являются неоднородными неупорядоченными структурами с прямым доступом к компонентам. Компоненты записи называют полями записи.

    Обычно запись содержит совокупность разнотипных атрибутов, относящихся к одному объекту.

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

    рекордсмен

    страна

    статус соревнований (Олимпиада, чемпионат мира)

    длина дистанции

    год рекорда

    время

    Структурная диаграмма для записи

    Запись может быть объявлена в разделе type:

    идентификатор типа = Record

    поле1: тип;

    поле2: тип;

    полеN: тип

    end;

    Например,

    type beg = record

    fam: string[25];

    srtana: string[20];

    status: boolean; {Олимпиада - true; чемпионат мира - false}

    dlina: longint;

    god: 1900..2009;

    vr: string[15];

    end;

     

    Var a: beg;

    К каждому элементу записи можно обратиться, используя составное имя, которое имеет следующую структуру:

    < имя переменной>.< имя поля>

    Например,

    a.fam; a.dlina и т.п.

    Если, например, требуется полю " status" присвоить значение «true», то это делается так:

    a.status: = true;

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

    Например,

    type beg1 = record

    fam: string[25];

    srtana: string[20];

    status: boolean; {Олимпиада - true; чемпионат мира - false}

    dlina: longint;

    god: 1900..2009;

    vr: record min: longint;

    sec: real

    end

    end;

     

    Var a: beg1;

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

    a.vr.min

    a.vr.sec

    В программе могут использоваться массивы записей.

    Любая обработка записей, в том числе ввод и вывод, производится поэлементно.

    Например,

    var b: array[1..200] of beg1;

     

    ...

    write('Число рекордсменов? '); readln(n);

    for i: =1 to n do

    with b[i] do

    begin

    write('Фамилия спортсмена? '); readln(fam);

    write('Гражданин какой страны спортсмен? '); readln(strana);

    write('Статус соревнования? '); readln(status);

    write('Длина дистанции? '); readln(dlina);

    write('Год проведения соревнования? '); readln(god);

    write('Время, за которое спортсмен пробежал дистанцию (мин, сек)? '); readln(vr.min, vr.sec);

    end;

    ...

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

    with < переменная типа запись> do < оператор>;

    Он позволяет, один раз указав имя переменной типа " запись" после слова with, работать в пределах одного оператора (простого или составного) с именами полей как с обычными переменными, т.е. не писать громоздких составных имен.

    Объём памяти, занимаемый записью, определяется суммарным объёмом, занимаемым её полями:

    type beg1 = record

    fam: string[25]; {26 байт}

    srtana: string[20]; {21 байт}

    status: boolean; {1 байт}

    dlina: longint; {4 байта}

    god: 1900..2009; {2 байта}

    vr: record min: longint; {4 байта}

    sec: real {6 байт}

    end

    end;

    Всего получаем: 26+21+1+4+2+4+6=65 байт

    Массив, описанный выше, занимает 65 байт × 200 элементов = 13000 байт оперативной памяти.

    Записи с вариантами

    При определении типа записи в нее можно включать вариантную часть. Это означает, что разные переменные, хотя они относятся к одному типу, могут иметь различные структуры.

    Вариантная часть записи начинается выбором case и следует за общей частью; после ее окончания в записи не могут появляться никакие другие поля, поэтому case закрывается служебным словом end.

    Любая запись может иметь только одну вариантную часть, которая должна размещаться в конце записи (после фиксированной части). Однако, внутри какого-либо варианта, в свою очередь, может присутствовать другая вариантная часть, вложенная в первую.

    При записи варианта (списков элементов) обязательно наличие круглых скобок, даже если в них ничего не заключается.

    Структурная диаграмма для записи с вариантами

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

    Type pol=(m, w);

    people=record

    fam: string[20];

    godro: 1900..2007;

    case mw: pol of

    m: (voen: boolean; spec: string[15]);

    w: (merry: boolean; child: byte)

    end;

    var p1, p2: people;

    Все имена элементов должны быть различными, даже если они встречаются в разных вариантах.

    К элементам вариантной части можно обращаться так же, как к элементам фиксированной части записи.

    P1.mw: =m; p1.voen: =true; p2.child: =2;

    В процессе выполнения программы в структуру записи включается тот вариант, элементам которого в данный момент было присвоено значение. Как только какому-либо элементу другого варианта присваивается некоторое значение, в структуру записи включается этот вариант, а элементы предыдущего варианта становятся неопределенными.

    Данное обстоятельство учитывается и при подсчете объема памяти, отводимого под запись с вариантами. Статические поля учитываются обычным образом, а среди вариативной части отыскивается тот случай, где суммарный объем памяти для полей максимальный.

    Type pol=(m, w);

    people=record

    fam: string[20]; {21}

    godro: 1900..2007; {2}

    case mw: pol of {1}

    m: (voen: boolean; spec: string[15]); {1+16=17}

    w: (merry: boolean; child: byte) {1+1=2}

    end;

     

     

    21 + 2 + 1 + max(17, 2) = 41 (байт)

     

    Рассмотрим пример работы с записями без вариантов.

    Задача. Сведения о деталях, хранящихся на складе, содержат следующие атрибуты: название, количество, стоимость одной детали. Вывести информацию о детали, суммарная стоимость для которой максимальна.

    program ex_zap;

    type detal = record a: string[30]; kol, st: integer; end;

    var a: array [0..99] of detal; n, i, max: integer;

    begin

    write('Количество деталей? ');

    readln(n);

    for i: =0 to n-1 do

    With a[i] do

    begin write('Информация об ', i, ' детали: ');

    readln(a);

    readln(kol);

    readln(st);

    end;

    max: = 0;

    for i: = 1 to n-1 do

    if a[max].kol*a[max].st < a[i].kol*a[i].st then max: =i;

    writeln('Искомая деталь: ', a[max].a, ' стоимостью ', a[max].st, ' в количестве ', a[max].kol);

    end.

     

    Контрольные вопросы и задания

    1. Чем отличается тип " запись" от других структурированных типов?

    2. Могут ли поля записи быть одного и того же типа?

    3. Как обратиться к отдельному полю записи?

    4. Что такое " оператор присоединения"? В каких целях он используется?

    5. Что такое " запись с вариантами"?

    6. Как определить объем памяти под статическую запись? запись с вариантами?

    7. Как заполнить массив записей?






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.