Краткий курс лекций по основам структурного программирования на языке Pascal

Вид материалаКурс лекций

Содержание


Тема 12. Тип данных запись (Record)
Тема 13. Работа с файлами в языке Pascal
Текстовые файлы
Типизированные файлы
Подобный материал:
1   2   3   4   5   6   7

Тема 12. Тип данных запись (Record)


Тип данных запись позволяет объединять разнотипные данные.

Запись – это совокупность компонентов разного типа. Компонент записи называется ее полем. Каждое поле имеет уникальное имя.


Обработка записей в языке TurboPascal:

Описание нового типа данных - запись:
  1. Описание типа:

Type <имя типа> = Record

<имя поля 1> : <тип поля 1>;



<имя поля N> : <тип поля N>

End;

Если несколько полей имеют одинаковый тип, их имена можно перечислить через запятую.
  1. Описание переменной типа запись:

Var <имя переменной> : <имя описанного выше типа>;

Например:

Type Book = Record { тип данных книга состоит из трех полей }

Name, Author : String [ 30 ]; { название и автор }

Year : Integer { год издания }

End;

Var Bk : Book; { Переменная Bk – запись с тремя полями }


Обращение к полям записи:

Для обращения к отдельному полю записи следует сначала указать имя переменной типа запись, затем через точку имя поля. Например: Bk.Name.

Для ввода значений полей описанной выше записи Bk может быть записан следующий фрагмент программы:

Write (‘Введите название книги ’); Readln (Bk.Name);

Write (‘Введите фамилию автора ’); Readln (Bk.Author);

Write (‘Введите год издания книги ’); Readln (Bk.Year);

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

With <имя переменной-записи> Do

<составной оператор>;

Оператор With позволяет «вынести за скобки» имя переменной-записи. Приведенный выше фрагмент программы можно переписать с использованием оператора присоединения:

With Bk Do

Begin

Write (‘Введите название книги ’); Readln (Name);

Write (‘Введите фамилию автора ’); Readln (Author);

Write (‘Введите год издания книги ’); Readln (Year)

End;


Тема 13. Работа с файлами в языке Pascal


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

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

Файл – это поименованное место на внешнем носителе, представляющее собой совокупность отдельных записей. Файл данных позволяет:
  • хранить данные во внешней памяти долговременно и независимо от программы;
  • использовать одни и те же данные несколькими программами.


По способу представления данных файлы делятся на
  • текстовые: в них информация представлена в виде текста - последовательности символов. Например, число 2006 представляет собой последовательность из четырех символов (т.е. строку) – ‘2006’.
  • файлы с данными во внутреннем представлении: в них данные представлены в той форме, в какой они хранятся в памяти компьютера (см. соответствующую литературу о представлении данных в памяти ЭВМ). Например, то же самое число 2006 в таком файле будет записано уже не в виде четырех цифр, а как целое число (в двоичной системе счисления). Файлы во внутреннем представлении в языке Pascal называют еще структурированными, или типизированными, поскольку все записи такого файла имеют одинаковый тип.



По способу доступа к данным файлы делятся на:
  • файлы последовательного доступа: для того, чтобы обратиться к N-ой записи файла, необходимо прочесть предыдущие N-1 запись (аналог – магнитофонная кассета);
  • файлы прямого доступа: можно напрямую обратиться к N-ой записи файла, не читая предыдущих записей (аналог – компакт-диск).


В обобщенном виде алгоритм работы с файлами следующий:
  1. открыть файл;
  2. записать в него или прочитать из него данные;
  3. закрыть файл.

Текстовые файлы


Записи текстового файла – это строки различной длины, поэтому текстовые файлы являются файлами последовательного доступа. Структура текстового файла представлена на рис.6.





Eoln







Eoln










Eoln




Eoln













Eof




















Рис.6. Структура текстового файла


Таким образом, текстовый файл представляет собой совокупность строк разной длины. Именно поэтому к записям файла возможен только последовательный доступ. Каждая строка заканчивается специальным неотображаемым символом Eoln («End of line» - конец строки). В конце файла записан специальный неотображаемый символ Eof («End of file» - конец файла).

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

Для работы с текстовыми файлами в языке Pascal используются следующие команды, описания и функции:
  1. Описание файловой переменной:

