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

Процедуры и функции модуля Level4 – команды ОС

INTERFACE
USES common, level1, level2, level3;
PROCEDURE doCommand(c:STRING); {расшифровывает и выполняет команду}

Процедура DOCOMMAND

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

выделить во введенной строке первое слово (название команды) и вызвать по нему нужную процедуру

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

средний

Модуль

Level4

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

c: STRING – строка с командой

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

нет

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

cmd_dir … cmd_ver (для каждой команды ОС); getWord

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

массив comm, переменная restLine

Действия

преобразовать все буквы к верхнему регистру; выделить первое слово в строке и сравнить со списком команд; если слово отсутствует – выдать сообщение

Проверки

наличие команды в списке

Комментарии

используя процедуру getWord выделяем первое слово строки, а остаток ее помещаем в restLine; просматриваем массив comm и запоминаем индекс в случае совпадения команды; по индексу реализуем вызов нужной подпрограммы или выдаем сообщение об ошибочной команде

Функция FILENOTFOUND

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

проверка результата вызова функции

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

низкий

Модуль

Level4

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

fn: STRING – имя файла; print: BOOLEAN – выводить ли сообщение File not found

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

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

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

BOOLEAN

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

fileID (Level3)

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

нет

Действия

сравнивает результат функции fileID с –1 (удалось ли найти такой файл)

Проверки

нет

Комментарии

нет

Функция FILEEXIST

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

проверка результата вызова функции и, если необходимо, печать сообщения об ошибке

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

низкий

Модуль

Level4

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

fn: STRING – имя файла

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

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

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

BOOLEAN

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

fileNotFound

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

нет

Действия

если результат функции fileNotFound отличен от –1 (файл удалось найти), выводит сообщение, что такой файл уже существует

Проверки

нет

Комментарии

печать сообщения из fileNotFound блокируется параметром print

Процедура GETWORD

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

выделить в заданной строке первое слово (название команды), а остаток поместить в другую переменную

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

низкий

Модуль

Level4

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

is: STRING – полная входная строка с командой

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

is: STRING – выходная строка с именем команды; os: STRING – остальная часть строки

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

нет

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

нет

Действия

найти позицию пробела и по ней разделить строку на две части

Проверки

на отсутствие пробела в строке

Комментарии

если пробела нет, то is сохраняется, а os очищается

Процедура GETWORD8

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

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

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

низкий

Модуль

Level4

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

is: STRING – полная входная строка с командой

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

is: STRING – выходная строка с именем команды; os: STRING – остальная часть строки

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

getWord

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

константа cat_nam

Действия

те же, что и в getWord, но обе части строки (имена файлов) приводятся к стандартной длине

Проверки

нет

Комментарии

обе части строки дополняются пробелами до длины cat_nam или укорачиваются до нее, что облегчает последующий анализ

Процедура CMD_DIR

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

в строковом массиве найти элементы, удовлетворяющие заданному условию, и вывести на экран

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

средний

Модуль

Level4

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

нет

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

нет

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

getCatName

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

константы fs_mnf, pusto

Действия

просмотреть все записи в каталоге и вывести имена существующих файлов

Проверки

нет

Комментарии

файл признается несуществующим, если его имя начинается с символа pusto

Процедура CMD_XDIR

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

вывести строковый массив на экран в виде таблицы, разделяя при этом строку на составные части

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

средний

Модуль

Level4

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

нет

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

нет

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

getCatName, getCatLen, getCatCluster

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

константы fs_mnf, fs_ml, pusto

Действия

вывести заголовок таблицы; просмотреть все записи в каталоге и вывести имена существующих файлов, их длину и кластеры

Проверки

нет

Комментарии

файл признается несуществующим, если его имя начинается с символа pusto; внешний цикл организуется по записям каталога, а внутренний – по номерам кластеров файла; при выводе особое внимание обратить на оформление столбцов таблицы

Процедура CMD_TYPE

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

используя имеющиеся процедуры и функции, организовать вывод содержимого файла на экран

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

низкий

Модуль

Level4

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

нет

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

нет

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

getWord8, fileNotFound, readMyFile (Level3)

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

переменная restLine

Действия

getWord8 извлекает имя файла, readMyFile его читает; вывод осуществляется стандартным оператором Паскаля

