ПРАКТИЧЕСКОЕ ЗАНЯТИЕ
РАЗРАБОТКА ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ СТРУКТУР
Научится применять тип «запись» для решения задач, обрабатывающих данные различных типов. Уметь правильно объявлять, обрабатывать и исполь- зовать записи, а также массивы записей.
Запись – это структура данных, состоящая из фиксированного числа ком- понентов, называемых полями записи. В отличие от массива, компоненты (по- ля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.
Структура объявления типа записи такова:
<имя типа> = RECORD
<список полей> END;
Здесь <имя типа> – правильный идентификатор;
RECORD, END – зарезервированные слова (запись, конец);
<список полей> – представляет собой последовательность разделов запи-
си, между которыми ставится точка с запятой.
Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентифика- торами) ставится двоеточие и описание типа поля (полей), например:
type
var
.......
BirthDay = record day,month : Byte; year : Word
end;
a,b : Birthday;
В этом примере тип BIRTHDAY (день рождения) - это запись с полями
DAY, MONTH и YEAR (день, месяц и год); переменные А и В содержат записи типа BIRTHDAY.
Как и в массиве, значения переменных типа записи можно присваивать другим переменным того же типа, например
а := b;
К каждому из компонентов записи можно получить доступ, если использо- вать составное имя, т.е. указать имя переменной, затем точку и имя поля:
а.day := 27;
b.year := 1939;
Записи могут быть вложенными, т.е. когда поле одной записи в свою оче- редь также является записью. Для вложенных полей приходится продолжать уточнения:
BirthDay = record day,month: Byte; year : Word
end;
Student = record name : String; bd : BirthDay end;
var c:Student;
.....
if c.bd.year = 1939 then ...
Чтобы упростить доступ к полям записи, используется оператор присоеди-
нения WITH, который имеет следующий вид:
WITH <переменная> DO <оператор>
Здесь WITH, DO – ключевые слова (с, делать);
<переменная> – имя переменной типа запись, за которым, возможно, следует список вложенных полей;
<оператор> – любой оператор Паскаля. Например:
WITH c.bd DO month := 9;
Это эквивалентно
WITH с DO
WITH bd DO month := 9;
или
c.bd.month := 9;
Рассмотрим пример использования массива записей. Программа организу- ет ввод данных об учащихся: имя, фамилия, возраст, школа, класс и записывает их в массив записей, а затем выводит сведения об учащихся по номеру записи и по номеру класса.
Для решения задачи введем тип записи pupil (ученик) для описания сведе- ний об учащихся, а затем объявим массив а, состоящий из 10 записей типа pupil.
Для ввода данных в поля записи используется процедура InputData, для вывода – процедура WriteData.
Uses crt, strings;
type pupil = record { описание типа записи } name: string[10]; { имя }
surname: string[20]; { фамилия } school: integer; { школа }
class: byte; { класс } end;
var school:array[1..10] of pupil; n: 1..10;
с:byte;
procedure InputData; { процедура ввода данных}
writeln('Введите данные №', n,' :'); write('Ваше имя ?'); readln(school[n].name); write(' Фамилия ?'); readln(school[n].surname); write(' Школа ?') ; readln(school[n].school); write(' и класс ?'); readln(school[n].class); writeln;
procedure WriteData; { вывод на экран содержимого текущей записи }
with school[n] do begin
writeln('Имя :',name); writeln('Фамилия: ',surname); writeln('Школа: ',school); writeln('Класс: ',class);
end;
begin { основная программа } clrscr;
for n:=l to 10 do InputData;
writeln(' Вывод данных о 5 ученике :'); n:=5; WriteData;
writeln(' Вывод данных по номеру класса :'); writeln(' Задайте номер класса :'); readln(с); for n:=l to 10 do
if school[n].class=c then WriteData; readkey;
3. ИСПОЛНИТЕЛЬНЫЙ БЛОК
Составьте программу, которая организует ввод данных об учащихся: имя,
фамилия, возраст, школа, класс и записывает их в массив записей, а затем вы- водит сведения об учащихся по номеру записи и по номеру класса.
Для решения задачи введите тип записи pupil (ученик) для описания сведе- ний об учащихся, а затем объявите массив а, состоящий из 10 записей типа pu- pil.
Описание типа и переменных для программы:
type pupil = record { описание типа записи } name: string; { имя } surname: string; { фамилия } school: integer; { школа }
class: byte; { класс } end;
var school:array[1..10] of pupil; n: 1..10;
с:byte;
мер.
1) Можно ли объявить запись непосредственно в разделе переменных?
2) Чем отличаются записи от массива?
3) Какие операторы для работы с записями вы знаете?
4) Можно ли для полей записи использовать тип массив? Опишите при-
5) Можно ли вывеси все поля записи сразу, не указывая имена полей?
1) Создать запись, содержащую поля: фамилия, имя, дата рождения. Вы- вести на экран: а) список учеников, фамилии которых начинаются на букву А, с указанием имени и даты рождения; б) фамилию самого младшего из учеников.
2) Составить запись ассортимента конфет с указанием названия, цены, срока годности и магазина в котором они имеются в продаже. а) Вывести на- звание конфет с самым большим сроком годности; конфеты, стоимость кото- рых больше 60 и меньше 80 рублей.
3) Создать запись, содержащую поля: марка производителя телефона, но- мер марки, цена, количество на складе. Вывести на экран модели, оставшиеся на складе в минимальном количестве.
4) Сформировать на экране таблицу из данных записи. Запись имеет поля: Фамилия, Имя, Отчество, Дата рождения, Образование, Профессия. Отдельно вывести имена людей с высшим образованием.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.