- •9.1. Типы данных char и string
- •9.1.1. Символьный тип
- •9.1.2. Строковый тип
- •9.2. Операции над строками
- •9.2.2. Операции отношения
- •I Листинг 9.4. Слияние двух отсортированных массивов строк,
- •9.3. Строковые процедуры и функции
- •9.3.1. Процедуры удаления и вставки символов
- •9.3.3. Процедуры преобразования типов
- •9.3.2. Функции для работы со строками
- •9.4. Примеры программ обработки строк
- •9.4.1. Вставка, удаление
- •9.4.2. Преобразование строчных букв в заглавные
- •10.1. Понятие множества
- •10.2. Операции над множествами
- •10.3. Формирование
- •11.1. Определение и правила записи
- •11.2. Записи с вариантами
11.2. Записи с вариантами
Записи, имеющие строго определенную структуру, весьма ограничены по возможностям применения. Однако в языке Turbo Pascal есть возможность задать тип записи, содержащий несколько вариантов структуры. Такие записи называются записями с вариантами и являются средствами объединения записей, которые похожи, но не идентичны по форме.
Записи с вариантами состоят из фиксированной и вариантной частей.
Фиксированная часть задается так же, как и в простых записях. Вариантная часть формируется с помощью оператора case ... of и может состоять из нескольких вариантов. Оператор задает особое поле записи — поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных в операторе case констант. Константа, служащая признаком, задает вариант записи и называется константой выбора.
В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями. Имена полей должны быть уникальными в пределах той записи, где они объявлены. Однако, если записи содержат поля-записи, т. е. вложены одна в другую, имена могут повторяться на разных уровнях вложенности. Формат записи с вариантами:
type
ИмяТипа=гесогс1
фиксированная часть
case ПолеПризнака : ИмяТипа of
КонстантаВыбора! : (Поле : Тип,...);
КонстантаВыбораЫ : (Поле : Тип,...); end; - ,,
Компоненты каждого варианта (идентификаторы полей и их типы) заключаются в круглые скобки. У части case нет отдельного end, как этого следовало бы ожидать по аналогии с обычным оператором сазе. Одно слово end заканчивает всю конструкцию записи с вариантами. Необходимо отметить, что количество полей каждого из вариантов не ограничено.
При использовании записей с вариантами необходимо придерживаться следующих правил:
П все имена полей должны отличаться друг от друга, по крайней мере, одним символом, даже если они встречаются в разных вариантах;
П запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце записи;
П если вариантная часть, соответствующая какой-либо константе выбора, является пустой, то она записывается следующим образом: константаВы-
OopaN{);.
В качестве примера использования записей с вариантами разработаем программу, позволяющую создавать электронную картотеку публикаций, а именно — после запроса о виде публикации произвести ввод параметров указанной публикации. Пусть в картотеке хранятся сведения о публикациях трех видов: книги, статьи и рефераты.
Рассмотрим структуру каждого вида публикаций. П Книга (book).
Автор (author).
к \ /
Название (title).
Год (year).
Издательство (publishinghouse).
Страницы (pages).
П Статья (article).
Автор (author).
Название (title).
Год (year).
Журнал (journal).
Номер журнала (numberofjournal).
Начальная страница (begpagej).
Конечная страница (endpagej). П Реферат (paper).
Автор (author).
Название (title).
Год (year).
Номер реферативного журнала (numberofpaper).
Начальная страница (begpagerj).
Конечная страница (endpagerj).
В предложенной структуре три параметра: автор, заголовок и год повторяются для каждого вида публикаций, поэтому их можно вынести в фиксированную часть записи, остальные — в вариантную часть (листинг 11.2).
! Листинг 11.2. Пример использования;записей с вариантами
type
kind = (book,article,paper);
publi cat ion=re cord
{ фиксированная часть записи }
autor,title : string;
year : word;
string; word); string; byte; word); byte; word);
{ вариантная часть записи } case kindp : kind of
book : (publishinghouse pages
article : (journal numberofj ournal begpagej, endpagej paper : (numberofpaper begpagerj, endpagerj
end;
var pub: publication; j: word; begin
writeln('Выход — недопустимый вид публикации'
repeat
write('Вид публикации (0 .. 2)='); readln(j); if j in [0..2] then with pub do begin Jcindp: = kind(j) ;
write{'Автор :'); readln(autor); write('Название :');readln(title); write('Год :'>;readln(year); case kindp of
book : begin
write('Издательство :'); readln(publishinghouse) ;
writef'Объем, стр. :'); readln(pages);
j end;
article : begin
write('Название журнала :'); readln{journal); write('Номер :');readln(numberofjournal); write С'Страницы :'); readln(begpagej, endpagej); end; paper : begin
write('Номер реф. журнала :');readln(numberofpaper); write('Страницы :'); readln(begpagerj, endpagerj); end;
end; { case .. of } end; { with pub .. }
until not (j in [0..2]);(повторять до недопустимого вида публикации nd.
Файлы
' *
Мы уже знаем, что эффективным способом хранения и обработки большого количества однотипных переменных в программе являются массивы (см. гл. 4). Однако как у обычных неиндексированных переменных, так и у индексированных — массивов — есть общий недостаток: они не пригодны для долговременного хранения информации. По окончании работы программы все данные будут потеряны. Результаты работы, конечно же, могут быть сохранены в виде бумажной копии — распечатаны на принтере, или некоторое время находиться на экране. Но при решении серьезных задач, связанных с вводом и/или получением большого количества данных, возникает необходимость их сохранения даже после того, как программа будет завершена, а компьютер выключен. В этом программисту могут помочь файлы (от английского слова file — подшивка, картотека).
Например, для расчета заработной платы сотрудников предприятия необходимы исходные данные на десятки или сотни человек: карточки персонального учета, лицевые счета, табель рабочего времени и т. д. Зарплата рассчитывается ежемесячно. Данные обновляются, достигая к декабрю расчетного года максимального объема. Вводить их с самого начала каждый месяц неразумно. Файлы обеспечивают хранение сведений, их обновление и обработку. Налоговая инспекция и фонды требуют, чтобы сведения о доходах передавались как в бумажном виде, так и на "магнитных носителях" — в виде файлов на дискетах. По сути, большая часть окружающей нас информации, в том числе и личные сведения о любом человеке, хранится как файлы.
Файл — это набор данных, хранящихся во внешней памяти компьютера (на жестком диске, дискете, компакт-диске и т. п.) под заданным именем.
Замечание
Любой источник или приемник информации в компьютере (клавиатура, экран, принтер и т. п.) может рассматриваться как файл (см. разд. 12. 1).
Особенности файлов:
Каждому файлу при создании указывается имя, по которому обрабаты вающая его программа сможет отличить один файл от другого. Следова тельно, одна программа может работать одновременно с несколькими фай лами.
Файл содержит элементы только одного типа (или тип его компонентов не оговаривается). Исключение — файловый тип недопустим. Например, можно создать файл записей или файл строк, но нельзя организовать "файл файлов".
Длина файла— это число его элементов (компонентов). При создании файла длина файла не задается заранее и ограничивается только ем костью устройств внешней памяти. Файл, не содержащий элементов, называется пустым, его длина — ноль.
( Замечание )
Массивы и файлы — по сравнению с массивом файл обладает как недостатками, так и достоинствами. Первые две особенности файла роднят его с массивом, последняя отличает и является преимуществом. Ведь особенностью массива как, впрочем, множества и записи является то, что его размер должен быть известен компилятору заранее. Для файла этого не требуется — число его компонентов можно увеличивать. Но, с другой стороны, массив целиком располагается в быстродействующей оперативной памяти компьютера. Файл же, по сути, представляет собой именованное пространство на диске, а скорость обмена данными с винчестером, дискетой или компакт-диском гораздо ниже. Поэтому операции с файлом выполняются существенно медленнее. Для их ускорения необходимо приобретать дорогие быстродействующие внешние устройства, совершенствовать алгоритмы, уменьшая число обращений к жесткому диску или считывать данные из "медленного" файла в "быструю" оперативную память, обрабатывать их там и снова записывать на диск. В отличие от массива, файлы позволяют сохранять информацию для последующего использования не только в текущей, но и в другой программе.
Файлы удобно использовать потому, что:
П многократно вводить повторяющиеся или просто большие объемы данных для обработки, а потом терять их — неразумно, это трата времени. Удобно заранее создавать отдельные файлы данных, которые можно применять неоднократно;
П программа, работающая с файлами данных, достаточно автономна и не требует постоянного присутствия пользователя, освобождая его для другой работы;
П файл данных может быть подготовлен другой программой, становясь посредником по обмену данными между двумя разными задачами;
П файл может выступать как средство связи программы с внешней средой.
