- •1. Подпрограммы
- •1.1. Описание подпрограмм
- •1.2. Обращение к подпрограммам
- •1.3. Виды параметров подпрограмм
- •1.3.1. Параметры-значения и параметры-переменные
- •1.3.2. Параметры процедурного типа
- •1.3.3. Параметры-константы
- •1.3.4. Нетипизированные параметры подпрограмм
- •1.4. Рекурсивные подпрограммы
- •1.3.5. Массивы и строки открытого типа
- •2. Файлы данных
- •2.1. Текстовые файлы
- •2.2. Типизированные файлы
- •2.3. Нетипизированные файлы
- •2.4. Обработка ошибок, возникающих в действиях с файлами
- •3. Указатели - ссылочные типы данных
- •4. Модули
- •5. Локальные и глобальные сети эвм
- •6. Базы данных
- •6.1. Модели организации данных
- •6.2. Нормализация данных
- •6.3. Типы связей между объектами
- •7. Основы компьютерной безопасности
- •7.1. Компьютерные вирусы
- •7.2. Защита информации в Интернете
- •Контрольные работы
- •Тема 1. Параметры-значения и параметры-переменные
- •Пример выполнения задания
- •Решение. Составляем алгоритм (изображен ниже), а затем программу.
- •Варианты задания
- •Тема 2. Процедурный тип Пример выполнения задания
- •Варианты задания
- •Тема 3. Рекурсия Пример выполнения задания
- •Варианты задания
- •Тема 4. Текстовые и типизированные файлы Пример выполнения задания
- •Варианты задания
- •Тема 5. Указатели Пример выполнения задания
- •Варианты задания
- •Тема 6. Модули Пример выполнения задания
- •Варианты задания
- •Библиографический список
- •Оглавление
- •1.1. Описание подпрограмм ……………………………………………… 1
2.3. Нетипизированные файлы
Этот тип файлов используется для эффективного выполнения операций ввода/вывода с внешними носителями данных, так как он предполагает использование блочного обмена. Описываются нетипизированные файлы так:
var <ФП> : file;
При работе с нетипизированными файлами используют понятия логической и физической записей. В качестве логической записи выступает элемент файла, который может быть самостоятельной единицей обмена, например компонента типизированного файла. Физическую запись образует группа последовательно расположенных на диске логических записей – блок записей. Процедуры Reset и Rewrite, открывающие нетипизированные файлы, могут содержать второй параметр – размер логической или физической записи. По умолчанию он равен 128 байтам. Сам блочный обмен организуют с помощью следующих процедур:
BlockRead(<ФП>, <Буфер>, <Кол>, <Факт_ч>);
BlockWrite(<ФП>, <Буфер>, <Кол>, <Факт_ч>);.
Параметр <Кол> задает количество логических записей, образующих блок, а параметр <Буфер> - переменная, предназначенная для хранения физической записи, т.е. это массив логических записей. Последний параметр не является обязательным и возвращает для процедуры чтения количество фактически обработанных логических записей, что может быть использовано, если размер файла не кратен размеру физической записи.
Покажем на примерах возможные варианты действий с файлами, представленными в программе как нетипизированные. В качестве первого примера рассмотрим реализацию процедуры копирования файла. В языке отсутствуют стандартные средства для выполнения такой важной операции. Поскольку файл может быть произвольного вида, а операция является ответственной, будем использовать в качестве логической записи один байт данных.
program Netyp_file;
const k = 50;
var
s1, s2 : string;
procedure Kopir(in_f, out_f : string);
var
f1, f2 : file;
i : word;
buf : array[1..k] of byte; {Буфер}
begin
assign(f1, in_f);
assign(f2, out_f);
reset(f1, 1); {2-й параметр - размер логической записи}
rewrite(f2, 1);
repeat
BlockRead(f1, buf, k, i);
writeln('Скопировано ', i, ' байтов');
{Для контpоля числа копиpуемых компонент}
BlockWrite(f2, buf, i)
until eof(f1);
close(f1); close(f2)
end; {Kopir}
begin
writeln('Введите имя копиpуемого файла');
readln(s1);
writeln('Введите имя файла-пpиемника данных');
readln(s2);
Kopir(s1, s2);
end.
Во втором примере создадим исходный файл как типизированный, а обработаем его как нетипизированный. При этом, в отличие от первого примера, зададим второй параметр в процедуре reset равным размеру физической записи. Размер последней установим с помощью функции SizeOf.
program Obrabotka_netip_file;
const
kol = 10;
type vec = array[1..kol] of byte;
var
ff : file of vec; {Типизированный файл}
f : file; {Нетипизированный файл}
buf1 : array[1..kol] of vec; {Буфер для обмена с файлом}
buf : vec;
i, j : byte;
begin
randomize;
assign(ff, 'sozdan');
rewrite(ff); {Создаем типизированный файл из 10 векторов}
for i := 1 to kol do
begin
for j := 1 to kol do
buf[j] := random(256);
Write(ff, buf); {Пишем вектор в файл }
end;
close(ff);
assign(f, 'sozdan'); {Связываем с созданным файлом переменную f и}
reset(f, kol*SizeOf(vec)); {работаем с ним как с нетипизированным}
writeln('Создан файл:');
while not EOF(f) do
begin {Выводим содержимое файла на экран}
BlockRead(f, buf1, 1); {Читаем из файла 1 физическую запись}
for i := 1 to kol do
begin
for j := 1 to kol do
write(buf1[i, j] : 4);
writeln
end; {for i}
end; {while}
end.
