ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ЗАПИСЕЙ

Кафедра ПОСЭ

 

ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ЗАПИСЕЙ

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

 

К лабораторной работе № 21

по дисциплине "ПРОГРАММИРОВАНИЕ"

Для студентов специальностей

Сети телекоммуникаций

Системы радиосвязи, радиовещания и телевидения

 

 

МИНСК 2003

 

 

Составитель И.С. Савчук

Издание утверждено на заседании кафедры ПОСЭ

"___"__________ 2003 г. Протокол N ___

Зав. кафедрой ___________ А.А. Прихожий

ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ЗАПИСЕЙ

 

1. ЦЕЛЬ РАБОТЫ

 

1.1. Изучение структурированного типа запись.

1.2. Приобретение практических навыков описания записей, работы с записями, массивами записей.

 

2. ЛИТЕРАТУРА

 

2.1.А.Н.Вальвачев,В.С.Крисевич.Программирование на языке

Паскаль для персональных ЭВМ ЕС.-Мн.:Вышэйшаяшкола, 1989.-

С.71..76

2.2.В.С.Новичков, Н.И.Парфилова, А.Н.Пылькин. Алгоритмические языки в техникуме. Паскаль.-М.:Высшая школа,1990.- С.140..150

2.3.Н.Д.Васюкова, В.В.Тюляева. Практикум по основам

программирования. Язык Паскаль.-М.:Высшая школа, 1991.-

С.50..59

 

3. ДОМАШНЕЕ ЗАДАНИЕ

 

3.1. Изучить по [2.1], [2.2], [2.3] структурированный тип записи.

3.2. Решить следующую задачу (начертить блок-схему и составить программу):

3.2.1. Даны сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонента, год установки телефона, номер телефона. Определить количество установленных телефонов, начиная с 1995 года; по вводимой фамилии абонента выдать номер телефона.

3.2.2. Даны сведения о книгах по программированию. Структура записи: автор, название, название издательства, год издания. Вывести названия книг с указанием фамилий авторов, выпущенных заданным издательством.

3.3. Подготовить бланк отчета.

 

4. ТСО И НАГЛЯДНОСТЬ

 

4.1. IBM PC AT 286, IBM PC AT 386.

 

5. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

 

5.1. Проверка домашнего задания и подготовки студентов к занятию.

5.2. Подготовка ПЭВМ к работе.

5.3. Получение у преподавателя и выполнение индивидуального задания.

5.4. Оформление отчета по лабораторной работе.

 

6. СОДЕРЖАНИЕ ОТЧЕТА

 

6.1. Наименование и цели лабораторной работы.

6.2. Ответы на контрольные вопросы.

6.3. Постановка задачи.

6.4. Блок-схемы алгоритмов и тексты программ к задачам из индивидуального задания.

6.5. Результаты решения.

 

7. КОНТРОЛЬНЫЕ ВОПРОСЫ

 

7.1. Что называется записью в языке Паскаль?

7.2. Что называется полями записи?

7.3. Могут ли поля записи иметь разные типы?

7.4. Привести формат записи.

7.5. Какие операции допустимы над элементами записи?

7.6. Для чего используется составное имя поля?

7.7. Для чего используется оператор присоединения WITH?

7.8. Привести формат оператора WITH.

7.9. Как организовать ввод и вывод полей записи?

 

8. МЕТОДИЧЕСКИЕ УКАЗАНИЯ

 

8.1. Записи.

 

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

 

Запись - это структурированный тип данных, состоящий из фиксированного количества компонентов разного типа. Определение типа запись начинается с зарезервированного слова RECORD и заканчивается зарезервированным словом END, между которыми заключен список компонентов, называемых полями. Для каждого поля указывается его имя (идентификатор) и тип.

 

Формат:

 

TYPE

< имя типа > = RECORD

< идентификатор поля >:< тип поля >;

< идентификатор поля >:< тип поля >;

....................................

< идентификатор поля >:< тип поля >;

END;

VAR

< идентификатор > ,< идентификатор >...:< имя типа >;

 

Возможно описание записи и без объявления типа в разделе описания типов:

 

VAR

< идентификатор > : RECORD

< идентификатор поля >:< тип поля >;

< идентификатор поля >:< тип поля >;

....................................

< идентификатор поля >:< тип поля >;

END;

 

Пример:

 

TYPE

ADR = RECORD

NKV:INTEGER;

ND:INTEGER;

UL:STRING[20];

GOR:STRING[20];

END;

VAR

A,B:ADR;

