- •Ю.П. Чернов, о.П. Шафеева программирование для начинающих
- •1. Среда программирования turbo pascal 7.0
- •1.1. Структура меню среды
- •1.2. Правила оформления программ
- •1.3. Команды редактора тп
- •Команды удаления и вставки
- •1.4. Компиляция и исправление синтаксических ошибок
- •2. Элементы языка pascal
- •2.1. Алфавит языка
- •2.2. Константы. Идентификаторы
- •2.3. Операторы
- •2.3.1. Оператор присваивания
- •2.3.2. Оператор безусловного перехода
- •Стандартные функции
- •2.3.3. Условный оператор if
- •2.3.4. Опеpатоp варианта case
- •2.3.5. Составной и пустой операторы
- •2.3.6. Операторы цикла
- •2.4. Процедуры прерываний
- •2.5. Типизированные константы
- •2.6. Структура программы
- •2.7. Подпрограммы
- •2.7.1. Определение процедур и функций
- •2.7.2. Вложенные подпрограммы
- •2.7.3. Вызов подпрограмм
- •2.7.4. Процедуры
- •2.7.5. Функции
- •2.7.6. Передача в подпрограмму параметров-массивов и параметров-строк
- •2.7.7. Рекурсия
- •2.8. Типы в Турбо Паскале
- •2.8.1. Целые типы
- •Классификация целых типов
- •Встроенные процедуры и функции для целых типов
- •2.8.2. Логический тип
- •2.8.3. Символьный тип
- •Служебные символы
- •2.8.4. Строковый тип
- •Встроенные функции и процедуры для обработки строк
- •Процедуры преобразования
- •2.8.5. Перечислимый тип
- •2.8.6. Ограниченный тип (диапазон)
- •2.8.7. Вещественные типы
- •Вещественные типы
- •Встроенные функции
- •2.8.8. Структурированные типы данных. Массивы
- •2.8.9. Множества
- •2.8.10. Записи
- •2.9. Изменение типа выражения
- •2.10. Процедурные типы
- •2.11. Файлы
- •Общие процедуры и функции для работы с файлами
- •2.11.1. Текстовые файлы
- •2.11.2. Типизированные файлы
- •2.11.3. Нетипизированные файлы
- •2.12. Указатели и динамическая память
- •2.13. Модули
- •2.14. Библиотека Турбо Паскаля
- •2.14.1. Модуль crt
- •2.14.2. Модуль graph
- •Var driver, Mode: integer переменные драйвера и режима.
- •Управление графическим режимом
- •Управление экраном, окном, страницей
- •Управление цветом и палитрой
- •Работа с точками
- •Работа с линиями
- •Построение фигур из линий
- •Построение криволинейных фигур
- •Работа с текстом
- •Обмен с памятью
- •2.15. Динамические структуры данных
- •2.15.1. Связанные динамические данные. Списки
- •Чтобы сослаться на двунаправленный кольцевой список как на единый программный объект, используется указатель, значением которого является ссылка на заглавное звено списка.
- •2.15.2 Очередь
- •2.15.3. Стек
- •3. Практическое программирование Этапы подготовки и решения задач на компьютере
- •Порядок выполнения лабораторных работ
- •Лабораторная работа 1 Основы программирования в среде Турбо Паскаля.
- •Приоритет операций в выражении
- •Задание 1 (программа 1_1)
- •Лабораторная работа 2 Программирование разветвленных алгоритмов. Операторы передачи управления
- •Лабораторная работа 3 Программирование циклических алгоритмов с заданным числом повторений
- •Лабораторная работа 4 Программирование циклических алгоритмов с предусловием
- •Лабораторная работа 5 Программирование циклических алгоритмов с постусловием
- •Модифицировать программу 3_2 для вычисления функций f1(X) и f2 (X) с применением оператора цикла с постусловием. Выполнить ее и сравнить результаты с полученными ранее.
- •Лабораторная работа 6 Программирование алгоритмов обработки одномерных массивов
- •Задание 1
- •Лабораторная работа 7
- •Лабораторная работа 8 Программирование с использованием функций
- •Лабораторная работа 9 Программирование с использованием процедур
- •Лабораторная работа 10 Обработка символьных и строковых данных
- •Лабораторная работа 11 Файлы
- •Лабораторная работа 12 Записи
- •Лабораторная работа 13 Решение нелинейных уравнений
- •Задание (программа_13)
- •Лабораторная работа 14 Вычисление приближенного значения определенного интеграла
- •Лабораторная работа 15 Модульное программирование
- •Лабораторная работа 16 Графика
- •Библиографический список
- •Обозначения графические в схемах алгоритмов (гост 19.701-90)
- •Зарезервированные слова Turbo Pascal 7.0
- •Приложение в
- •Кодировка символов в соответствии с кодами ascii
- •Приложение г
- •Альтернативная кодировка госТа для кодов 128...255
- •Клавиши с кодами из двух частей
- •Содержание
Общие процедуры и функции для работы с файлами
Процедуры и функции |
Выполняемые действия |
Assign(Var f, Name: String) RESET(Var f) REWRITE(Var f) CLOSE(f) Erase(Var f)
ReName(f, NewName: string) EOF(f: boolean)
FLUSH(<ф.п.>) ChDir(<каталог>) GetDir(<л.у.>,<каталог>)
MkDir(<каталог>) RmDir(<каталог>) |
Cвязывает <ф.п.> f с файлом Name Открывает файла с логическим именем f для чтения. Открывает файл с логическим именем f для записи Закрывает файл с логическим именем f Удаляет (стирает) физический файл, связанный с f, с диска. Стираемый файл должен быть закрыт Переименовывает физический файл, ранее связаный с файловой переменной f, в новое имя NewName Функция возвращает значение TRUE, если достигнут признак конца файла или файл пуст, иначе возвращает FALSE. Очищает внутренний буфер файла Изменяет текущий каталог Определяет имя текущего каталога, где <каталог> переменная типа string Создает новый каталог на диске Удаляет пустой каталог |
Процедура CLOSE(f) закрывает открытый ранее логический файл f и обеспечивает сохранение всех записей и регистрацию файла на диске. Вызовы процедуры CLOSE необходимы для завершения работы с файлами. Также необходимо закрывать открытые файлы перед их удалением (ERASE) или переименованием (RENAME). Попытка закрыть уже закрытый файл или еще не открытый вызовет сбой в работе программы. Закрытие файлов выполняется автоматически по отношению ко всем открытым файлам при нормальном завершении программы. При этом, связь файла с файловыми переменными сохраняется.
При переименовании процедурой ReNAME менять можно лишь имя файла, имя диска менять нельзя. Предварительно файл должен быть закрыт процедурой CLOSE.
Функция EOF(f) тестирует конец файла. Если она возвращает TRUE, при записи очередной компонент будет добавлен в конец файла, при чтении файл считается исчерпанным.
Существует также ряд других процедур и функций для определения объема свободного пространства (DiskFree), объема диска (DiskSize), условного признака последней операции ввода-вывода (Ioresult), атрибутов файла (GetfAttr), атрибутов первого из файлов, зарегистрированного в каталоге (FindFirst); поиска следующего файла в каталоге (FindNext);возвращения времени создания или последнего обновления файла (GetTime); установления новой даты создания или обновления файла (SetTime), атрибутов файла (SetfAtr); расщепления имени файла (FSPLIT); поиска файла в списке каталогов (FseArch); дополнения файлового имени до полной спецификации (Fexpand) [1].
2.11.1. Текстовые файлы
Это файлы последовательного доступа. Они предназначены для хранения текстовой информации.
Текстовые файлы связываются с файловыми переменными типа TEXT:
Var <ф.п.> : TEXT;
Текстовый файл в ТП трактуется как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой строки. При создании текстового файла в конце каждой строки ставится специальный признак EOLN (End Of LiNe - конец строки), а в конце всего файла – признак EOF (End Of File - конец файла) c кодом 26. Тестируются эти признаки одноименными логическими функциями.
Для доступа к записям текстового файла применяются процедуры READ, READLN, WRITE, WRITELN. В них можно использовать переменное число параметров, в качестве которых могут быть символы, строки и числа. Первым параметром в любой из перечисленных процедур может стоять файловая переменная. В этом случае осуществляется обращение к дисковому файлу или логическому устройству, связанному с файловой переменной процедурой ASSIGN, и открытому процедурами RESET или REWRITE. Если файловая переменная не указана, происходит обращение к стандартным файлам INPUT и OUTPUT.
Процедура READ обеспечивает ввод символов, строки и чисел. Она имеет следующий формат
READ(<ф.п.>,<список_ввода>); или READ(<список_ввода>);
где <список_ввода> последовательность из одной или более переменных типа CHAR, STRING или любого целого или вещественного типов, например:
READ(Х); ввод переменной Х с клавиатуры
READ(f,x1,x2,x3); ввод трех переменных из файла
При вводе переменной типа CHAR выполняется чтение одного символа из файла и присваивается считанное значение переменной. Если перед чтением указатель файла достиг конца очередной строки, то считывается символ CR (код 13). Если достигнут конец файла то символ EOF.
При вводе переменной типа STRING количество считанных символов равно максимальной длине строки, если раньше не встретились символы CR, EOF. В этом случае эти символы в строку не помещаются. Если количество символов во входной строке больше максимального размера строки, то «лишние» символы до конца строки отбрасываются, а новое обращение к READ возвращает пустую строку.
Таким образом, READ не в состоянии прочесть последовательность строк: читается только одна строка, остальные окажутся пустыми. Для ввода последовательности строк символов применяется процедура READLN.
При вводе числовых данных процедура READ сначала выделяет подстроку во входном потоке по следующему правилу: все ведущие пробелы, символы табуляции и маркеры конца строк пропускаются до первого значащего символа; и, наоборот, после первого значащего символа любой из перчисленных символов или символ EOF указывает на конец подстроки. Выделенная таким образом подстрока рассматривается как символьное представление числовой константы и присваивается переменной. Фактически весь файл рассматривается как одна длинная строка чисел.
Процедура READLN также обеспечивает ввод символов, строк и чисел: READLN(f,x); или READLN(f, x1,x2,...,xN);
Она идентична процедуре READ за исключением того, что после считывания последней переменной списка ввода оставшаяся часть строки до маркера EOLN пропускается, поэтому следующее обращение к READLN или READ начинается с первого символа новой строки.
Эту процедуру можно вызвать без параметра <список ввода>: READLN(f); READLN; что приведет к пропуску всех символов текущей строки. Таким способом можно организовать ожидание нажатия клавиши ENTER при открытом окне результатов.
При чтении с клавиатуры курсор помещается в начало следующей строки, в то время как в процедуре READ остается в текущей строке.
Процедура WRITEобеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство. Формат обращения:
WRITE(<ф.п.>,<список_вывода>]); или WRITE(<список_вывода>]);
где <список вывода> это последовательность из одного или более выражений (переменных) символьного, строкового, логического, а также любого целого или вещественного типа, например:
WRITE(x); WRITE(f,x1,x2,xN);
Файловая переменная, если она указана, должна быть предварительно описана типом TEXT и связана с именем файла или логического устройства процедурой ASSIGN. Если файловая переменная отсутствует, подразумевается вывод в стандартный файл OUTPUT (на экран дисплея).
Любой элемент списка вывода X может быть представлен в следующей форме: X[:w[:d]], причем элементы, заключенные в квадратные скобки могут отсутствовать. Здесь X имя переменной или выражение, w, d выражения целого типа WORD (0..65535). Если параметр w присутствует, то он указывает минимальную ширину поля для записи значения X. При длине переменной X меньше w слева производится дополнение поля вывода пробелами, если Х больше w, то w игнорируется и выводится необходимое число символов (по умолчанию w=23); если параметр w не указан, то значение соответствующей переменной выводится вслед за предыдущим без какого-либо разделения.
Параметр d задает количество десятичных знаков в дробной части числа вещественного числа. Используется только для вывода значений выражений вещественных типов. Если параметр d не указан, то число выводится в экспоненциальной форме, в противном случае в формате представления с фиксированной точкой. Если d=0, выводится только целая часть числа. Например: результаты вывода для числа Х=3.22 будут следующие:
WRITE(X:6:2); {3.22}
WRITE(X:6:0); {3}
WRITE(X:4:2); {3.22}.
При выводе логических выражений в зависимости от значения выводятся подстроки TRUE и FALSE. Ввод логических констант процедурами READ и READLN не предусмотрен.
Вывод процедурой WRITELN отличается от WRITE тем, что выводимая строка завершается кодами CR (возврат каретки) и LT (перевод строки), т. е. добавляет маркер конца строки.
При вызове WRITELN можно опускать <список_вывода>. В этом случае в файл передается признак конца строки EOLN, что при выводе на экран приводит к переводу курсора в начало следующей строки:
WRITELN(f); WRITELN;
Для текстовых файлов также применимы процедуры и функции (табл. 8).
Пример программы, которая вводит с клавиатуры три вещественных числа и в файл FXD.DAT записывает эти числа и их сумму.
PROGRAM FileFD;
VAR
y,x1,x2,x3:real;
FD:TEXT;
BEGIN
ASSIGN(FD,'FXD.DAT');
READ(x1,x2,x3); {ввод трех чисел}
REWRITE(FD); {открыть файл для записи}
y:=x1+x2+x3;
WRITELN(FD,'x1=',x1,' x2=',x2,' x3=',x3); {вывод в файл x1,x2,x3}
WRITELN(FD,'сумма=',y); {вывод в файл суммы}
CLOSE(FD); {закрыть файл}
END.
Таблица 8
Тексториентированные процедуры и функции
Процедуры, функции |
Выполняемые действия |
Append(<ф.п.>);
EOLN(<ф.п.>);
SeekEOLN(<ф.п.>);
SeekEOF(<ф.п.>); |
Процедура открывает уже существующий файл f для дозаписи в его конец (для расширения) Функция возвращает значение TRUE, если во входном файле f достигнуты маркеры конца строки EOLN или конца файла EOF, и FALSE в противном случае Функция пропускает все пробелы и знаки табуляции до первого признака EOLN или первого значащего символа. Возвращает значение TRUE, если обнаружен маркер конца файла или конца строки. Если <ф.п.> опущена, функция проверяет стандартный файл INPUT Функция пропускает все пробелы, знаки табуляции и маркеры конца строк до маркера конца файла или первого значащего символа. Если маркер обнаружен, возвращает значение TRUE |