
- •«Паскаль»
- •Этапы полготовки и решения задач на компьютере.
- •Алгоритм. Основные свойства. Способы представления алгоритмов
- •Язык программирования Паскаль. Структура языка. Алфавит языка. Классификация данных и операторов.
- •Встроенные процедуры и функции языка Паскаль. Структура программы на языке Паскаль.
- •Var «список- объявлений переменных»
- •Сложные типы данных
- •Var а,в : mn ; { Переменные типа: mn }
- •Обработка данных
- •Организация обработки данных
- •Ввод-вывод данных. Основные виды работ с файлами любых типов. Основные понятия. Классификация файлов
- •Модульное программирование
- •Связанные структуры
- •Очередь
- •Объектно-ориентированное программирование
- •Инкапсуляция (Определение объекта)
- •Наследование и переопределение. Принцип конструирования программ
- •Полиморфизм
Ввод-вывод данных. Основные виды работ с файлами любых типов. Основные понятия. Классификация файлов
Любой файл имеет 3 характерных особенности:
файл или устройство имеет имя;
файл содержит компоненты (элементы, записи) одного типа;
размер (длина) создаваемого файла не оговаривается и ограничивается только емкостью доступной памяти или устройства.
Для работы с файлом в общем случае надо объявить переменную файлового типа, связать ее с физическим файлом, открыть, обработать и закрыть. В программе объявляется переменная файлового типа (логический файл).
Связь логического файла с физическим файлом устанавливается динамически, т. е. в процессе выполнения программы, с помощью процедуры Assign. Это позволяет посредством одного логического файла обработать ряд физических файлов того же типа, подключая логический файл поочередно к различным физическим файлам процедурой Assign.
В Паскале можно использовать 3 типа файлов:
текстовые (объявляются словом TEXT);
типизированные (объявляются словами FILE of);
нетипизированные (бестиповые, объявляются словом FILE).
Нетипизированные файлы отличаются тем, что для них не указывается тип компонентов файла.
Объявление файлов можно производить в разделе TYPE или VAR. Объявление текстовых файлов производится с помощью слова TEXT; тип TEXT - стандартный. Пример объявления текстовых файлов:
VAR Fl, F2 : TEXT;
где Fl, F2 - файловые переменные, имена логических файлов.
При объявлении типизированных файлов определяется тип компонентов файла. Форма объявления типизированных файлов в разделе VAR:
VAR список-имен-файлов : FILE OF тип-компонентов ;
В программе объявляется или принимается по умолчанию (INPUT и OUTPUT) имя логического файла, которое используется при обращении к процедурам и функциям работы с файлом. Для обработки данных физических файлов, расположенных на магнитном диске, имя логического файла должно быть связано с именем физического файла с помощью процедуры ASSIGN.
Имя физического файла, который связывается с файлом программы, может быть определено с помощью любого выражения строкового типа.
Стандартные аппаратные средства ПК: клавиатура, экран монитора, печатающее устройство (принтер), каналы ввода-вывода - определяются в Паскале специальными именами, которые называются логическими устройствами. В Паскале они рассматриваются как потенциальные источники или приемники информации.
Список логических имен устройств ПК определен следующим образом:
Имена устройств |
Назначение устройств |
CON |
Консоль: клавиатура или экран монитора |
PRN |
Логическое имя принтера |
LPT1, LPT2, LPT3 |
Логические имена принтеров |
AUX |
Имя коммутационного канала, который обычно используется для связи с другими компьютерами |
NUL |
Логическое имя "пустого" устройства |
Для консоли Паскаль устанавливает различие между клавиатурой и экраном по направлению передачи данных: чтение (ввод) возможно только с клавиатуры, а запись (вывод) данных - только на экран. Устройство CON можно назначить любому текстовому файлу программы. А направление передачи данных определить с помощью процедур Reset или Rewrite, подключая файл к экрану или к клавиатуре.
Для устройства NUL операторы ввода-вывода игнорируются.
Имена логических устройств PRN, LPT1 и LPT3 можно использовать только для обращения к устройствам и нельзя использовать, например, для обращения к файлу на МД.
Если к ПК подключено несколько принтеров, доступ к ним осуществляется по их логическим именам LPT1, LPT2 и LPT3. Имена LPT1 и PRN - синонимы. Поэтому назначение выводному текстовому файлу устройства LPT1 или PRN эквивалентно:
Assign ( F1, 'PRN' ) ; Assign ( F2, 'LPT1' ) ;
Стандартный библиотечный модуль PRINTER, входящий в библиотеку Turbo.TPL, объявляет имя файловой переменной LST и связывает его с логическим устройством LPT1. Это дает возможность использовать в программе файл LST для печати результатов работы программы. Например:
PROGRAM PR;
USES PRINTER;
BEGIN WRITELN ( LST, ' ПРИВЕТ! ' );
END.
Все операции по связыванию файла LST с принтером и открытие файла LST выполняет модуль PRINTER.
Открытие и закрытие файлов
После присоединения файловой переменной к конкретному физическому файлу или устройству с помощью Assign файл программы можно открыть только для чтения, только для записи или для записи и чтения. Для открытия файлов используются процедуры Reset, Rewrite и Append. Форма обращения к ним:
Reset ( файловая-переменная );
Rewrite ( файловая-переменная );
Append ( файловая-переменная );
где файловая-переменная - это переменная, связанная с физическим файлом или логическим устройством с помощью Assign.
При выполнении процедуры Reset дисковый файл или логическое устройство подготавливается к чтению данных. Внутренняя переменная-указатель, связанная с этим файлом, указывает на начало файла, т. е. на его компонент с номером 0.
При попытке открыть процедурой Reset несуществующий файл или инициировать чтение из логического выводного устройства (например, из PRN) возникает ошибка.
Паскаль допускает и чтение (Read) и запись (write) в ранее созданные типизированные файлы, открытые с помощью процедуры Reset. Это позволяет корректировать и дополнять созданные типизированные файлы.
Встроенная процедура Rewrite инициирует запись данных в новый файл или вывод данных на логическое устройство, связанное с файловой переменной. При выполнении этой процедуры уничтожается старый файл с таким же именем, если он был ранее создан. При этом никаких сообщений не выдается. Новый дисковый файл подготавливается к приему данных, и его переменная-указатель, связанная с этим файлом, устанавливается в начало файла. После открытия файла процедурой Rewrite можно выводить данные в файл с помощью процедуры Write.
Процедура Append открывает ранее созданный текстовый файл для его дополнения новыми записями: указатель файла устанавливается в его конец, после последней записи файла.
Если текстовый файл был открыт с помощью процедур Reset, Rewrite или Append и не закрыт, то с помощью тех же процедур он может быть открыт повторно (он будет закрыт и вновь открыт). Но лучше закрывать файл с помощью процедуры Close. Повторное открытие с помощью Rewrite стирает старый файл и открывает его для создания.
Процедура Close (файловая-переменная); закрывает файл. Но связь файловой переменной с именем физического файла, установленная с помощью Assign, сохраняется. Поэтому файл можно в программе многократно открывать и закрывать по мере необходимости. Процедура Close обеспечивает сохранность созданных в файле записей. При нормальном завершении программы действия процедуры Close выполняются и без ее вызова, автоматически, по отношению ко всем открытым файлам. Созданные типизированные файлы закрывать оператором Close обязательно. Повторное закрытие файлов недопустимо.
Процедуры и функции для работы с файлами любых типов
С файлами любых типов можно использовать процедуры Assign, открытия и закрытия файлов и процедуры ввода-вывода данных. Кроме того, с файлами любых типов можно использовать следующие процедуры и функции стандартного модуля System: Eof, Erase, ReName, lOResult, ChDir (изменить каталог), MkDir (создать каталог), RmDir (переименовать каталог).
Форма обращения к функции EOF:
EOF (файловая-переменная);
Например: WHILE NOT EOF (FILE1) ...
Функция EOF возвращает значение TRUE, если указатель файла находится за последним элементом файла, и значение FALSE в противном случае. Файловая переменная может относиться к файлу любого типа. Если параметр функции (и круглые скобки) опущен, то используется стандартная файловая переменная INPUT.
Форма обращения к процедуре Erase:
Erase (файловая-переменная);
Процедура Erase стирает физический файл, связанный в этот момент с этой файловой переменной. Файл должен быть закрыт. Например, если файл F связан с помощью процедуры Assign с физическим файлом fl.rez, то после выполнения процедуры Erase (F); физический файл fl.rez будет стерт (удален).
Процедура ReName переименовывает закрытый физический файл, связанный в данный момент с данным логическим файлом.
Форма обращения к процедуре ReName:
ReName (файловая-переменная, новое-имя-файла );
где новое-имя-файла - выражение типа string.
Например, если файл F присоединен к физическому файлу с именем fl.rez, то после выполнения процедуры ReName (F, 'f2.rez'); физический файл fl.rez получит имя f2.rez.
Процедуры работы с файлом возвращают код ошибки, который можно получить с помощью функции IOResult. Она возвращает целое значение, представляющее собой код ошибки неуспешно выполненной процедуры для работы с файлом или нуль в случае ее успешного выполнения. Использовать значение функции IOResult можно .только при отключенных средствах контроля успешности выполнения процедур работы с файлами со стороны системы. Для отключения контроля со стороны системы используют директиву компилятора I: директива I- отключает контроль системы, а I+ - подключает его. После однократного использования функции IOResult ее значение теряется, т. е. использовать значение IOResult можно только один раз. Если значение IOResult надо использовать несколько раз, то его надо переслать в другую переменную типа Word или другого целого типа.
Чтобы предотвратить аварийное завершение программы при неуспешном выполнении любой процедуры работы с файлом, можно программно контролировать ошибки ввода-вывода с помощью функции IOResult. Для этого надо временно отключить контроль ошибок ввода-вывода средствами системы (директивой I-). При этом после выполнения процедуры работы с файлом значение IOResult можно проанализировать и по результатам анализа определить дальнейшие программные действия.
Например: VAR F:FILE OF CHAR;
...
ASSIGN (F,'FILE.DAT');
{$I-} { - отключение средств контроля системы }
RESET (F); { - открытие файла F }
{$I+} { - подключение средств контроля системы }
IF IORESULT <> О THEN ... {- файл не открыт, не
существует }
ELSE ... {- файл открыт, существует }
Процедуры Read и Readln
Процедуры Read и Readln обеспечивают ввод (копирование) чисел, символов и строк в ОП переменных, определенных в списке данных оператора. Ввод данных можно производить из текстового файла, созданного с помощью текстового редактора, или с клавиатуры.
Форма обращения к процедуре Read:
Read (файловая-переменная, список-данных );
- для ввода данных из любого файла или логического устройства;
Read (список-данных);
- для ввода данных из стандартного файла Input;
где файловая-переменная - имя текстового файла, переменная, которая должна быть типа TEXT и связана с файлом или логическим устройством с помощью Assign;
список-данных - последовательность имен переменных, разделенных запятыми: скалярных, элементов массива или элементов записи.
С помощью Read можно вводить символы, строки, целые и вещественные значения в область ОП переменных соответствующего типа. Последовательность данных, вводимых из файла, должна соответствовать последовательности имен списка данных.
Переход на следующую строку при чтении данных из файла осуществляется с помощью процедуры Readln. Список данных в ней не обязателен; если она содержит список данных, то переход на следующую строку осуществляется после ввода всех значений списка данных.
Процедура Readln идентична процедуре Read. За исключением того, что после считывания значения в последнюю переменную списка данных процедуры Readln происходит переход на следующую строку файла (экрана), т. е. оставшаяся часть строки до EOLN пропускается. Так что следующая процедура Read или Readln начнет ввод данных с первого символа следующей строки. Например:
Read (Fid,А,В,С); Read(С,D,Е); Readln(I,G);
Процедура Readln может быть без параметров. Например:
Readln (FID) ; - для файла FID; Readln; - для файла INPUT.
При использовании процедуры Readln (FID); производится переход в начало следующей строки файла FID, т. е. пропуск всех символов текущей строки, вплоть до EOLN. Вызов процедуры в виде 'Readln;' приводит к приостановке выполнения программы до нажатия клавиши Enter. Это можно использовать, например, для просмотра очередных значений, выведенных на экран, а после просмотра нажать Enter.
(2 атт).
Лекция №6.
Процедуры Write и Writeln
Вывод данных в текстовый файл осуществляется в основном для просмотра и подготовки к печати результатов работы программы. Вывод данных производится с помощью процедур Write и Writeln. С их помощью можно выводить (копировать) числа, символы, строки и логические значения из ОП в файл или на устройство (например, на экран или принтер). Форма обращения к процедуре Write:
Write ( список-данных);
- для вывода данных в стандартный файл Output;
Write ( файловая-переменная, список-данных);
- для вывода данных в любой файл или логическое устройство,
где файловая-переменная - имя текстового файла, переменная, которая должна быть типа TEXT и связана с файлом или логическим устройством с помощью процедуры Assign;
список-данных - список, содержащий одно и более выражений, (в том числе констант или имен скалярных переменных, элементов массива или записи). Результатом выражений могут быть значения типа CHAR, STRING, BOOLEAN или арифметические целого или вещественного типа, и форматы для их размещения в выводном текстовом файле. Форматы в списке данных необязательны.
Форматный вывод вещественных значений в форме с плавающей точкой
Для вывода вещественных значений можно использовать форматы в виде: либо только значение W, либо значение W и значение d. Если для вывода вещественного значения используется формат, содержащий значения W и d, значение выводится в форме с фиксированной точкой, т. е. в виде целой и дробной части числа, разделенных точкой.
Если для вывода вещественного значения используется формат, содержащий только поле W, значение выводится в форме с плавающей точкой (в экспоненциальной форме), т. е. в виде мантиссы и порядка.
Порядок числа n - это показатель степени, в которую надо возвести 10 -основание системы счисления, и для получения значения числа в форме с фиксированной точкой надо 10n умножить на мантиссу.
_
…_-X.X…XE±XX
мантисса порядок
Например:
Значение числа в форме с плавающей точкой |
Соответствующая ему традиционная форма |
Значение числа с фиксированной точкой |
-1.2345Е+03 |
-1.2345 • !03 |
-1234.5 |
5.678Е-02 |
5.678 • Ю-2 |
0.05678 |
Лекция №7.