Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИнфТехнКомпТехн

.pdf
Скачиваний:
18
Добавлен:
02.04.2015
Размер:
35.33 Mб
Скачать

Если произошла ошибка, то в блоке 3 программа завершается с сообщением Error - Ошибка. Окно работающего приложения задания 2 показано на Рис. 8.4.

В противном случае в блоке 4 пользователь вводит два целых положительных числа N1 и N2. В блоке 5 определяется число компонент Imax = N2-N1, которые надо занести в файл. Блок 6 открывает цикл записи Imax компонент, в теле которого блок 7 выполняет запись в файл чисел в интервале N1..N2. В блоке 8 файл закрывается, а затем открывается для проверки, которая организуется в блоке 10 цикла путем построчного вывода блоком 11 Imax компонент из файла вместе с номерами. В блоке 12 файл закрывается. Для наблюдения за процессом в алгоритм введены паузы (блоки 9 и 13).

Листинг программы: program Prg_8_2; {$APPTYPE CONSOLE} uses SysUtils,RusTrans; label

Exit; const

FileDir='c:\users\PO_11\Ivanov\08_2\';;

 

 

 

var

 

// Файловая переменная

 

 

MyFile: File of integer;

 

 

FilePath, FileName: string;

 

 

 

 

 

N1,N2,i,imax,Temp: integer;

 

 

 

 

 

begin

имя

файла'));

 

 

 