Var f : text;

где f – имя файловой переменной, text – еще один стандартный тип данных – текстовый файл.

Файловая переменная – это переменная-указатель, посредством которой идет взаимодействие программы (чтение/запись данных) с внешним файлом.
  1. Связывание файловой переменной с конкретным именем внешнего файла:

Assign ( f, <имя файла> );

где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды

Assign ( f, ’c:\tp70\example.txt’ );

свяжет файловую переменную f с файлом «example.txt», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.
  1. Открытие файла для записи данных:

Rewrite (f);

Файл создается заново. Если для записи открыт уже существующий файл, то все данные из него будут потеряны.
  1. Открытие файла для чтения данных:

Reset (f);

Для чтения можно открыть только существующий файл. Указатель устанавливается на первую запись (т.е. на первый символ первой строки) файла.
  1. Открытие файла для дополнения (т.е. дописывания данных в конец файла):

Append (f);

Для дополнения можно открыть только существующий файл. Указатель устанавливается после последней записи (строки).
  1. Запись данных в файл:

Write ( f, <список вывода> );

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

Команда Writeln ( f, <список вывода> ); записывает в текстовый файл данные и символ Eoln.
  1. Чтение данных из файла:

Read ( f, <список переменных> );

Команда Readln ( f, <список переменных> ); позволяет прочитать данные, а также символ Eoln.
  1. Закрытие файла:

Close ( f );
  1. Логическая функция Eof ( f ) возвращает значение ИСТИНА, если указатель указывает на символ конца файла и ЛОЖЬ в противном случае.
  2. Логическая функция Eoln ( f ) возвращает значение ИСТИНА, если указатель указывает на символ конца строки и ЛОЖЬ в противном случае.

Типизированные файлы


Записи типизированного (структурированного) файла имеют одинаковый тип (а значит, имеют одинаковый размер – именно поэтому к ним и возможен прямой доступ). Структуру типизированного файла представлена на рис.7.

Запись 0




Запись 1




Запись 2




Запись 3




Eof





Рис.7. Структура типизированного файла


Записи файла пронумерованы. Нумерация начинается с нуля. В конце файла записан специальный неотображаемый символ Eof («End of file» - конец файла).

Для работы с типизированными файлами в языке Pascal используются следующие команды, описания и функции:
  1. Описание файловой переменной:

Var f : File Of <тип записи файла>;

где f – имя файловой переменной.

Файловая переменная – это переменная-указатель, посредством которой идет взаимодействие программы (чтение/запись данных) с внешним файлом.

Записи файла могут иметь любой из рассмотренных выше типов (как стандартный, так и сконструированный в блоке Type).


Например:

Type Stud = Record

Name : String;

Group : Integer;

Rating : Real

End;

Var f1 : File of Stud; { записями файла f1 являются записи (Record) из трех полей }

f2 : File Of Integer; { записи файла f2 – целые числа }

  1. Связывание файловой переменной с конкретным именем внешнего файла:

Assign ( f, <имя файла> );

где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды Assign ( f, ’c:\tp70\data’ ) свяжет файловую переменную f с файлом «data», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.
  1. Открытие файла для записи данных:

Rewrite (f);

Файл создается заново. Если для записи открыт уже существующий файл, то все данные из него будут потеряны.
  1. Открытие файла для чтения данных:

Reset (f);

Для чтения можно открыть только существующий файл. Указатель устанавливается на первую запись (т.е. на первый символ первой строки) файла.
  1. Запись данных в файл:

Write ( f, <имя переменной> );

Тип переменной должен совпадать с типом записей файла.
  1. Чтение данных из файла:

Read ( f, <имя переменной> );
  1. Закрытие файла:

Close ( f );
  1. Функция FileSize( f ) - возвращает количество записей в файле.
  2. Функция FilePos ( f ) - возвращает номер текущей записи, т.е. той записи файла, на которую указывает указатель.
  3. Команда Seek ( f , n ) - устанавливает указатель на запись файла с номером n. Например, команда Seek ( f , FileSize( f ) ) установит указатель после последней записи файла. Это позволяет, в частности, дописывать данные в конец типизированного файла.