Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.orgfree.com

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта 2005

Процедуры и функции модуля 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.


На главную страницу


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com


Free Web Hosting