Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа ЯПВУ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.4 Mб
Скачать

Лабораторная работа № 8 Тема: Применение записей в составлении программ.

Цель работы: Познакомиться с понятием «запись», научиться применять записи в составлении программ.

Теоретические сведения

В настоящее время вычислительная техника находит широкое применение в различного рода информационных системах. Они имеются в больших библиотеках, торговле, производстве, адресных бюро и т.д. В информационных системах довольно часто приходится иметь дело с комбинациями разнотипных объектов. В Паскале комбинациями разного типа являются записи. Составляющие запись объекты называются полями. В записи каждое поле имеет своё собственное имя. Упрощённая форма определения записи включает указание имени записи, имён отдельных компонентов (полей) и соответствующих им типов данных.

TYPE

< имя записи >=

RECORD

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

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

…………………………

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

END;

Например, для решения задачи определения среднего балла, имея данные по пяти дисциплинам для конкретного студента, запись может иметь вид:

TYPE

STR =

RECORD

FAM: STRING[20];

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

SB : REAL;

END;

Здесь FAM обозначает строку символов для хранения фамилии студента, В1, B2, B3, B4, B5 – баллы по соответствующим дисциплинам, SB – средний балл. Переменная типа STR имеет смысл записи, содержащей информацию об одном студенте. Организация этой структуры показана на рис.1.

Рис. 1

Вещественныйтип

Если требуется хранить информацию не по одному студенту, а по 25, то можно ввести массив записей TBL:

VAR

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

Обращение к полям записи осуществляется посредством составного имени:

<имя переменной-записи>.<имя поля>

Возможны, например, такие операторы присваивания :

TBL[ 3 ].FAM:= “Иванов”;

TBL[ 20 ].B2:=5;

TBL[ K+1 ].SB:=4.666;

Имена компонентов внутри записи не должны повторяться. Значения записи можно пересылать в другие переменные – записи с помощью операторов присваивания. Возвращаясь к рассмотренному примеру, можно записать:

TYPE

STR=

RECORD

FAM : STRING[20]; B1, B2, B3, B4, B5 :2..5;

SB : REAL

END;

VAR Z1, Z2 : STR;

BEGIN

- - - - - - - -

Z1:=Z2;

Указанный в программе оператор присваивания эквивалентен следующим операторам :

Z1.FAM := Z2.FAM;

Z1.B1 := Z2.B2;

Z1.B2 := Z2.B2;

Z1.B3 := Z2.B3;

Z1.B4 := Z2.B4;

Z1.B5 := Z2.B5;

Z1.SB := Z2.SB;

Составим программу для нахождения среднего балла для каждого студента группы, состоящей из 25 человек.

PROGRAM BAL;

TYPE STR=

RECORD

FAM : STRING[20];

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

SB : REAL;

END;

VAR

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

I: INTEGER;

BEGIN

FOR I:=1 TO 25 DO { Цикл для ввода фамилий всех 25

BEGIN студентов и их оценок по 5

READLN (TB < [ I ].FAM); дисциплинам}

READLN (TBL [ I ],B1;

READLN TBL [ I ],B2;

READLN TBL [ I ],B3;

READLN TBL [ I ],B4;

READLN TBL [ I ],B5);

END;

FOR I:= 1 TO 25 DO {Цикл для выч-я и вывода сред.балла}

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

TBL [ I ].SB:=(TBL [ I ].B1+TBL [ I ].B2+

TBL [ I ].B3+TBL[ I ].B4+TBL[ I ].B5;

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

WRITELN (TBL[ I ].SB)

END;

END.

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

Общий вид оператора:

With < имя записи > do

< оператор >;

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

FOR I:=1 TO 25 DO

WITH TBL [ I ] DO

READ (FAM,B1,B2,B3,B4,B5);

Рассмотрим более сложную задачу, в которой требуется не только определить средний балл, но и упорядочить список студентов по убыванию среднего балла. Блок-схема алгоритма приведена на рисунке 2. Содержание 1,2,3, блоков не требует пояснений. В блоках с 4 по 9 осуществляется упорядочивание массива по убыванию среднего балла.

Идея алгоритма заключается в том, что в цикле (блок 4) берётся каждый i-тый компонент массива (по которому осуществляется упорядочивание) и его номер (блок 5). Далее в цикле (блок 6) происходит сравнение (блок 7) этого элемента со всеми последующими элементами массива. Если очередной элемент меньше выбранного то цикл повторяется, в противном случае меняются значения переменных K и X, X получает большее из сравниваемых значение, а K – его номер.

Таким образом, после окончания его цикла переменная X содержит наибольшее из просмотренных значений, а переменная K – его номер. В блоке 9 осуществляется замена очередного i-го элемента на найденный максимальный, а i-ый элемент занимает место максимального и процесс повторяется. Смысл блоков 10 и 11 понятен из блок – схемы.

PROGRAM SBAL;

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,Y,K,M : INTEGER;

X : REAL;

BEGIN

READLN ( 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; {Вычисление сред. балла}

F OR I:=1 TO M-1 DO

BEGIN

K:=1;

X:=TBL [ I ].SB;

FOR J:= I+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;

END.

  1. Для иллюстраций более сложной записи рассмотри пример, в котором в памяти ЭВМ требуется сохранить анкетные данные представленные в виде таблицы на рис.

Анкета

П/ П

Ф.И.О.

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

Пол

Фамилия

Имя

Отчество

Год

Месяц

Число

Рис.3

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

TYPE

ANKETA=

RECORD

NPP: INTEGER;

FIO:

RECORD

FAM, IM, OT: STRING [15] ;

END;

DR:

RECORD

COD: 1900..2000;

MES: STRING [8];

DEN: 1..31

END;

POL: STRING[3];

END;

Элементами записи ANKETA являются также записи FIO и DR.В результате получается сложная запись, которая представлена на рис.4.

Рис. 4.

Если была бы необходимость хранить анкетные данные 100 человек, то либо запись ANKETA должна быть объявлена как массив с числом элементов 100, либо каждый элемент второго уровня должен иметь размерность 100.

При обращении к вложенным записям можно использовать оператор with, имеющий вложенную структуру с любой степенью вложенности. Например, обращение к полю ГОД происходит с помощью составного имени ANKETA.DR.GOD , а с использованием оператора присваивания следующей конструкций:

WITH ANKETA DO

WITH DR. DO

GOD: =1965;

Или несколько проще:

WITH ANKETA. DR . DO GOD: =1965;

Использование оператора WITH существенно облегчает написание программ и делает более эффективным многократное обращение к полям одной записи.