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




Записи

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

Запись – тип данных, состоящий из фиксированного количества компонентов одного или нескольких типов, называемых полями записи. Чтобы можно было ссылаться на тот или иной компонент записи, каждое поле имеет своё имя.

Записи можно объявить следующим способом:

Type имя типа = record Имя поля 1: тип поля 1; Имя поля 2: тип поля 2; Имя поля N: тип поля N; end; Var имя переменной: имя типа;   Type BirthDay = record fam, name: string[20]; day, month: byte; year: word; end; Var a: array[1..100] of BirthDay; {описан массив записей из 100 элементов}

Компоненты (поля), входящие в состав записи, могут быть простыми переменными, множествами, массивами, записями.

Обращение к значению поля осуществляется с помощью конструкции, содержащей имя переменной и имя поля, разделенных точкой. Такая комбинация называется составным именем. Чтобы получить доступ к полям массива записей А, описанного выше, надо записать:

A[20].name, A[i].day и т. д.

Значения полей записи используются в выражениях, полям записи присваиваются значения, например, A[20].fam:=’Иванов’. Составные имена используются при вводе и выводе значений полей.

 

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

 

Type BirthDay = record

fam, name: string[20];

day, month: byte;

year: word;

end;

Var a: array[1..100] of BirthDay;

i,n,k,k1:byte;

 

begin

write(‘Введите количество записей ‘);

readln(n);

 
 
Доступ к отдельным полям записи значительно упрощается при использовании оператора присоединения with: with a[i] do begin readln(fam); readln(name); readln(day); readln(month); readln(year); end;


for i:=1 to n do begin

readln(a[i].fam);

readln(a[i].name);

readln(a[i].day);

readln(a[i].month);

readln(a[i].year);

end;

 

k:=0;

writeln(‘Фамилии и имена людей, у которых год рождения заканчивается на 0 или 5’);

for i:=1 to n do

with a[i] do begin

if day=5 then inc(k);

if (year mod 10=0) or (year mod 10=5) then writeln(fam, ' ', name);

end;

writeln(‘Количество людей, родившихся 5 числа =’, k);

end.

Задачи для самостоятельного решения

1. Дан массив записей с информацией об итогах зимней сессии студентов-первокурсников: фамилия, номер группы (целое число), оценки по трем предметам (математике, физике, программированию). Определить:

а) фамилии студентов, имеющих задолженность (0, 1, 2) хотя бы по одному предмету;
б) «качество» успеваемости, т.е. процент студентов, сдавших экзамены на 6 и выше;
в) название предмета, который был сдан лучше всего.

 

2. Дан массив записей о работниках предприятия следующей структуры: табельный №, ФИО, начислено, аванс, подоходный налог, сумма к выдаче. Найдите и выведите:

а) фамилии работников предприятия, заработная плата которых больше N у. е.;
б) табельные номера работников с наибольшим и наименьшим подоходными налогами.

 

3. Дан массив записей следующей структуры: фамилия школьника, имя школьника, факультативы (математика, физика, информатика). Поля мат., физ., инф. имеют логический тип, где true определяет посещение соответствующего факультатива, а false отрицает это утверждение. Определите:

а) какое количество школьников посещает факультатив по информатике;
б) фамилии и имена школьников, которые не посещают факультативов по физике или математике.

 

4. Дан массив записей следующей структуры: № автобуса; день, месяц, год и время отправления его со станции Бобруйск; количество мест в автобусе; количество свободных мест; стоимость проезда. Время отправления – это дробное число в формате ЧЧ.ММ. Определите:

а) номера автобусов, отправляющихся позже 16.00;

б) номера автобусов, у которых время отправления (часы) совпадает с количеством свободных мест;

в) выручку автостанции Бобруйск за определенный день (дата вводится с клавиатуры).

 

5. Дан массив записей следующей структуры: фамилия, имя, возраст и рост человека. Расположите записи:

а) в порядке возрастания возраста;

б) в алфавитном порядке фамилий.

 

ВНИМАНИЕ! Для решения последней задачи надо знать, что допускается присваивание значения одной записи другой, если они имеют один и тот же тип:

 

Type BirthDay = record

fam, name: string[20];

day, month: byte;

year: word;

end;

Var a: array[1..100] of BirthDay;

B: BirthDay;

.

.

.

B:=a[i];



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: