Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Теоретические сведения. В настоящее время вычислительная техника находит широкое применение в различного рода информационных системах






 

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

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.

 
 

 

 


Если требуется хранить информацию не по одному студенту, а по 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; {Вычисление сред. балла}

FOR 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.

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

 

Анкета
П/ П Ф.И.О. Дата рождения Пол
Фамилия Имя Отчество Год Месяц Число
               

 

Рис.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, а с использованием оператора присваивания следующей конструкций:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.