Проверки

существование файла в каталоге

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки

Процедура DOERA

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

в соответствующей записи каталога заменить первый символ на pusto

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

низкий

Модуль

Level4

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

n: INTEGER – номер файла (fileID)

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

нет

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

getCatRec, putCatRec, formClusterMap (все – Level3)

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

константа pusto

Действия

прочитать запись каталога, заменить в ней первый символ и сохранить; вызвать процедуру формирования карты кластеров

Проверки

нет

Комментарии

данная вспомогательная процедура вызывается из cmd_era и cmd_change

Процедура CMD_ERA

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

используя имеющиеся процедуры, организовать удаление файла из каталога

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

низкий

Модуль

Level4

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

нет

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

нет

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

getWord8, fileID (Level3), doEra

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

переменная restLine

Действия

getWord8 извлекает имя файла, fileID определяет его номер, который служит аргументом для doEra

Проверки

существование файла в каталоге

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки; стирание состоит в замене первого символа имени файла на pusto;

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

Процедура CMD_REN

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

в записи каталога заменить имя файла

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

средний

Модуль

Level4

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

нет

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

нет

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

getWord8, fileID (Level3), fileExist, getCatRec (Level3), putCatRec (Level3)

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

переменная restLine

Действия

getWord8 извлекает имена файлов; по fileID извлекается соответствующая запись каталога и в ней имя заменяется новым

Проверки

существование исходного файла в каталоге и отсутствие нового имени в каталоге

Комментарии

оба имени файлов берутся из restLine, куда процедура doCommand помещает остаток строки; учитывая стандартную длину имен после getWord8, замену имени в каталоге легко произвести в цикле FOR

Процедура CMD_COPY

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

используя имеющиеся процедуры и функции, организовать копирование файла

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

средний

Модуль

Level4

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

нет

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

нет

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

getWord8, fileNotFound, fileExist, readMyFIle (Level3), writeMyFile (Level3)

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

переменная restLine

Действия

getWord8 извлекает имена файлов; проверяется их корректность и затем с помощью readMyFIle и writeMyFile файл легко копируется

Проверки

существование исходного файла в каталоге и отсутствие нового имени в каталоге; новое имя не должно быть пустым

Комментарии

оба имени файлов берутся из restLine, куда процедура doCommand помещает остаток строки

Процедура INPUTFILE

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

принять с клавиатуры строку и сохранить ее в виде файла; предусмотреть проверку длины

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

средний

Модуль

Level4

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

fn: STRING – имя файла

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

нет

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

writeMyFile (Level3)

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

константы dsk_bps, fs_spc, fs_ml

Действия

вывести приглашение ввести текст и принять его; рассчитать максимальную длину текста через известные константы и, если требуется, укоротить строку и выдать сообщение; сохранить строку в файл

Проверки

длина текста не превышает максимально разрешенной

Комментарии

данная вспомогательная процедура вызывается из cmd_change и cmd_create

Процедура CMD_CHANGE

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

используя имеющиеся процедуры, организовать замену текста в файле

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

низкий

Модуль

Level4

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

нет

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

нет

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

getWord8, fileID (Level3), readMyFIle (Level3), doEra, inputFile

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

переменная restLine

Действия

getWord8 извлекает имя файла, fileID определяет его номер; файл выводится на экран; используя имеющиеся вспомогательные процедуры, старый файл удаляется, вводится текст и сохраняется новый

Проверки

существование файла в каталоге

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки

Процедура CMD_CREATE

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

используя имеющиеся процедуры, организовать создание нового файла

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

низкий

Модуль

Level4

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

нет

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

нет

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

getWord8, fileExist, inputFile

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

переменная restLine

Действия

getWord8 извлекает имя файла; используя вспомогательную процедуру inputFile, вводится текст и сохраняется в файл

Проверки

существование файла в каталоге; имя не пустое

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки

Процедура CMD_UNERASE

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

найти в массиве заданный элемент и заменить в нем первый символ

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

средний

Модуль

Level4

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

нет

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

нет

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

getWord8, fileID (Level3), getCatRec, putCatRec, formClusterMap

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

переменная restLine; константа pusto

Действия

