|
Процедуры и функции модуля Level1 – доступ к секторам виртуального диска
INTERFACE
USES common;
PROCEDURE fromDisk(fn:STRING); {прочитать виртуальный диск}
PROCEDURE toDisk(fn:STRING); {сохранить виртуальный диск}
PROCEDURE putSector(n:INTEGER; s:mySector); {записать s в сектор с номером n}
FUNCTION getSector(n:INTEGER):mySector; {прочитать сектор с номером n}
Процедура FROMDISK
Содержание задачи |
чтение текстового файла в массив |
Уровень сложности |
средний |
Модуль |
Level1 |
Входные параметры |
fn: STRING – имя файла на реальном диске |
Выходные параметры |
нет |
Вызываемые процедуры (функции) |
нет |
Глобальные переменные и константы |
массив sectors; константы dsk_bps, dsk_ns |
Действия |
считывает из файла содержимое виртуального диска |
Проверки |
наличие файла на диске |
Комментарии |
считывает текстовой файл в массив sectors
противоположна процедуре toDisk |
Процедура TODISK
Содержание задачи |
запись массива в текстовой файл |
Уровень сложности |
средний |
Модуль |
Level1 |
Входные параметры |
fn: STRING – имя файла на реальном диске |
Выходные параметры |
нет |
Вызываемые процедуры (функции) |
нет |
Глобальные переменные и константы |
массив sectors; константа dsk_ns |
Действия |
записывает в файл содержимое виртуального диска |
Проверки |
ошибка открытия файла |
Комментарии |
записывает массив sectors в текстовой файл на диске
противоположна процедуре fromDisk |
Процедура PUTSECTOR
Содержание задачи |
занести в массив значение по номеру элемента с проверкой корректности последнего |
Уровень сложности |
низкий |
Модуль |
Level1 |
Входные параметры |
n: integer – номер сектора; s:mySector – содержимое |
Выходные параметры |
нет |
Вызываемые процедуры (функции) |
нет |
Глобальные переменные и константы |
массив sectors; константа dsk_ns |
Действия |
сохраняет указанное содержимое в виртуальный сектор с заданным номером |
Проверки |
0 < n <= dsk_ns ( номер сектора положителен и не превосходит максимальный) |
Комментарии |
выводит сообщение в случае некорректного n; сохраняет заданное содержимое в массив sectors
противоположна функции getSector |
Функция GETSECTOR
Содержание задачи |
извлечь из массива значение по номеру элемента с проверкой корректности последнего |
Уровень сложности |
низкий |
Модуль |
Level1 |
Входные параметры |
n: integer – номер сектора |
Выходные параметры |
нет (только результат функции) |
Тип результата |
mySector |
Вызываемые процедуры (функции) |
нет |
Глобальные переменные и константы |
массив sectors; константа dsk_ns |
Действия |
возвращает содержимое виртуального сектора с заданным номером |
Проверки |
0 < n <= dsk_ns ( номер сектора положителен и не превосходит максимальный) |
Комментарии |
выводит сообщение в случае некорректного n; берет элемент массива sectors
противоположна процедуре putSector |
Текст программы
UNIT level1; {Автор Е.А.Еремин. Пермь, 2004}
{доступ к секторам}
INTERFACE
USES common;
PROCEDURE fromDisk(fn:STRING); {прочитать виртуальный диск}
PROCEDURE toDisk(fn:STRING); {сохранить виртуальный диск}
PROCEDURE putSector(n:INTEGER; s:mySector);
{записать s в сектор с номером n}
FUNCTION getSector(n:INTEGER):mySector;
{прочитать сектор с номером n}
IMPLEMENTATION
PROCEDURE fromDisk(fn:STRING); {считать виртуальный диск}
VAR f:TEXT; b:mySector;
i:INTEGER;
BEGIN ASSIGN(f,fn); {$I-} RESET(F); {$I+}
IF IORESULT <> 0 THEN
BEGIN WRITELN('File "'+fn+'" not found'); EXIT
END;
{Очистка диска. b - "чистый сектор"}
b:='';FOR i:=1 TO dsk_bps DO b:=b+pusto;
FOR i:=0 TO dsk_ns-1 DO sectors[i]:=b;
{Чтение диска}
i:=0;
WHILE NOT EOF(f) DO
BEGIN READLN(f,b); sectors[i]:=b; i:=i+1
END;
CLOSE(f);
END;
PROCEDURE toDisk(fn:STRING); {сохранить виртуальный диск}
VAR f:TEXT; i:INTEGER;
BEGIN ASSIGN(f,fn); {$I-} REWRITE(F); {$I+}
IF IORESULT <> 0 THEN
BEGIN WRITELN('Write error'); EXIT
END;
FOR i:=0 TO dsk_ns-1 DO WRITELN(f,sectors[i]);
CLOSE(f);
END;
PROCEDURE putSector(n:INTEGER; s:mySector);
{записать s в сектор с номером n}
BEGIN IF (n>=dsk_ns) OR (n<0)
THEN WRITELN('Bad sector number ',n)
ELSE sectors[n]:=s;
END;
FUNCTION getSector(n:INTEGER):mySector;
{прочитать сектор с номером n}
BEGIN IF (n>=dsk_ns) OR (n<0) THEN
BEGIN WRITELN('Bad sector number ',n);
getSector:=''; EXIT;
END;
getSector:=sectors[n];
END;
END.
На главную страницу
|