![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Теоретические сведения. В настоящее время вычислительная техника находит широкое применение в различного рода информационных системах
В настоящее время вычислительная техника находит широкое применение в различного рода информационных системах. Они имеются в больших библиотеках, торговле, производстве, адресных бюро и т.д. В информационных системах довольно часто приходится иметь дело с комбинациями разнотипных объектов. В Паскале комбинациями разного типа являются записи. Составляющие запись объекты называются полями. В записи каждое поле имеет своё собственное имя. Упрощённая форма определения записи включает указание имени записи, имён отдельных компонентов (полей) и соответствующих им типов данных. 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; {Вычисление сред. балла}
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, а с использованием оператора присваивания следующей конструкций:
|