writeln(Rus('Введите

 

 

 

readln(FileName);

 

 

 

 

 

 

 

writeln;

 

 

 

 

 

 

 

FilePath:=FileDir+FileName;

// Связь

файлом на

диске

 

AssignFile(MyFile,FilePath);

 

{$I-} // Отключить контроль

ошибок

 

 

 

Rewrite(MyFile);// Создать новый

файл

 

 

 

{$I+};// Включить контроль

ошибок

 

открытия файла

 

if IOResult = 0 // Проверить

ошибку

 

then writeln(Rus('Спасибо'))

 

 

 

 

 

else begin

 

 

 

 

 

 

 

writeln(Rus('Ошибка'));

 

 

 

 

 

 

readln;

при

ошибке

 

 

 

 

goto Exit // Выход

 

 

 

 

end;

 

 

 

 

 

 

 

writeln;

N1, N2'));

 

 

 

 

writeln(Rus('Введите

 

 

 

 

readln(N1,N2);

 

 

 

 

 

 

 

writeln;

 

 

 

 

 

 

 

imax:=N2-N1;

 

 

 

 

 

 

 

for i:=0 to imax do

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

Temp:=N1+i;

// Записать в файл

значение

номер i

 

write(MyFile,Temp)

 

end; CloseFile(MyFile); Reset(MyFile);

Открыть

файл

для

writeln(Rus('Компоненты

файла'));

//

проверки

 

 

 

 

 

 

 

 

 

191

 

 

 

 

for i:=0 to imax do // Цикл

чтения

 

 

begin

//

Указатель

файла

на

Seek(MyFile,i);

read(MyFile,Temp);

//

Прочитать элемент

его на

writeln(Rus('Компонент

'),i,'

= ',Temp);//

Вывести

дисплей

 

 

 

 

end; CloseFile(MyFile); writeln; writeln('OK'); readln; Exit:;

end.

Задание 3

Создать программу для высокоскоростного копирования файла-источника в файлприемник. В качестве файлаисточника использовать результат компиляции Prg_8_1.exe программы задачи 1, созданный ранее. В качестве файлаприемника определить файл с именем Prg_8_1a.exe. После выполнения нужно проверить, что на диске имеется файлприемник того же размера и содержания. Чтобы убедиться в этом, можно этот файл исполнить.

Листинг программы:

 

 

 

 

 

 

 

 

program Prg_8_3;

 

 

 

 

 

 

 

 

{$APPTYPE CONSOLE}

 

 

 

 

 

 

 

 

uses

 

 

 

 

 

 

 

 

SysUtils,RusTrans;

 

 

 

 

 

 

 

 

label

 

 

 

 

 

 

 

 

Exit;

FileDir='c:\users\PO_11\Ivanov\08_1\';;

const

FileDir='c:\users\PO_11\Ivanov\08_3\';;

 

 

 

 

var

 

 

 

 

 

 

 

 

InFile,OutFile: File;// Файловые переменные

 

 

 

Buf: array[1..512] of byte;

// Буфер

к

файлам

 

FilePath1,FilePath2: string;

// Пути

 

i,j: integer;

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

FilePath1:=FileDir1+'prg_8_1.exe';

Связь

 

файлом

источником

AssignFile(InFile,FilePath1);

//

 

на диске

 

 

 

 

 

 

 

 

FilePath2:=FileDir2+'prg_8_1a.exe';

файлом

приемником на

AssignFile(OutFile,FilePath2); //

Связь

диске

// Открыть

файд

источник

 

 

Reset(InFile,512);

 

 

Rewrite(OutFile,512);// Создать файл приемник

 

 

writeln(Rus('Файл

источник '),FilePath1);

 

 

 

writeln(Rus('Файл

приемник '),FilePath2);

 

 

 

writeln;

 

файл?'));

 

 

 

 

 

writeln(Rus('Копировать

 

 

 

 

 

readln;

 

начато'));

 

 

 

 

writeln(Rus('Копирование

 

 

 

 

writeln;

 

 

 

 

 

 

 

 

while not EOF(InFile) do

 

 

 

 

 

 

 

begin

 

 

/

Читать

блок

из

InFile

BlockRead(InFile,Buf,

 

 

192

 

 

 

 

 

 

BlockWrite(OutFile,Bu

/

Писать блок из буфера

end;

writeln(Rus('Копирование завершено')); readln;

CloseFile(InFile); // Закрыть файл источник CloseFile(OutFile); // Закрыть файл приемник end.

Задание 4

Создать программу обмена данными с файлом, использующую связь с файлами без файловых переменных. Она заносит в буфер 6 случайных чисел и переносит их в файл (он создается в папке проекта). Затем буфер обнуляется, и из файла возвращаются первые 4 числа. Окно работающего приложения задания 2 показано на Рис. 8.5.

Листинг программы:

 

 

 

 

 

 

 

program Prg_8_4;

 

 

 

 

 

 

 

 

{$APPTYPE CONSOLE}

 

 

 

 

 

 

 

uses

 

 

 

 

 

 

 

 

 

SysUtils,RusTrans;

 

 

 

 

 

 

 

const

// Константа Count

 

 

 

 

 

Count=6;

 

 

 

 

 

var

 

 

// Дескриптор

файла

 

 

 

hMyFile: Integer;

 

 

 

Buffer: Array[1..Count] of Byte;

 

// Буфер

 

 

i, Fact: Integer;

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

файл

 

 

hMyFile:=FileCreate('MyFile'); // Создать

 

 

writeln(Rus('В буфере случайные числа'));

 

 

Randomize;

 

 

 

 

 

буфер

 

 

 

for i:=1 to Count do // Заполнить

 

 

 

begin

 

 

 

 

 

 

 

 

 

Buffer[i]:= Random(100);

 

 

буфера

на

дисплей

writeln('

', Buffer[i]); // Вывод

end;

 

 

 

 

Count); // Запись

в

файл

Fact:=FileWrite(hMyFile, Buffer,

writeln(Rus('В

файл

записаны

'),Fact);

 

 

 

readln;

 

 

очищается'));

 

 

 

 

 

writeln(Rus('Буфер

 

 

 

 

 

for i:=1 to Count do

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

Buffer[i]:=0;

 

 

// Вывод

буфера

на

дисплей

writeln('

',Buffer[i]);

end;

 

 

 

 

 

 

 

 

 

readln;

 

 

 

// Установить маркер

на

начало

FileSeek(hMyFile, 0, 0);

файла

 

 

 

 

 

 

 

 

файла

Fact:=FileRead(hMyFile, Buffer, Count-2); // Чтение из

writeln(Rus('Из

файла в

буфер прочитаны'));

 

 

for i:=1 to Count do

 

 

 

 

 

 

 

begin

',Buffer[i]);

// Вывод

буфера

на

дисплей

writeln('

end;

 

буфере не

нулевых чисел

'),Fact);

 

writeln(Rus('В

 

 

 

 

 

193

 

 

 

 

 

FileClose (hMyFile); // Закрыть файл readln;

end.

Выводы

1.В Delphi определены типизированный, текстовый и нетипизированный файлы.

2.Связь с файлами может быть через файловые переменные или по именам.

3.При применении файловых переменных для связи с файлами на диске используется процедура AssignFile.

4.В типизированном файле возможен произвольный доступ к компоненту с любым номером.

5.В текстовом файле произвольный доступ к символу невозможен. Можно обращаться к строкам текста.

6.Нетипизированные файлы полезны для скоростного копирования.

9. Подпрограммы

Подготовка к работе

1.По рекомендованной литературе изучить:

правила объявления подпрограмм,

связь формальных и фактических параметров,

способы передачи фактических параметров в подпрограмму,

обращение к процедурам и функциям.

2.Разработать алгоритмы и программы решения задач.

Контрольные вопросы

1.Что такое подпрограмма? Ее назначение.

2.Правила объявления процедур в программе.

3.Правила объявления функций в программе.

4.Правила обращения к процедуре в программе.

5.Правила обращения к функции в программе.

6.Формальные и фактические параметры.

7.Передача параметров в процедуру с помощью параметров-значений.

8.Передача параметров в процедуру с помощью параметров-переменных. Использование слова var.

9.Передача параметров в процедуру с помощью параметров-констант. Использование слова const.

10.Использование слова out.

Задания к работе

1.Создать программу, использующую подпрограмму-функцию. Функция должна возвращать сумму элементов с заданными свойствами в массивах или матрицах. Варианты заданий приведены в Табл. 9.1. Проект – консольное приложение.

2.Создать программу, использующую подпрограмму-процедуру. В этом задании подпрограмма должна возвратить и следы матриц. Проект – консольное приложение.

 

Таблица 9.1 - Варианты задания 1

Что искать

 

Примечание

 

 

 

 

 

Суммы ненулевых элементов массивов X(n), Y(m).

 

Для массива.

 

 

 

 

 

Суммы положительных элементов массивов X(n), Y(m).

 

Для массива.

 

 

 

 

 

194

 

 

 

Суммы отрицательных элементов массивов X(n), Y(m).

Для массива.

 

 

Суммы элементов массивов X(n), Y(m). имеющих значения в интервале

Для массива.

Min…Max.

 

 

 

Суммы ненулевых элементов матриц X(m,n) и Y(p,q).

Для

матрицы.

 

Суммы положительных элементов матриц X(m,n) и Y(p,q).

Для

матрицы.

 

Суммы отрицательных элементов матриц X(m,n) и Y(p,q).

Для

матрицы.

 

Суммы элементов матриц X(m,n) и Y(p,q), имеющих значения в интервале

Для

Min…Max.

матрицы.

 

 

Суммы ненулевых элементов каждой строки матрицы X(m,n).

Для строки.

 

 

Суммы положительных элементов каждой строки матрицы X(m,n).

Для строки.

 

 

Суммы отрицательных элементов каждой строки матрицы X(m,n).

Для строки.

 

 

Суммы элементов каждой строки матрицы X(m,n), имеющих значения в

Для строки.

интервале Min…Max.

 

 

 

Суммы ненулевых элементов каждого столбца матрицы X(m,n).

Для столбца.

 

 

Суммы положительных элементов каждого столбца матрицы X(m,n).

Для столбца.

Суммы отрицательных элементов каждого столбца матрицы X(m,n).

Для столбца.

 

 

Суммы элементов каждого столбца матрицы X(m,n), имеющих значения в

Для столбца.

интервале Min…Max.

 

Пример выполнения Задание 1

Найти след (сумма элементов главной диагонали) квадратных матрицы A[k,k] и B[n,n], где k, n – размеры матриц. Сделаем это с помощью подпрограммы-функции Sled. В программе пользователь по запросу вводит размеры матриц A и B. Затем матрицы заполняются случайными числами с помощью вложенных циклов и функции Random (возвращает случайные вещественные числа в интервале 0..1). Для контроля ввода матрицы выводятся на экран. Далее последовательно для матриц A и B вызывается функция Sled, и вычисленные значения следов матриц A и B выводятся на экран.

Листинг программы

 

 

 

 

program Prg_9_1;

 

 

 

 

{$APPTYPE CONSOLE}

 

 

 

 

uses

 

 

 

 

 

SysUtils,RusTrans;

 

 

 

 

const

// Максимальный размер

матриц

 

Max=40;

 

type

 

 

// Тип для

матрицы

Mas=array[1..Max,1..Max] of Real;

var i,j,k,n:Integer; A,B:Mas; Sled1,Sled2:Real;

 

function Sled(M:Mas; r:Integer):Real;

// Функция

var i:Integer; s:Real;

 

 

 

begin

 

суммы

 

 

 

s:=0; // Обнуление

 

 

суммы

for i:=1 to r do s:=s+M[i,i]; // Накопление

 

 

195

 

 

 

Result:=s;

end; begin

writeln(Rus('Введите размеры матриц не более '),Max); write(Rus('Первая k=')); // Первая матрица

ReadLn(k);

write(Rus('Вторая n=')); // Вторая матрица readln(n);

writeln;

writeln(Rus('Спасибо. Для продолжения нажмите Enter')); writeln;

readln;

Randomize;

for i:=1 to k do// Формирование матрицы A for j:=1 to k do A[i,j]:=0.5-random;

for i:=1 to n do// Формирование матрицы B

for j:=1 to n do B[i,j]:=0.5-random; writeln(Rus('Матрицы

заполнены

случайными числами')); writeln;

 

 

for i:=1 to k do// Вывод

матрицы

A

 

 

begin

 

 

 

 

 

 

 

for j:=1 to k do write(A[i,j]:8:3);

 

 

 

writeln;

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

writeln;

 

 

матрицы

B

 

 

for i:=1 to n do// Вывод

 

 

begin

 

 

 

 

 

 

 

for j:=1 to n do write(B[i,j]:8:3);

 

 

 

writeln;

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

readln;

 

// Вызов

функции для

первой

матрицы

Sled1:=Sled(A,k);

Sled2:=Sled(B,n);

// Вызов

функции для

второй

матрицы

writeln(Rus('Результаты'));

// Заголовок ответа

 

writeln;

 

 

 

 

 

 

 

writeln('Sled1= ', Sled1:5:2); // Ответы

 

 

writeln('Sled2= ', Sled2:5:2);

 

 

 

 

readln;

// Ожидание

Enter

 

 

 

 

end.

 

 

 

 

 

 

 

Задание 2

Найти сумму всех элементов и след (сумму элементов главной диагонали) квадратных матриц A[k,k] и B[n,n], где k, n – размеры матриц. Сделаем это с помощью подпрограммыпроцедуры Sum_Sled. В отличие от задания 1 в подпрограмме вычисляются два значения

Sum – сумма и Sled - след.

Листинг программы: program Prg_9_2; {$APPTYPE CONSOLE} uses

SysUtils, RusTrans; const

Max=40;

// Максимальный размер матриц

 

196

type

// Тип для матрицы

Mas=array[1..Max,1..Max] of real;

var i,j,k,n:integer; A,B:Mas;

 

Sum1,Sum2,Sled1,Sled2:real;

 

procedure Sum_Sled(var Sum,Sled:real;M:Mas; r:integer); //

Процедура

 

 

 

 

 

 

 

 

var

 

 

 

 

 

 

 

 

i,j:integer;

 

 

 

 

 

 

 

begin

// Обнуление

суммы

 

 

 

 

Sum:=0;

 

 

 

 

Sled:=0;

// Обнуление

следа

 

 

 

 

 

for i:=1 to r do

 

 

 

 

 

 

 

for j:=1 to r do begin

 

 

 

// Накопление суммы

Sum:=Sum+M[i,i];

 

 

 

if i=j then Sled:=Sled+M[i,j];

// Накопление следа

end;

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

end;

 

 

 

матриц

не

более '),Max);

writeln(Rus('Введите размеры

write(Rus('Первая

k=')); // Первая матрица

readLn(k);

 

n=')); // Вторая

матрица

write(Rus('Вторая

readln(n);

 

 

 

 

 

 

 

 

writeln;

 

 

продолжения

нажмите Enter'));

writeln(Rus('Спасибо. Для

writeln;

 

 

 

 

 

 

 

 

readln;

 

 

 

 

 

 

 

 

randomize;

 

 

 

 

матрицы

A

for i:=1 to k do// Формирование

for j:=1 to k do A[i,j]:=0.5-random;

 

B

for i:=1 to n do// Формирование

матрицы

for j:=1 to n do B[i,j]:=0.5-random; writeln(Rus('Матрицы

заполнены случайными числами')); writeln;

 

for i:=1 to k do// Вывод

матрицы

A

 

begin

 

 

 

for j:=1 to k do write(A[i,j]:8:3);

 

 

writeln;

 

 

 

end;

 

 

 

writeln;

матрицы

B

 

for i:=1 to n do// Вывод

 

begin

 

 

 

for j:=1 to n do write(B[i,j]:8:3);

 

 

writeln;

 

 

 

end;

 

 

 

readln;

 

процедуры для

матрицы A

Sum_Sled(Sum1,Sled1,A,k); // Вызов

Sum_Sled(Sum2,Sled2,B,n); // Вызов

процедуры для

матрицы B

writeln(Rus('Результаты'));

// Заголовок ответа

writeln;

 

writeln('Sum1=',Sum1:5:2,' Sled1= ', Sled1:5:2); writeln('Sum2=',Sum2:5:2,' Sled2= ', Sled2:5:2);

197

readln;

// Ожидание Enter

end.

 

Выводы

1.Для упрощения программ используются подпрограммы. При их многократном использовании код вводится один раз.

2.Доступны два вида подпрограмм – функции и процедуры. Функция возвращает одно значение, процедура – ни одного или несколько.

3.Процедура вызывается по имени (со списком фактических параметров) в строке кода программы.

4.Функция вызывается по имени (со списком фактических параметров) в выражениях. При установленной опции расширенного синтаксиса функцию можно вызывать, как процедуру. При этом значение, возвращаемое функцией, игнорируется.

5.В подпрограмму могут передаваться параметры-значения, параметры-переменные (со словом var, это адреса с возможностью чтения/записи), параметры-константы (со словом const, это адреса с возможностью только чтения), пара- метры-выходные (со словом out, это адреса с возможностью только записи).

11. Динамическая память

Подготовка к работе

1.По рекомендуемой литературе изучить:

назначение динамической памяти,

назначение и свойства указателей,

операции с динамическими структурами,

фрагментацию данных в динамической памяти.

2.Составить программы решения задач.

Контрольные вопросы

1.Что такое динамическая память?

2.Назначение и свойства указателей.

3.Типизированные указатели.

4.Указатель Pointer.

5.Процедура выделения New(p) динамической памяти для типизированных структур.

6.Процедура освобождения Dispose(p) динамической памяти для типизированных структур.

7.Процедура выделения GetMem(p,size) динамической памяти для структур произвольного размера.

8.Процедура освобождения FreeMem(p,size) динамической памяти для структур произвольного размера.

Задание к работе

1.Программа демонстрации работы с типизированными динамическими структурами. Создать динамические структуры ds1 и ds2, выполнить над ними операцию op, после чего освободить память для указанных структур в порядке, обратном выделению. Проект – консольное приложение.

2.Программа скоростного копирования файла произвольного размера (файл prg_8_1.exe) из папки 08_01 в папку 10_02 с использованием ДП и процедур

GetMem и FreeMem.

Варианты заданий представлены в табл. 11.1.

Таблица 11.1 - Варианты заданий

198

ds1

ds2

op

Word

Real

сложение

Real

Integer

умножение

Integer

byte

вычитание

byte

Word

деление

Word

Real

сложение

Real

Integer

умножение

Integer

byte

вычитание

byte

Word

деление

Real

Real

сложение

Integer

Integer

умножение

byte

byte

вычитание

Word

Word

деление

Real

Real

сложение

Integer

Integer

умножение

byte

byte

вычитание

Пример выполнения Задание 1

Создать динамические структуры типов byte и word, выполнить над ними операцию сложения, после чего освободить память для указанных структур в порядке, обратном выделению. Проект – консольное приложение.

Листинг программы:

 

 

 

 

program Prg_10_1;

 

 

 

 

{$APPTYPE CONSOLE}

 

 

 

 

uses

 

 

 

 

 

 

SysUtils,RusTrans;

 

 

 

 

const

 

//Указатели с

инициализацией

p1:^Byte=Nil;

p2:^Word=Nil;

 

 

 

 

 

var

 

 

 

 

 

 

Result:real;

 

 

 

 

 

begin

 

 

p1'));

 

 

writeln(Rus('Объект

p1

 

new(p1);

// Выделить

ДП под

 

writeln(Rus('

Размер p1='),SizeOf(p1));

writeln(Rus('

Размер p1^='),SizeOf(p1^));

writeln(Rus('Объект

p2'));

p2

 

new(p2);

// Выделить

ДП под

 

writeln(Rus('

Размер p2='),SizeOf(p2));

writeln(Rus('

Размер p2^='),SizeOf(p2^));

writeln;

 

 

операнды'));

 

writeln(Rus('Введите

 

write('

a=');

//ПРисвоить значение

р1

readln(p1^);

write('

b=');

//ПРисвоить значение

р2

readln(p2^);

Result:=p1^+p2^;//Операция с

р1 и

р2}

writeln('p1^=',p1^);

 

 

 

 

writeln('p2^=',p2^);

 

 

 

 

writeln(Rus('Результат операции = '),Result:5:2); readln;

Dispose(p2);

//Освободить ДП под

р2

 

199

 

p2:=Nil;

//Освободить ДП под

р1

 

Dispose(p1);

 

p1:=Nil; writeln; write('p1=');

 

пуст

if p1=Nil then writeln('Nil'); // Указатель p2

write('p2=');

 

 

пуст

if p2=Nil then writeln('Nil'); // Указатель p2

readln;

 

 

 

end.

 

 

 

Задание 2

 

 

 

Программа скоростного копирования файла произвольного размера (файл prg_8_1.exe) из папки 08_01 в папку 10_02 с использованием ДП и процедур GetMem и FreeMem.

Листинг программы:

 

 

 

 

 

 

 

program Prg_10_2;

 

 

 

 

 

 

 

{$APPTYPE CONSOLE}

 

 

 

 

 

 

 

uses

 

 

 

 

 

 

 

SysUtils,RusTrans;

FileDir1='c:\users\PO_11\Ivanov\08_1\';

const

FileDir2='c:\users\PO_11\Ivanov\10_2\';

 

 

 

 

var

 

//

Файловые

 

 

 

InFile,OutFile:file;

к

 

 

FilePath1,FilePath2:str

//

Пути

 

 

 

Size:Integer;

 

//

Число

 

ДП

 

 

Buffer:PChar;

 

//

Буфер в

 

 

begin

 

 

Путь

к

файлу источнику

FilePath1:=FileDir1+'prg_8

 

AssignFile(InFile,FilePath

 

Связь

к

с

файлом

FilePath2:=FileDir2+'prg_8

 

Путь

файлу приемнику

AssignFile(OutFile,FilePat

 

Связь

 

с

файлом

Reset(InFile);

 

 

Открыть

InFile

 

 

Rewrite(OutFile);

 

 

Создать OutFile

(по

128

Size:=FileSize(InFile);

 

Число

записей

writeln(Rus('Размер

входного

файла = '),Size);

Buffer

GetMem(Buffer,Size*128); //

Выделить в

 

ДП

байтах)

 

= '),SizeOf(Buffer),

 

 

writeln(Rus('Размер буфера

 

 

Rus(' блока по 128 байт'));

 

 

 

 

 

 

readln;

 

 

Копирование из

Infile

в

BlockRead(InFile,Buffer^,Size);//

Buffer

 

 

 

 

 

 

 

BlockWrite(OutFile,Buffer^,Size); // Копирование из Buffer

в OutFile

 

завершено'));

 

 

 

writeln(Rus('Копирование

файла

=

writeln(Rus('Размер

выходного

'),FileSize(OutFile));

 

 

 

 

readln;

 

 

 

 

 

FreeMem(Buffer);// Освободить Buffer

 

 

 

Buffer:=Nil;

// Сделать Buffer пустым

 

 

 

Write(Rus('Буфер='));

 

 

 

 

if Buffer=Nil then writeln('Nil')

 

//

Закрыть

else writeln(Rus('Ошибка')); CloseFile(InFile);

файлы

 

 

 

 

 

 

 

200