- •14.1Тип запись в Turbo Pascal
- •14.2 Тип указатель
- •14.4Файлы
- •14.4.1 Типизированные файлы
- •14.4.2Файлы последовательного доступа
- •14.4.3 Файлы произвольного доступа.
- •14.4.4 Нетипизированные файлы.
- •15. 1. Структура программы и простые типы данных
- •15.2. Основные операции
- •15.3. Математические функции
- •15.3.7. Функции ввода и вывода
- •17.1.Переключатель.
- •18.1 Циклы в си
14.1Тип запись в Turbo Pascal
14.1.1 Описание типа
При использовании массивов основное ограничение заключается в том, что каждый элемент должен иметь один и тот же тип. Однако при решении задач обработки информации возникает необходимость обрабатывать и хранить информацию в разных типах, что требует создание отдельных массивов для каждого типа, а для установления соответствия между ними – введения соответствующих индексов. Это можно проиллюстрировать на следующем примере.
Задача14.1:
Для каждого студента группы указанна фамилия, оценка по пяти дисциплинам, требуется найти средний балл и упорядочить список студентов по убыванию среднего балла.
Если в группе 25 человек, то для хранения одной фамилии студента требуется массив из 15 символов, тогда для хранения всех фамилий необходим двумерный массив 15*25, для хранения оценок нужен был бы еще один массив 5*25, а для хранения средних баллов нужен еще один массив 25 элементов.
Совокупность данных в данном примере можно рассматривать как запись (комбинированный тип данных). В общем случае запись представляет собой совокупность огрониченного числа логически связанных компонентов, принадлежащих к разным типам.
Определение запись включает указание ее имени, имен отдельных компонентов и соответствующих типов данных:
Type
<имя-записи>=record
<имя-компонента-1>:<тип>
<имя-компонента-2>:<тип>
…
<имя-компонента-n>:<тип>
End;
Данные примера, приведенного выше, можно представить следующим образом:
Type
Stud=record
Fam:string[15];
b1,b2,b3,b4,b5:2..5; sb:real;
end;
Здесь переменная sb имеет смысл среднего балла; b1,b2,b3,b4,b5 обозначают баллы по соответствующим дисциплинам; fam ото совокупность строковых символов обозначающих фамилии студента.
Если информацию по всем 25 студентам необходимо хранить в памяти ЭВМ , то вводится отдельный массив, представляющий собой массив записей.
14.1.2 Селектор типа запись и оператор присоединения
Компонент записи определяется именем записи и именем этого компонента, разделенными точками, например stud.fam, stud.b1; в программах данная конструкция называется селектором записи.
Приведем текст программы для задачи 14.1:
Program sball;
Type
Stud=record
Fam:string[15];
b1,b2,b3,b4,b5:2..5; sb:real;
end;
Var
tbl: array [1..25] of stud;
y:stud;
I,j,k,m:integer;
X:real;
Begin
{вод исходных данных}
Writeln(‘введите количество записей’);
Readln(m);
Writeln(‘введите компоненты записей’);
For I:=1 to m do
With tbl[i] do- В языке Паскаль используется оператор присоединения (with),
Readln(fam,b1,b2,b3,b4,b5); который позволяет осуществлять доступ к компонент
For I:=1 to m do записи т.о., как если бы они были простыми переменными.
With tbl[i] do синтаксис оператора with <имя записи> do
Readln(fam,b1,b2,b3,b4,b5)/5; <оператор>
For I=1 to m-1 do
Begin
K:=I;
X:=tbl[j].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;
for i:=1to m do
with tbl[i] do
writeln(‘fam:15,sb:6:3’);
end.
В приведенной программе приняты следующие обозначения m-число студентов в группе, y-вспомогательная запись, необходимая для промежуточного запоминания элементов массива tbl при перестановке значений его элементов; x, k-вспомогательные переменные для запоминания максимального текущего значения среднего балла и его индекса в массиве записей.
14.1.3 Вложенные записи.
Допускается использование записи в качестве элемента другой записи. В результате получается сложная запись.
Пример 14.1.2
Хранение анкетных данных в памяти ЭВМ (фрагмент описания программы):
Var
Anketa: record
Npp:integer;
Fio:record;
Fam,im,ot:string[15];
End;
Dr:record
God:1900..2100;
Mes:string[8];
Den:1..31;
End;
Pol:string[3];
End;
Элементами записи anketa являются так же и записи fio и dr. В результате получается сложная запись. Такая анкета хранит информацию об одном человеке, чтобы хранить информацию о большем количестве людей запись должна иметь тип массива с необходимым числом элементов.
14.1.4.Запись с вариантами.
Во многих задачах структура записи может меняться в зависимости от условий, поэтому часто целесообразно при проектировании программ обработки таких данных использовать запись с вариантами.
Синтаксис записи с вариантами может быть представлен следующим образом:
Type
<имя-записи>=record
{|<имя-компонента>:<тип>;|}
Case<переменная>:<тип> of
{|<константа выбора>:(<имя-компонента>:<тип>;)|}
End.
Запись с вариантами содержит общую часть и вариантную часть начинающуюся с зарезервированного слова Case. после Case следует селектор записи, который в свою очередь может принимать одно из значений констант выбора при инициализации именно эта константа будет принята как составляющая вариантой части и активизирована при обработке.