getWord8 извлекает имя файла; имитируя удаление, первый символ в нем заменяется на pusto и ищется в каталоге; если удается найти, читается соответствующая запись и в ней восстанавливается первый символ; заново формируется карта кластеров

Проверки

существование удаленного файла в каталоге

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки;

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

Процедура CMD_SAVE

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

используя имеющуюся процедуру, организовать сохранение содержимого виртуального диска

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

низкий

Модуль

Level4

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

нет

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

нет

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

getWord, writeVirtualDisk (Level3)

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

переменная restLine

Действия

getWord извлекает имя файла, в который будет сохранен образ виртуального диска, а затем вызывается стандартная процедура записи с Level3

Проверки

имя файла не пустое (!); неплохо бы дополнительно организовать проверку имени на допустимость в MS-DOS

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки;

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

Процедура CMD_LOAD

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

используя имеющуюся процедуру, организовать чтение содержимого виртуального диска

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

низкий

Модуль

Level4

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

нет

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

нет

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

getWord, readVirtualDisk (Level3)

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

переменная restLine

Действия

getWord извлекает имя файла, из которого будет прочитан образ виртуального диска, а затем вызывается стандартная процедура чтения с Level3

Проверки

имя файла не пустое (!); неплохо бы дополнительно организовать проверку имени на допустимость в MS-DOS

Комментарии

имя файла берется из restLine, куда процедура doCommand помещает остаток строки;

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

Процедура CMD_VER

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

вывести текстовую информацию о версии

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

низкий

Модуль

Level4

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

нет

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

нет

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

нет

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

нет

Действия

вывод на экран информации о версии

Проверки

нет

Комментарии

нет

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

