- •Содержание
- •Часть 1. Основные понятия программирования §1.1. Этапы разработки программного обеспечения
- •§1.2. Основные сведения об алгоритмах Понятие алгоритма
- •Свойства алгоритма
- •Формы записи алгоритмов
- •Блок-схемы алгоритмов
- •§1.3. Языки программирования
- •§1.4. Паскаль и Object Pascal, Турбо-Паскаль и Delphi
- •Контрольные вопросы
- •Язык, оболочка и интегрированная среда разработки
- •Часть 2. Общие сведения о языке Паскаль §2.1. Алфавит и служебные слова
- •Описание общих конструкций языка
- •§2.2. Структура программы
- •§2.3. Разделы описаний Описание меток
- •Определение констант
- •Определение типов
- •Описание переменных
- •Контрольные вопросы
- •Часть 3. Простые типы данных Иерархия типов
- •§3.1. Целые типы
- •§3.2. Вещественные типы
- •§3.3. Логический тип
- •§3.4. Литерный тип
- •§3.5. Перечисляемый тип
- •§3.6. Диапазоны (интервальный тип)
- •Дополнительные типы в Delphi
- •Контрольные вопросы
- •Глава 4. Операторы языка Паскаль Выражения
- •§4.1. Оператор присваивания
- •§4.2. Ввод-вывод данных
- •§4.3. Составной оператор
- •§4.4. Пустой оператор
- •§4.5. Безусловный оператор перехода
- •§4.6. Условный оператор
- •§4.7. Оператор цикла с параметром for
- •§4.8. Оператор цикла с предусловием while
- •§4.9. Оператор цикла с постусловием repeat
- •§4.10. Оператор выбора case
- •Контрольные вопросы
- •Глава 5. Процедурное программирование §5.1. Функции
- •Параметры – значения
- •Параметры – переменные
- •Бестиповые параметры
- •§5.2. Процедуры
- •Правила использования подпрограмм
- •Рекурсия
- •Директивы
- •Процедурные типы
- •Пример использования подпрограмм
- •Контрольные вопросы
- •Глава 6. Структурированные типы данных
- •§6.1. Массивы
- •§6.2. Строки
- •§6.3. Записи
- •§6.4. Множества
- •Пример использования множеств
- •§6.5. Файлы
- •Установочные и завершающие операции
- •Операции ввода-вывода
- •Перемещения по файлу
- •Пример работы с файлом
- •Обработка ошибок ввода-вывода
- •Специальные операции
- •Пример объединения двух файлов
- •Текстовые файлы
- •Стандартные текстовые файлы
- •Файлы без типа
- •Контрольные вопросы
- •Глава 7. Динамические структуры данных §7.1. Динамические переменные
- •§7.2. Указатели
- •Работа с динамическими переменными
- •Пример двухсвязанного циклического списка
- •Указатели без типа
- •Контрольные вопросы
- •Глава 8. Низкоуровневые возможности Паскаля §8.1. Язык Ассемблер
- •§8.2. Доступ к аппаратуре Доступ к памяти
- •Доступ к портам ввода-вывода
- •Работа по прерываниям
- •Контрольные вопросы
- •Глава 9. Модули §9.1. Основные понятия
- •§9.2. Использование модулей
- •§9.3. Стандартные модули
- •§9.4. Модуль Crt
- •Работа с экраном в текстовом режиме
- •Работа с клавиатурой
- •Работа со звуком
- •§9.5. Модуль dos
- •§9.6. Графический режим монитора
- •Контрольные вопросы
- •Глава 10. Введение в объектно-ориентированное программирование §10.1. История развития программирования
- •Понятие объекта
- •§10.2. Свойства объектов
- •Раннее и позднее связывание
- •§10.3. Виртуальные методы
- •Конструкторы и деструкторы
- •§10.4. Динамические объекты
- •Скрытые поля и методы
- •Контрольные вопросы
- •Литература
Специальные операции
Эта группа операций предназначена для действий с элементами файловой системы ОС – каталогами и файлами. К ней относятся следующие процедуры:
удаление файла на диске
Erase (< имя_файловой_переменной >);
переименование файла
Rename (< имя_файловой_переменной >, <строка>);
установка текущего каталога
ChDir;
создание нового каталога
MkDir (<имя_подкаталога>);
удаление пустого подкаталога
RmDir (<имя_подкаталога>);
Перечисленные средства работы с файлами являются стандартными, при использовании модуля DOS возможно применение дополнительных процедур и функций.
Пример объединения двух файлов
Из двух отсортированных в убывающем порядке файлов целых чисел IN1.DAT и IN2.DAT получается новый файл OUT.DAT, отсортированный в том же порядке.
Program Merge;
{ Учебный пример:
Создание файла OUT.DAT, отсортированного в убывающем порядке,
объединенного из файлов IN1.DAT и IN2.DAT, так же отсортированных }
Var In1,In2,Out: File of integer;
x1,x2: integer; { вспомогательные переменные - элементы файлов }
Begin
{ Ставим в соответствие внутреннее и внешнее имя файлов }
Assign(In1,'IN1.DAT');
Assign(In2,'IN2.DAT');
Assign(Out,'OUT.DAT');
{$I-} { Запрет контроля ошибок в среде ОС }
{ Открываем и контролируем открытие файлов }
Reset(In1);
If IOResult <>0 Then Begin
Writeln ('Ошибка файла IN1.DAT');
Exit; End;
Reset(In2);
If IOResult <>0 Then Begin
Writeln ('Ошибка файла IN2.DAT');
Exit; End;
Rewrite(Out);
If IOResult <>0 Then Begin
Writeln ('Ошибка создания файла OUT.DAT');
Exit; End;
{$I+} { Обязательно восстанавливаем контроль за ошибками }
{ в цикле While обрабатываются элементы файлов }
While not (EOF(In1) or EOF(In2)) do
Begin
{ Читаем элемент файла, но указатель не перемещаем,
иначе будет пропущен последний элемент }
Read(In1,x1); Seek(In1,FilePos(In1)-1);
Read(In2,x2); Seek(In2,FilePos(In2)-1);
If x1<x2 Then Begin
Write(Out,x2);
Seek(In2,FilePos(In2)+1)
end
else Begin
Write(Out,x1);
Seek(In1,FilePos(In1)+1)
end;
end;
{ Чтение одного из входных файлов закончено –
переписываем конец незаконченного файла в выходной }
While not EOF(In1) do
Begin
Read(In1,x1);
Write(Out,x1);
end;
While not EOF(In2) do
Begin
Read(In2,x2);
Write(Out,x2);
end;
{ Закрытие использованных файлов – хороший стиль программирования}
Close (In1);
Close (In2);
Close (Out);
end.
Текстовые файлы
На персональных компьютерах значительное количество информации обрабатывается в виде текстов, хранящихся в текстовых файлах. Их структура отличается от структуры обычных файлов тем, что содержимое текстового файла рассматривается как последовательность символьных строк переменной длины, разделенных комбинацией символов, называемой «конец строки». Эти файлы завершаются специальным кодом «конец файла».
Знание конкретной кодировки управляющих символов не обязательно, так как они автоматически учитываются при выполнении операций над текстовыми файлами, но это и обеспечивает специфику данного вида файлов.
Файлы, имеющие такую структуру, имеют стандартный тип:
Type <имя_типа> = text;
Var < имя_файловой_переменной >: text;
и имеют в своем составе элементы литерного типа, которые включают управляющие символы.
Набор операций, применимых к текстовым файлам, содержит, кроме операций для обычных файлов, следующие. К начальным операциям добавлена процедура
Append (< имя_файловой_переменной >);
предназначенная для записи информации в файл. Ее действие аналогично Rewrite, но при наличии файла она не очищает файл, а ставит указатель файла на его конец. Таким образом, процедура Append используется, когда необходимо добавить новые строки в конец уже существующего файла.
Так же используется процедура SetTextBuf, определяющая буфер для обмена с текстовым файлом, здесь не рассматривается.
В операциях, связанных с вводом-выводом, помимо процедур Read и Write, имеются две их модификации:
ReadLn (< имя_файловой_переменной >[,<список_ввода>]);
WriteLn (< имя_файловой_переменной >[,<список_ввода>]);
Они выполняют аналогичные действия, но после операций чтения или записи производят переход к следующей строке текстового файла. Хотя операция Read и переходит автоматически к следующей строке после окончания текущей, но процедура ReadLn выполняет это принудительно, не дожидаясь окончания строки, то есть возможен пропуск данных.
При посимвольной обработке, чтобы проверить, достигнут ли конец текущей строки, используется функция EOLn (< имя_файловой_переменной>). Таким образом, типовая схема обработки текстового файла включает в себя двойной цикл. При чтении файла:
...
Assign (<имя_файловой_переменной >,<внешнее_имя_файла >);
Reset (<имя_файловой_переменной >); { Возможна обработка особых ситуаций }
While not EOF (<имя_файловой_переменной >) do
Begin
While not EOLn (<имя_файловой_переменной >) do
Begin
Read (<имя_файловой_переменной >,< символьная переменная >);
< операторы обработки символа >;
end;
ReadLn (<имя_файловой_переменной >);
end;
Close (<имя_файловой_переменной >);
...
При создании файла:
...
Assign (<имя_файловой_переменной >,<внешнее_имя_файла >);
Rewrite (<имя_файловой_переменной >); { Возможна обработка особых ситуаций }
While < признак_окончания_файла > do
Begin
While <признак_окончания_строки> do
Begin
Write (<имя_файловой_переменной >,< символьная переменная >);
< операторы формирования символа >;
end;
WriteLn (<имя_файловой_переменной >);
end;
Close (<имя_файловой_переменной >);
...