В данном примере запись ADR содержит 4 компонента: номер квартиры, номер дома, название улицы, название города. Доступ к полям записи осуществляется через переменную типа запись. Каждое поле записи рассматривается как обычная переменная, которую можно использовать в расчетах. Вместе с тем, запись может рассматриваться как единое целое.В нашем примере это переменные A и B типа ADR. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем.

Например, чтобы получить доступ к полям записи ADR надо записать:

 

A.NKV, A.ND, A.UL, A.GOR;

 

Для присваивания полям значений можно использовать оператор присваивания или процедуры ввода.

 

Пример:

 

A.NKV:=145;

A.UL:='ул. Крамского';

READLN (A.GOR, A.UL, A.ND, A.NKV);

 

Для вывода значений полей используются процедуры вывода.

 

Пример:

 

WRITELN (A.GOR:27, A.UL:25, A.ND:7, A.NKV:7);

 

Применение оператора присваивания допускается к записям в целом, если они имеют одинаковый тип. Например, B:A; после выполнения этого оператора значения полей записи А присвоятся полям записи В.

При решении многих задач удобно использовать массивы, состоящие из записей. Их описывают, например, следующим образом:

 

TYPE

STROKA=RECORD

N:INTEGER;

FIO:STRING[30];

ADR:STRING[40]

END;

VAR DAN:STROKA;

VEDOMOST:ARRAY[1..100] OF STROKA;

 

где DAN - запись типа СТРОКА;

VEDOMOST - массив, состоящий из записей типа СТРОКА. Чтобы обратиться к некоторому полю определенной записи массива, следует указать имя массива, индекс интегрирующей записи и

имя необходимого поля.

Например, оператор

WRITELN (VEDOMOST[7].FIO) печатается содержимое поле FIO записи VEDOMOST[7].

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

 

8.2. Оператор присоединения WITH.

 

Обращение к полям записи имеет несколько громоздкий вид, так как составные имена могут быть длинными, например, VEDOMOST[2].STROKA.FIO.

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

 

Формат:

 

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

 

В рамках оператора, определяемого внутри оператора WITH (или составного оператора), к полям определяемой переменной можно обращаться просто по имени, без указания перед идентификатором поля имени переменной, определяющей запись.

 

Оператор WITH позволяет более компактно представлять часто используемые переменные.

 

Пример. Присвоить значения полям записи DAN типа STROKA с помощью оператора WITH.

 

WITH DAN DO

BEGIN

N:=2;

FIO:='Иванова Анна Ивановна';

ADR:='ул. Куприянова д.20,кв.174'

END;

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

 

WITH ZAP1 DO

WITH ZAP2 DO

WITH ZAP3 DO........

 

Эта запись эквивалентна следующей записи:

 

WITH ZAP1,ZAP2,ZAP3 DO.......

 

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

Записи описываемые в пункте 8.1. имеют строго определенную структуру, что в некоторых ситуациях ограничивает возможности их применения. В языке ПАСКАЛЬ имеется возможность задать тип записи, содержащий произвольное число вариантов структуры. Такие записи называются записями с вариантами. Они состоят из необязательной и фиксированной части и вариантной части. Вариантная часть формируется с помощью оператора CASE, задающий поле признака, которое определяет какой, какой из вариантов в данный момент будет использоваться. Значением признака в каждый текущий момент выполнения программы должна быть одна из констант, которая называется константой выбора.

Формат:

TYPE

<имя типа>=record

<имя поля>:<тип поля>;

.....................

<имя поля>:<тип поля>;

CASE <поле признака>:<имя типа> OF

<константа выбора 1>:(поле, ... : тип);

<константа выбора 2>:(поле, ... : тип);

.......................................

<константа выбора n>:(поле, ... : тип);

END;

 

Константы каждого варианта ( идентификаторы полей и их типы) заключаются в круглые скобки.

 

8.4. Примеры программ.

8.4.1. Дана ведомость учащихся, занимающихся в кружке по программированию:

 

Алешина Елена 5

Ковалев Иван 5

Андрианов Борис 4

Поддубный Игорь 5

Павликова Юлия 5

Кемарская Вера 4

Кемарский Глеб 5

Антонова Ольга 5

 

Определить количество учащихся, занимающихся на 5 и количество учащихся с фамилией, начинающейся на букву А.

 

Решение.

 

Так как в каждой строке ведомости представлены данные различного типа, введем запись с именем SPISOK, состоящую из двух полей:

 

FAM - фамилия и имя - строка из 15 символов;

BALL - оценка - целое число.

 

Результатами выполнения программы будут:

 

SUMMA1 - количество учащихся, занимающихся на 5;

