Данному образовательному сайту пришлось несколько раз менять свое имя. С 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

Процедуры и функции модуля Level2 – доступ к кластерам

INTERFACE
USES common, level1;
PROCEDURE putCluster(n:INTEGER; s:myCluster); {сохраняет s в кластер с номером n}
FUNCTION  getCluster(n:INTEGER):myCluster; {читает кластер с номером n}

Функция FIRSTSECTOR

Содержание задачи

вычисления по формуле

Уровень сложности

низкий

Модуль

Level2

Входные параметры

n: BYTE – номер кластера

Выходные параметры

нет (только результат функции)

Тип результата

INTEGER

Вызываемые процедуры (функции)

нет

Глобальные переменные и константы

константы fs_spc, fs_bi

Действия

по номеру кластера рассчитывает номер первого сектора в нем

Проверки

нет

Комментарии

рассчитывает номер сектора по числу секторов в кластере и с учетом размера каталога

Функция LASTSECTOR

Содержание задачи

вычисления по формуле

Уровень сложности

низкий

Модуль

Level2

Входные параметры

n: BYTE – номер кластера

Выходные параметры

нет (только результат функции)

Тип результата

INTEGER

Вызываемые процедуры (функции)

firstSector

Глобальные переменные и константы

константа fs_spc

Действия

по номеру кластера рассчитывает номер последнего сектора в нем

Проверки

нет

Комментарии

добавляет к номеру начального сектора число секторов в кластере

Процедура PUTCLUSTER

Содержание задачи

записать длинную строку в несколько соседних элементов массива

Уровень сложности

средний

Модуль

Level2

Входные параметры

n: integer – номер кластера; s:myCluster – содержимое

Выходные параметры

нет

Вызываемые процедуры (функции)

firstSector, lastSector, putSector (Level1)

Глобальные переменные и константы

константа dsk_bps

Действия

сохраняет указанное содержимое в виртуальный кластер с заданным номером

Проверки

для простоты нет (рассчитываем на Level1)

Комментарии

преобразует номер кластера в последовательность номеров секторов и сохраняет последние, используя процедуру putSector; в ходе записи исходное содержимое разбивает на части по dsk_bps байт

противоположна функции getCluster

Функция GETCLUSTER

Содержание задачи

прочитать несколько соседних элементов массива и собрать в общий результат

Уровень сложности

средний

Модуль

Level2

Входные параметры

n: integer – номер кластера

Выходные параметры

нет (только результат функции)

Тип результата

myCluster

Вызываемые процедуры (функции)

firstSector, lastSector, getSector (Level1)

Глобальные переменные и константы

нет

Действия

возвращает содержимое виртуального кластера с заданным номером

Проверки

для простоты нет (рассчитываем на Level1)

Комментарии

преобразует номер кластера в последовательность номеров секторов и читает последние, используя функцию getSector; результат суммируется в единую переменную

противоположна процедуре putCluster

Текст программы

UNIT level2; {Автор Е.А.Еремин. Пермь, 2004} {доступ к кластерам} INTERFACE USES common, level1; PROCEDURE putCluster(n:INTEGER; s:myCluster); {сохраняет s в кластер с номером n} FUNCTION getCluster(n:INTEGER):myCluster; {читает кластер с номером n} IMPLEMENTATION FUNCTION firstSector(n:BYTE):INTEGER; {первый сектор кластера n} BEGIN firstSector:=n*fs_spc+fs_bi {0-й кластер начинается с сектора с номером fs_bi} END; FUNCTION lastSector(n:BYTE):INTEGER; {последний сектор кластера n} BEGIN lastSector:=firstSector(n)+fs_spc-1 END; FUNCTION getCluster(n:INTEGER):myCluster; {читает кластер с номером n} VAR r:myCluster; i:INTEGER; BEGIN {добавить проверку} r:=''; FOR i:=firstSector(n) TO lastSector(n) DO r:=r+getSector(i); {суммируем все сектора в r} getCluster:=r; END; PROCEDURE putCluster(n:INTEGER; s:myCluster); {сохраняет s в кластер с номером n} VAR i:INTEGER; w:mySector; BEGIN {добавить проверку} FOR i:=firstSector(n) TO lastSector(n) DO BEGIN w:=COPY(s,1,dsk_bps); {выделить очередной сектор} DELETE(s,1,dsk_bps); {больше он не нужен} putSector(i,w) {сохранить сектор} END; END; END.


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


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


Free Web Hosting