- •Рекурсивные алгоритмы (продолжение)
- •I, j: integer;
- •I, j: integer;
- •I, j: integer;
- •Метод динамического программирования
- •I, j: integer;
- •I, j: Integer;
- •I, j: integer;
- •Тип «Денежный»
- •Стандартные процедуры и функции для работы с любыми файлами
- •Текстовый файл
- •Стандартные процедуры для работы с текстовыми файлами
- •Условная компиляция
- •I, j: Integer;
- •I, j: Integer;
- •I, j: Integer;
- •I, j: integer;
Тип «Денежный»
var
x: Currency;
Диапазон изменения: –922337203685477.5808 . . 922337203685477.5807
Объем памяти: 8 байт.
Стандартные процедуры и функции для работы с любыми файлами
Синтаксис TP7:
procedure Assign(var F: <Файловый тип>; <Имя файла>: string);
Процедура связывает файловую переменную с реальным файлом.
procedure Erase(var F: <Файловый тип>);
Удаляет файл.
procedure Rename(var F: <Файловый тип>; <Новое имя файла>: string);
Переименовывает файл
procedure MKDir(<Имя папки>: string);
Создает пустую папку
procedure RMDir(<Имя папки>: string);
Удаляет пустую папку
function IOResult: integer;
Возвращает код ошибки при работе с файлом.
Синтаксис Delphi:
procedure AssignFile(var F: <Файловый тип>; <Имя файла>: string);
Процедура аналогична процедуре Assign.
Замечание
Существуют альтернативные варианты процедур:
procedure Rename(var F <Файловый тип>; <Новое имя файла>: PChar);
procedure MKDir(<Имя папки>: PChar);
procedure RMDir(<Имя папки>: PChar);
PChar – специальный «строковый» тип, разговор о нём пойдёт позже.
Замечание
Файловых типов в языке Паскаль может быть три: текстовые файлы, типизированные файлы и файлы без типа.
Текстовый файл
Тип «Текстовый файл», или файл последовательного доступа, предназначен для работы с т.н. текстовыми файлами (на дисках и не только). Признаком текстового файла является множество байтовых пар с кодами 13 и 10. В литературе для них встречается обозначение CR (Carriage Return, возврат каретки) и LF (Line Feed, перевод строки). Между парами с кодами 13 и 10 обычно стоят символы разговорных алфавитов, образующие осмысленный текст. Для служебных целей текстовые файлы могут содержать, например, числа, представляющие входной набор данных для программы.
Стандартные процедуры для работы с текстовыми файлами
Синтаксис TP7:
procedure Reset(var F: <Файловый тип>);
Процедура открывает файл для чтения (данных из файла).
procedure Rewrite(var F: <Файловый тип>);
Процедура открывает файл для записи (данных в файл).
procedure Append(var F: <Файловый тип>);
Процедура открывает файл для ДОзаписи данных в конец файла.
procedure Close(var F: <Файловый тип>;
Процедура закрывает ранее открытый файл.
Условная компиляция
{$define <Имя режима>}
Включает режим компиляции с именем <Имя режима>.
{$ifdef <Имя режима>}
<Операторы, которые «видны» компилятору только в режиме “<Имя режима>”>
{$else}
<Операторы, которые «видны» компилятору только в противоположном режиме >
{$endif}
Классическая развилка на этапе компиляции.
{$ifdef <Имя режима>}
<Операторы, которые «видны» компилятору только в режиме “<Имя режима>”>
{$endif}
Упрощенная развилка.
{$ifndef <Имя режима>}
Заголовок «перевернутой» развилки
Ниже приводится текст программы, которая строит «самый дешевый путь» из левого верхнего угла матрицы размерами в правый нижний угол любым из двух ранее описанных методов.
Первый метод (рекурсивный) включается, если «НЕ закомментирована» строка
{$define RECOURSIVE}.
Второй метод (динамического программирования) включается, если эта строка «закомментирована», т.е. имеет вид
// {$define RECOURSIVE}.
program Project3;
{$APPTYPE CONSOLE}
uses
SysUtils;
//{$define RECOURSIVE}
const
mMax = 20;
nMax = 20;
type
MyRecord = record
{$ifdef RECOURSIVE}
CellPrice, Frequency: integer;
{$else}
CellPrice, PathPrice: integer;
{$endif}
Direction: char;
end;
MyArray = array[1 .. mMax, 1 .. nMax] of MyRecord;
var
m, n, p: integer;
A: MyArray;
tStart, tFinish: TDateTime;
procedure InputArray(var C: MyArray);
var
F: Text;