русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Комбинированный тип данных


Дата добавления: 2015-06-12; просмотров: 5765; Нарушение авторских прав


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

Обычно запись содержит совокупность разнотипных атрибутов, относящихся к одному объекту. Например, анкетные сведения о студенте вуза могут быть представлены в виде информационной структуры (рис. 35).

 

Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа Record (запись). Задать тип и описать соответствующую переменную можно следующим образом:

Type Anketa1=Record

FIO: String[50]; {поля}

Pol: Char;

Dat: String[16]; {записи}

Adres: String[50];

Curs: 1..5; (или элементы)

Grup: 1..10;

Stip: Real {записи}

End;

Var Student: Anketa1;

Такая запись, так же как и соответствующее ей дерево, называется двухуровневой.

К каждому элементу записи можно обратиться, используя составное имя, которое имеет следующую структуру:

<имя переменной>.<имя поля>

Например, student. fio; student. dat и т.п. Если, например, требуется полю курс присвоить значение 3, то это делается так:

Student.Curs:=3 ;

Поля записи могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом (рис.36).

 

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

Type Anketa2=Record



FIO: String[50];

Pol: Char;

Dat: Record

God: Integer;

Mes: String[10];

Den: 1..31

End;

Adres: Record

Gorod: String[20];

UlDomKv: String[30];

End;

Curs: 1..5 ;

Grup: 1..10;

Stip: Real

End;

Var Student: Anketa2;

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

Например, student.Dat.God; student.Adres.Gorod.

Приведем структурограмму задания комбинированного типа (рис.37).

 

В программе могут использоваться массивы записей. Если на факультете 500 студентов, то все анкетные данные о них можно представить в массиве:

Var Student: Array[1..500] Of Anketal;

В таком случае, например, год рождения пятого в списке студента хранится в переменной student[5].Dat.God.

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

For I:=1 То 500 Do

With Student[I] Do

Begin

Write('Ф.И.0.:'); ReadLn(FIO);

Write('Пол (м/ж):'); ReadLn(Pol);

Write('Дата рождения:'); ReadLn(Dat);

Write('Адрес:'); ReadLn(Adres);

Write('Курс:'); ReadLn(Curs);

Write('Группа:'); ReadLn(Grup) ;

Write('Стипендия (руб.):'); ReadLn(Stip)

End;

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

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

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

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

Работа с файлами записей. Чаще всего записи используются как элементы файлов, составляющих компьютерные информационные системы. Рассмотрим примеры программ, работающих с файлами записей.

Пример 1. Сформировать файл FM.dat, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих элементов: фамилия, имя, отчество; номер зачетной книжки; оценка.

Program Examen;

Type Stud=Record

FIO: String[30];

Nz: String[6];

Mark: 2..5

End;

Var Fstud: File Of Stud;

S: Stud;

N,I: Byte;

Begin

Assign(Fstud,'FM.DAT'); Rewrite(Fstud);

Write('Количество студентов в группе?');

ReadLn(N);

For I:=1 To N Do

Begin

Write(I:1,'-й,Фамилия И.О.'); ReadLn(S.FIO);

Write('Номер зачетки:'); ReadLn(S.Nz);

Write('Оценка:'); ReadLn(S.Mark);

Write(Fstud,S)

End;

WriteLn('Формирование файла закончено!');

Close(Fstud)

End.

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

Прямой доступ к записям файла

В стандарте языка Паскаль допустим только последовательный доступ к элементам файла. Одной из дополнительных возможностей, реализованных в Турбо Паскале, является прямой доступ к записям файла.

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

Seek(FV,n)

Здесь FV — имя файловой переменной, n — порядковый номер элемента. В следующем примере эта процедура будет использована.

Пример 2. Имеется файл, сформированный программой из предыдущего примера. Пусть некоторые студенты пересдали экзамен и получили новые оценки. Составить программу внесения результатов переэкзаменовки в файл. Программа будет запрашивать номер студента в ведомости и его новую оценку. Работа заканчивается, если вводится несуществующий номер (9999).

Program New_Marks;

Type Stud=Record

FIO: String[30];

Nz: String[6] ;

Mark: 2..5

End;

Var Fstud: File Of Stud;

S: Stud;

N: Integer;

Begin

Assign(Fstud,'FM.DAT');

Reset(Fstud) ;

Write('Номер в ведомости?');

ReadLn(N);

While N<>9999 Do

Begin

Seek(Fstud,N-l);

Read(Fstud,S);

Write(S.FIO,'оценка?');

ReadLn(S.Mark);

Seek(Fstud,N-l);

Write(Fstud,S);

Write('Номер в ведомости?');

ReadLn(N);

End;

WriteLn('Работа закончена!');

Close(Fstud)

End.

Пример требует некоторых пояснений. Список студентов в ведомости пронумерован, начиная от 1, а записи в файле нумеруются от 0. Поэтому, если n — это номер в ведомости, то номер соответствующей записи в файле равен n-1. После прочтения записи «номер n—1» указатель смещается к следующей n-й записи. Для повторного занесения на то же место исправленной записи повторяется установка указателя.



<== предыдущая лекция | следующая лекция ==>
Для последовательного чтения данных из файла требуется выполнить следующие действия: | Указатели и динамические структуры


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.093 сек.