- •Контрольное задание
- •Вариант 1
- •Основы языка паскаль. Конструкция условного оператора.
- •If условие then оператор1 else оператор2
- •If условие then оператор
- •Структура оператора цикла с предусловием:
- •Операции над строками:
- •Обработка записей
- •Подпрограммы
- •Описание функций
- •Var {локальные вспомогательные переменные}
- •Описание процедур
- •Файлы на магнитном диске
- •Типизированные файлы
- •Var имя: file of базовый тип
Описание процедур
Описание процедуры располагается до исполняемой части программы и является как бы маленькой программой внутри большой. Начинается описание заголовком процедуры.
PROCEDURE идентификатор (параметры);
{Раздел описания локальных данных}
BEGIN
{ТЕЛО ПРОЦЕДУРЫ}
END;
Пример: процедура, издающая звуковой сигнал
procedure beep(a:integer); Begin
Sound(440);
Delay(a);
Nosound;
End;
Механизм передачи параметров в процедуру аналогичен механизму работы с параметрами функций.
Области действия имен. Локальные и глобальные переменные.
Имена переменных и констант, используемых в подпрограммах, могут быть объявлены: в основной программе, в вызывающей подпрограмме, в самой подпрограмме.
Имена, объявленные в основной программе, называют глобальными, к ним возможен доступ из любой подпрограммы, их можно передавать в качестве значений параметров.
Имена, объявленные в списке параметров или внутри подпрограммы, называют локальными, область их действия и доступ к ним ограничиваются самой подпрограммой. При выходе из подпрограммы значения локальных переменных не сохраняются. Их удобно использовать в качестве вспомогательных переменных.
Таким образом, с помощью глобальных переменных можно передавать исходные данные в подпрограмму и возвращать полученные результаты. Однако в этом случае необходимо тщательно следить за всеми глобальными переменными, значения которых используются в подпрограмме, поскольку их изменения, вызванные, например, добавлением новых операторов, будут оказывать влияние на работу программы в целом.
К особенно большим трудностям приводит использование глобальных переменных в подпрограммах при независимой отладке подпрограмм и переносе их в другие программы. Поэтому рекомендуется обмен данными между программой и подпрограммой реализовывать только с помощью параметров.
Локальная и глобальная переменные могут иметь одинаковое имя. Несмотря на это они являются двумя различными переменными, которые располагаются в различных областях памяти. Причем в этом случае глобальная переменная становится недоступной в подпрограмме.
РАБОТА С ФАЙЛАМИ
Файлы на магнитном диске
Данные, размещаемые программой в памяти компьютера, недолговечны; когда питание выключат, они исчезнут, если еще раньше их не сотрет следующая программа. Для сохранения информации всерьез и надолго ее записывают на магнитный диск.
Единицей хранения информации в библиотеке служит книга, единицей хранения информации на диске служит файл. Он имеет имя и занимает на диске область, размер которой зависит от объема файла. В файлах хранят документы, программы, изображения, — одним словом, все, что можно записать при помощи чисел или символов.
Различают два вида файлов: последовательного и произвольного доступа. Последовательные файлы состоят из элементов различной длины, между которыми стоят разделители. Чтобы найти элемент последовательного файла, надо просмотреть все, что ему предшествует.
Файлы произвольного доступа состоят из однотипных элементов, как массивы. Найти любой элемент можно по его
порядковому номеру.
В Паскале последовательные файлы называют текстовыми, а файлы произвольного доступа — типизированными.
Программа может обрабатывать существующий файл или создать новый файл. В любом случае работа с файлом складывается из трёх пунктов:
1) открытие файла;
2) чтение или запись;
3) закрытие файла.
Текстовые файлы
Текстовые файлы хранят информацию в виде последовательности символов. Символы составляют строки произвольной длины. В конце каждой строки находятся два особых символа: #13 #10, которые отделяют строку от следующей. Текстовые файлы широко распространены, их способен создавать любой экранный редактор. В программе на Паскале текстовый файл представляет файловая временная типа TEXT. Ее описывают предложением
VAR имя: TEXT
Файловой переменной назначают имя файла при помощи оператора
assign (файловая переменная, имя файла),
где имя файла — строка, содержащая дисковое имя файла.
Больше нигде в программе не появится имя файла, всюду его заменит файловая переменная.
Теперь файл необходимо открыть. Текстовый файл можно открыть:
для чтения — оператором
reset (файловая переменная);
для записи — оператором rewrite (файловая переменная);
для пополнения — оператором
append (файловая переменная).
В файл, открытый для записи или пополнения, можно только писать, из файла, открытого для чтения, можно только читать. Если необходимо прочесть из файла, открытого для записи, его сначала надо закрыть оператором
close (файловая переменная),
а затем снова открыть уже для чтения.
Чтение из текстового файла
Чтение из файла выполняется хорошо знакомым нам оператором READ. Если перед списком ввода в операторе READ стоит файловая л временная, он вводит данные не с клавиатуры, а из файла. Например,
var ft:text;
a,b,c: integer;
…
read (a,b,c); {ввод с клавиатуры}
read (f,a,b,c); {ввод из файла}
Текстовый файл для оператора READ такой же источник символов, как и клавиатура, только эти символы следуют друг за другом не во времени, а в пространстве файла. Во времени можно перемещаться лишь в одну сторону, по файлу — тоже. Движение допускается последовательное, от начала к концу, поэтому текстовые файлы называют последовательными.
Чтобы уяснить, что прочтет из файла тот или иной оператор READ, введем понятие указателя файла. Фактически указатель — это номер очередного символа файла, но лучше вообразить его в виде стрелки, направленной в определенную точку файла.
Сразу после открытия стрелка указывает на первый символ файла. Чтение очередной порции данных всегда выполняется, начиная с символа, на который показывает стрелка. После чтения стрелка автоматически передвигается вперед на длину прочитанного участка. Так продолжается, пока стрелка не достигнет конца файла. Дальнейшие попытки чтения вызовут сообщение об сшибке.
Как узнать, можно ли еще читать из файла? Для этого в Паскале есть логическая функция
EOF (файловая переменная)
Она возвращает true, если достигнут конец файла, и false в противном случае. Название функции сокращает слова «End Of File» — конец файла.
Дополнительный оператор чтения READLN вводит все, предусмотренное списком ввода, и продвигает указатель до начала следующей строки.
Запись в текстовый файл
Запись в текстовый файл выполняется оператором WRITE, в котором перед списком вывода стоит файловая переменная. Выводимая информация присоединяется к той, что была выведена в файл с момента его открытия.
Желая создать новый файл, его открывают оператором REWRITE. Если же хотят дополнить уже существующий файл, открытие выполняют оператором APPEND. Открытие существующего файла оператором REWRITE приведет к потере того, что находилось там раньше.
Закончив запись в файл, вы должны его закрыть. Только после закрытия новый файл будет окончательно сформирован.
Дополнительный оператор записи WRITELN выводит все, предусмотренное списком вывода, и символы #13 #10 впридачу.
ПРИМЕР. Ввод с клавиатуры и запись в текстовый файл.
var
f: text;
s:string;
begin
assign(f, 'XXX.TXT’); rewrite (f); {открытие файла} readln (s); {ввод с клавиатуры} . while s <> ‘’ do
begin writeln (f,s); {вывод в файл} readln (s); {ввод с клавиатуры}
end {while}; close (f) {закрытие файла}
end.