Краткий курс лекций по основам структурного программирования на языке Pascal
Вид материала | Курс лекций |
СодержаниеТема 12. Тип данных запись (Record) Тема 13. Работа с файлами в языке Pascal Текстовые файлы Типизированные файлы |
- Правила преобразований из одного типа в другой и правила приведения типов в языке Object, 19.03kb.
- Курс лекций по основам программирования Учебно-методическое пособие, 726.7kb.
- Программа элективного курса «Программирование на языке Pascal» 10 класс, 63.48kb.
- Курс «Программирование на языке Turbo Pascal 0» Цель курса, 19.6kb.
- Краткий курс лекций "Основы программирования на языке Паскаль" Основные понятия, 265.68kb.
- Программирование на языке высокого уровня, 59.92kb.
- Структура программы в языке программирования С++. Обмен данными между функциями (параметры, 37.24kb.
- Краткий курс лекций "Основы программирования на языке Паскаль", 291.49kb.
- Структура программы на языке Turbo Pascal, 26.15kb.
- Тематическое планирование кружка на 2009/2010 уч г. «Основы алгоритмизации и программирования, 63.72kb.
Тема 12. Тип данных запись (Record)
Тип данных запись позволяет объединять разнотипные данные.
Запись – это совокупность компонентов разного типа. Компонент записи называется ее полем. Каждое поле имеет уникальное имя.
Обработка записей в языке TurboPascal:
Описание нового типа данных - запись:
- Описание типа:
Type <имя типа> = Record
<имя поля 1> : <тип поля 1>;
…
<имя поля N> : <тип поля N>
End;
Если несколько полей имеют одинаковый тип, их имена можно перечислить через запятую.
- Описание переменной типа запись:
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-ой записи файла, не читая предыдущих записей (аналог – компакт-диск).
В обобщенном виде алгоритм работы с файлами следующий:
- открыть файл;
- записать в него или прочитать из него данные;
- закрыть файл.
Текстовые файлы
Записи текстового файла – это строки различной длины, поэтому текстовые файлы являются файлами последовательного доступа. Структура текстового файла представлена на рис.6.
| Eoln | | ||||
| Eoln | | | |||
| Eoln | |||||
| Eoln | | | | | |
Eof | | | | | | |
Рис.6. Структура текстового файла |
Таким образом, текстовый файл представляет собой совокупность строк разной длины. Именно поэтому к записям файла возможен только последовательный доступ. Каждая строка заканчивается специальным неотображаемым символом Eoln («End of line» - конец строки). В конце файла записан специальный неотображаемый символ Eof («End of file» - конец файла).
В текстовом файле может храниться не только текст, но и данные других типов (например, числа) в текстовом представлении (т.е. по сути дела все равно текст).
Для работы с текстовыми файлами в языке Pascal используются следующие команды, описания и функции:
- Описание файловой переменной:
Var f : text;
где f – имя файловой переменной, text – еще один стандартный тип данных – текстовый файл.
Файловая переменная – это переменная-указатель, посредством которой идет взаимодействие программы (чтение/запись данных) с внешним файлом.
- Связывание файловой переменной с конкретным именем внешнего файла:
Assign ( f, <имя файла> );
где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды
Assign ( f, ’c:\tp70\example.txt’ );
свяжет файловую переменную f с файлом «example.txt», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.
- Открытие файла для записи данных:
Rewrite (f);
Файл создается заново. Если для записи открыт уже существующий файл, то все данные из него будут потеряны.
- Открытие файла для чтения данных:
Reset (f);
Для чтения можно открыть только существующий файл. Указатель устанавливается на первую запись (т.е. на первый символ первой строки) файла.
- Открытие файла для дополнения (т.е. дописывания данных в конец файла):
Append (f);
Для дополнения можно открыть только существующий файл. Указатель устанавливается после последней записи (строки).
- Запись данных в файл:
Write ( f, <список вывода> );
По сути, используется та же команда, что и для вывода данных на экран. Имя файловой переменной f указывает на то, что вывод будет осуществляться в файл.
Команда Writeln ( f, <список вывода> ); записывает в текстовый файл данные и символ Eoln.
- Чтение данных из файла:
Read ( f, <список переменных> );
Команда Readln ( f, <список переменных> ); позволяет прочитать данные, а также символ Eoln.
- Закрытие файла:
Close ( f );
- Логическая функция Eof ( f ) возвращает значение ИСТИНА, если указатель указывает на символ конца файла и ЛОЖЬ в противном случае.
- Логическая функция Eoln ( f ) возвращает значение ИСТИНА, если указатель указывает на символ конца строки и ЛОЖЬ в противном случае.
Типизированные файлы
Записи типизированного (структурированного) файла имеют одинаковый тип (а значит, имеют одинаковый размер – именно поэтому к ним и возможен прямой доступ). Структуру типизированного файла представлена на рис.7.
Запись 0 | | |
Запись 1 | | |
Запись 2 | | |
Запись 3 | | |
Eof | | |
Рис.7. Структура типизированного файла |
Записи файла пронумерованы. Нумерация начинается с нуля. В конце файла записан специальный неотображаемый символ Eof («End of file» - конец файла).
Для работы с типизированными файлами в языке Pascal используются следующие команды, описания и функции:
- Описание файловой переменной:
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 – целые числа }
- Связывание файловой переменной с конкретным именем внешнего файла:
Assign ( f, <имя файла> );
где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды Assign ( f, ’c:\tp70\data’ ) свяжет файловую переменную f с файлом «data», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.
- Открытие файла для записи данных:
Rewrite (f);
Файл создается заново. Если для записи открыт уже существующий файл, то все данные из него будут потеряны.
- Открытие файла для чтения данных:
Reset (f);
Для чтения можно открыть только существующий файл. Указатель устанавливается на первую запись (т.е. на первый символ первой строки) файла.
- Запись данных в файл:
Write ( f, <имя переменной> );
Тип переменной должен совпадать с типом записей файла.
- Чтение данных из файла:
Read ( f, <имя переменной> );
- Закрытие файла:
Close ( f );
- Функция FileSize( f ) - возвращает количество записей в файле.
- Функция FilePos ( f ) - возвращает номер текущей записи, т.е. той записи файла, на которую указывает указатель.
- Команда Seek ( f , n ) - устанавливает указатель на запись файла с номером n. Например, команда Seek ( f , FileSize( f ) ) установит указатель после последней записи файла. Это позволяет, в частности, дописывать данные в конец типизированного файла.