Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal_metod_lab_rab.docx
Скачиваний:
35
Добавлен:
17.02.2016
Размер:
832.19 Кб
Скачать

Var X: z;

Пример. Объект — товар, характеризуется названием и ценой:

type tovar = record

sign: string [ 20];

price: real

end;

Пример. Объект — дата рождения: день, месяц, год. День можно указать как диапазон значении, такой тип данных называется интерваль­ным. Этот тип используется для целочислен­ных и символьных данных в описаниях, а также как метка опера­тора варианта. Интервальным типом задаются значения констант в разделе const.

type date_of_birth = record

day: 1 ..31;

month: string [10];

year: integer

end;

var date: date_of_birth;

Записи могут объединяться в массивы. Массив записей описывается в разделе type или var. Раздел пере­менных при объекте товар может иметь вид:

Var X: array [ 1.. 100 ] of tovar; y: tovar;

x массив записей, к каждому элементу которого использу­ется обычное обращение, например х[ i ]; у простая пере­менная.

Для обращения к полю записи применяется сложное имя, состоящее из двух имен, разделенных точкой. Первое из них — имя переменной типа «запись» из раздела var, второе — имя поля этой записи из раздела type. Так, для товаров имена по­лей в программе имеют вид:

у. sign, у. price, x [ 1 ]. sign, x [ i ]. price

Содержание сведений

Ф. И. 0.

Должность

Дата рождения

Зарплата

Имя поля записи

name

position

date

salary

Тип данных поля

String [20]

string [10]

date_of_birth

real

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

структуру типа «запись» (в виде поля даты рождения), которую также требуется уточнить и опи­сать в разделе типов раньше, чем запись о работнике.

В описании данной записи используется тип «день рожде­ния» (date_oi_birth) из примера 3. Общее описание записи имеет вид:

type date_of_birth = record

day: 1 ..31;

month: string [10];

year: integer

end;

worker = record

name : string [ 20 ];

position: string [ 10 ];

date : date_of_birth;

salary : real

end;

var x: array [ 1. .7] of worker; w: worker;

Поле записи date содержит запись из трех полей. При фор­мировании имени поля этой внутренней записи необходимо использовать тройное имя: имя переменной раздела var, имя поля записи worker и имя поля записи date_of_birth. Напри­мер, для переменной w обращение к месяцу рождения работ­ника в программе будет иметь вид: w.date.month

В программе ввод и вывод записи производится по полям, но можно присвоить одной записи значение другой, при этом происходит копирование области памяти: х [ 1 ]: = w;

Оператор присоединения. Для обработки записи использу­ется оператор with, который позволяет указать один раз имя записи из раздела переменных, а затем во всей области дейст­вия оператора указывать только имена полей этой записи из раздела type. После слова with можно написать несколько имен полей из раздела переменных.

Оператор присоединения имеет вид:

with список имен записей do оператор;

Оператор бывает простым или составным, ограниченным операторными скобками. Список имен записей может состо­ять из одного имени.

Пример. Дан массив записей, содержащий сведения о работниках пред­приятия (пример предыдущий). Напечатать:

1) список бухгалтеров;

2) список работников от 30 до 50 лет;

3) среднюю заработную плату по предприятию.

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

program Р37;

const n =10;

type date_of_birth = record

day: 1 .. 31;

month:string [ 10 ];

year: integer

end;

worker = record

name : string [ 20 ];

position: string [ 10 ];

date : date_of_birth;

salary : real

end;

var x: array [ 1..n] of worker; w: worker; i, j, g integer; S: real;

p: string [ 10 ];

begin

{формирование массива записей}

for i: = 1 to n do

with x [ i ] do

begin

writeln (‘сведения о’, i, ‘работнике’);

writeln (‘фамилия, инициалы’);

readln(name);

writeln (‘должность’);

readln(position);

writeln (‘число, месяц и год рождения’);

readln(date.day, date.month, date.year);

writeln (‘зарплата’);

readln(salary);

end;

{решение задачи 1) — печатание списка бухгалтеров}

p: = ‘бухгалтер’;

j: = 0; {счетчик строк списка — количество бухгалтеров}

for i: = 1 to n do

with x [ i ] do

if p = position

then begin

j:=j+1;

writeln (j, ‘.’, name); {после номера в списке печатается точка и фамилия}

end;

{решение подзадачи 2) — список работников от 30 до 50 лет}

writeln (‘список работников от 30 до 50 лет’);

j: = 0;

write (‘введите текущий год в виде четырехзначного числа’);

readln(g);

for i: = 1 to n do

with x [ i ] do

if (g — date.year < 50) and (g — date.year > 30)

then begin

j:= j+1;

writeln (j, ‘.’, name)

end;

{решение задачи 3) — вычисление средней зарплаты}

S: = 0;

for i: = 1 to n do

S: = S + x[ i ].salary;

write (‘средняя зарплата = ‘, S / n: 10: 2)

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]