SUMMA2 - количество учащихся с фамилией на букву А.

 

Описание записи сделано в разделе TYPE, где Т - имя типа. В разделе VAR указано, что переменная список имеет тип Т.

Блок-схема алгоритма решения задачи представлена на рис.1.

 


Программа:

 

PROGRAM PR1;

TYPE

T=RECORD

FAM:STRING[15];

BALL:INTEGER

END;

VAR

SPISOK:T;

N,I,SUMMA1,SUMMA2:INTEGER;

BEGIN

SUMMA1:=0; SUMMA2:=0;

WRITELN('Введите количество учащихся');

READLN(N);

WRITELN('Введите фамилию, имя, оценку учащегося');

FOR I:=1 TO N DO

BEGIN

READLN(SPISOK.FAM, SPISOK.BALL);

IF SPISOK.BALL=5 THEN SUMMA1:=SUMMA1+1;

IF SPISOK.FAM[1]='A' THEN SUMMA2:=SUMMA2+1

END;

WRITELN('Количество учащихся, занимающихся на 5 = ',SUMMA1:3);

WRITELN('Число учащихся с фамилией на букву "А" =',SUMMA2:3)

END.

 

Протокол работы программы:

 

Введите количество учащихся

Введите фамилию, имя, оценку учащегося Алешина Елена 5

Ковалев Иван 5

Андрианов Борис 4

Поддубный Игорь 5

Павликова Юлия 5

Кемарская Вера 4

Кемарский Глеб 5

Антонова Ольга 5

Количество учащихся, занимающихся на 5 = 6

Число учащихся с фамилией на букву "А" = 3

 

Примечание.

 

Программу для решения задачи из п.8.3.1 можно написать с использованием оператора WITH:

 

 

PROGRAM PR2;

TYPE

T:RECORD

FAM:STRING[15];

BALL:INTEGER

END;

VAR

SPISOK:T;

N,I,SUMMA1,SUMMA2:INTEGER;

BEGIN

SUMMA1:=0; SUMMA2:=0;

WRITELN('Введите количество учащихся');

READLN(N);

WRITELN('Введите фамилию, имя, оценку учащегося');

FOR I:=1 TO N DO

WITH SPISOK DO

BEGIN

READLN(FAM); READLN (BALL);

IF BALL=5 THEN SUMMA1:=SUMMA1+1;

IF FAM[1]='A' THEN SUMMA2:=SUMMA2+1

END;

WRITELN('Количество учащихся, занимающихся на 5 = ',SUMMA1:3);

WRITELN('Число учащихся с фамилией на букву "А" =',SUMMA2:3)

END.

 

Протокол работы программы:

 

Введите количество учащихся

Введите фамилию, имя, оценку учащегося

Алешина Елена 5

Ковалев Иван 5

Андрианов Борис 4

Поддубный Игорь 5

Павликова Юлия 5

Кемарская Вера 4

Кемарский Глеб 5

Антонова Ольга 5

Количество учащихся, занимающихся на 5 = 6

Число учащихся с фамилией на букву "А" = 3

 

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

Решение:

Блок-схема алгоритма решения задачи представлена на рис.2.

 


Программа:

PROGRAM SRBAL;

TYPE

STR=RECORD

FAM:STRING[15];

B1,B2,B3,B4,B5:2..5;

SB:REAL

END;

VAR

TBL:ARRAY[1..25] OF STR;

Y:STR;

I,J,K,M:INTEGER;

X:REAL;

BEGIN

READLN(M); { M - число записей в массиве }

FOR I:=1 TO M DO

WITH TBL[I] DO

BEGIN

READLN (FAM);

READLN(B1,B2,B3,B4,B5);

END;

{ вычисление среднего балла }

FOR I:=1 TO M DO

WITH TBL[I] DO

SB:=(B1+B2+B3+B4+B5)/5;

{ сортировка списка группы }

FOR I:=1 TO M-1 DO

BEGIN

K:=I;

X:=TBL[I].SB;

FOR J:=1 TO M DO

IF TBL[J].SB>X THEN BEGIN K:=J;

X:=TBL[J].SB

END;

Y:=TBL[K];

TBL[K]:=TBL[I];

TBL[I]:=Y

END;

{ печать результатов }

FOR I:=1 TO M DO

WITH TBL[I] DO

WRITELN(FAM:15, SB:6:3)

END.

 

 

9. ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ СТУДЕНТОВ

В результате выполнения лабораторной работы студенты должны:

- знать формат структурированного типа запись;

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

 

 

План 2002/2003, поз. 134

 

 

Савчук Ирина Сигизмундовна