UNIT level4; {Автор Е.А.Еремин. Пермь, 2004} {команды ОС} INTERFACE USES common, level1, level2, level3; PROCEDURE doCommand(c:STRING);{расшифровывает и выполняет команду} IMPLEMENTATION VAR restLine:STRING; {остаток строки} FUNCTION fileNotFound(fn:STRING;print:BOOLEAN):BOOLEAN; {TRUE - файла нет, FALSE - есть; print - выводить ли сообщение} BEGIN fileNotFound:=fileID(fn,print)=-1 END; FUNCTION fileExist(fn:STRING):BOOLEAN; {FALSE - файла нет, TRUE - есть; сообщение выдается всегда} BEGIN fileExist:=FALSE; IF NOT fileNotFound(fn,FALSE) THEN BEGIN WRITELN('Файл "'+fn+'" уже существует'); fileExist:=TRUE END END; PROCEDURE getWord(VAR is,os:STRING); {выделяет в is первое слово, а в os - остаток} VAR p:INTEGER; BEGIN os:=''; p:=pos(' ',is); IF p=0 then EXIT; os:=is; DELETE(os,1,p); is:=COPY(is,1,p-1); END; PROCEDURE getWord8(VAR is,os:STRING); {то же, но приводит обе части к стандартной длине} BEGIN getWord(is,os); WHILE LENGTH(is) < cat_nam DO is:=is+' '; IF LENGTH(is)>cat_nam THEN is:=COPY(is,1,cat_nam); WHILE LENGTH(os) < cat_nam DO os:=os+' '; IF LENGTH(os)>cat_nam THEN os:=COPY(os,1,cat_nam); END; PROCEDURE cmd_dir; VAR i:integer; s:STRING; BEGIN FOR i:=1 TO fs_mnf DO BEGIN s:=getCatName(i-1); IF (LENGTH(s)<>0) AND (s[1]<>pusto) THEN WRITELN(s); END; END; PROCEDURE cmd_xdir; VAR i,j,c:integer; s:STRING; BEGIN WRITELN(' Имя Байт Кластеры'); FOR i:=0 TO fs_mnf-1 DO {по всем записям каталога} BEGIN s:=getCatName(i); {имя файла} IF (LENGTH(s)<>0) AND (s[1]<>pusto) THEN{print} BEGIN WRITE(s); WRITE(getCatLen(i):4,' ');{длина} FOR j:=1 TO fs_ml DO {кластеры файла} BEGIN c:=getCatCluster(i,j); IF c=-1 THEN WRITE(' -') ELSE WRITE(c:3) END; WRITELN END END; END; PROCEDURE cmd_type; VAR fn:STRING; BEGIN fn:=restLine; getWord8(fn,restLine); IF fileNotFound(fn,TRUE) THEN EXIT; WRITELN(readMyFile(fn)); END; PROCEDURE doEra(n:INTEGER); VAR s:mySector; BEGIN s:=getCatRec(n); s[1]:=pusto; putCatRec(n,s); formClusterMap; END; PROCEDURE cmd_era; VAR fn:STRING; n:INTEGER; BEGIN fn:=restLine; getWord8(fn,restLine); n:=fileID(fn,TRUE); IF n=-1 THEN EXIT; doEra(n) END; PROCEDURE cmd_ren; VAR i,j:INTEGER; s:mySector; p1,p2:STRING; BEGIN p1:=restLine; getWord8(p1,p2); i:=fileID(p1,TRUE); IF i=-1 THEN EXIT; IF fileExist(p2) OR (p2=' ') THEN EXIT; s:=getCatRec(i); FOR j:=1 to cat_nam do s[j]:=p2[j]; putCatRec(i,s); END; PROCEDURE cmd_copy; VAR p1,p2:STRING; mf:myFile; BEGIN p1:=restLine; getWord8(p1,p2); IF fileNotFound(p1,TRUE) THEN EXIT; IF fileExist(p2) OR (p2=' ') THEN EXIT; mf:=readMyFile(p1); writeMyFile(p2,mf); END; PROCEDURE inputFile(VAR fn:STRING); VAR t:STRING; i:INTEGER; mf:myFile; BEGIN WRITELN('Введите текст файла:'); READLN(t); i:=dsk_bps*fs_spc*fs_ml; {max file length (bytes)} IF LENGTH(t)>i THEN BEGIN t:=COPY(t,1,i); WRITELN('Оставлены первые ',i,' символов'); END; mf:=t; writeMyFile(fn,mf); END; PROCEDURE cmd_change; VAR fn:STRING; n:INTEGER; BEGIN fn:=restLine; getWord8(fn,restLine); n:=fileID(fn,TRUE); IF n=-1 THEN EXIT; WRITELN(readMyFile(fn)); doEra(n);{старый файл удалить} inputFile(fn); END; PROCEDURE cmd_create; VAR fn:STRING; BEGIN fn:=restLine; getWord8(fn,restLine); IF fileExist(fn) OR (fn=' ') THEN EXIT; inputFile(fn); END; PROCEDURE cmd_unerase; VAR fn:STRING; n:INTEGER; s:mySector; s1:char; BEGIN fn:=restLine; getWord8(fn,restLine); s1:=fn[1];{1-й символ} fn[1]:=pusto;{имя удаленного файла} n:=fileID(fn,TRUE); IF n=-1 THEN EXIT; s:=getCatRec(n); s[1]:=s1; putCatRec(n,s);{восст. 1-й символ} formClusterMap; END; PROCEDURE cmd_save; VAR fn:STRING; BEGIN fn:=restLine; getWord(fn,restLine); IF fn='' THEN EXIT; writeVirtualDisk(fn); END; PROCEDURE cmd_load; VAR fn:STRING; BEGIN fn:=restLine; getWord(fn,restLine); IF fn='' THEN EXIT; readVirtualDisk(fn); END; PROCEDURE cmd_ver; BEGIN WRITELN('(C) E.A.Eremin. Aug. 2004'); WRITELN('Version - 25.08.04'); END; PROCEDURE doCommand(c:STRING);{расшифровывает и выполняет команду} VAR i,v:INTEGER; BEGIN FOR i:=1 to LENGTH(c) DO c[i]:=UPCASE(c[i]); getWord(c,restLine); v:=0; FOR i:=1 TO N_com DO IF c=comm[i] THEN v:=i; CASE v OF 1:cmd_dir; 2:cmd_xdir; 3:cmd_type; 4,5:cmd_era; 6:cmd_ren; 7:cmd_copy; 8:cmd_change; 9:cmd_create; 10:cmd_unerase; 11:cmd_save; 12:cmd_load; 13:cmd_ver; ELSE WRITELN('invalid command '+c); END; END; END.


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


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


Free Web Hosting