Главная » Просмотр файлов » Н. Вирт - Программирование на языке Модула-2

Н. Вирт - Программирование на языке Модула-2 (1160777), страница 34

Файл №1160777 Н. Вирт - Программирование на языке Модула-2 (Н. Вирт - Программирование на языке Модула-2) 34 страницаН. Вирт - Программирование на языке Модула-2 (1160777) страница 342019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 34)

Вчастности, они относятся к вводу и выводу. Модуль Terminal представляет стандартныйалфавитно-цифровой терминал, используемый для ввода и вывода. FileSystem предоставляетнеобходимые операции для создания, чтения, записи, именования и удаления Файлов,организованных как потоки литер или слов.Модули Windows. TextWindows и GraphicWindows образуют иерархию, предназначеннуюдля обслуживания дисплея с высоким разрешением. Два последних используют в качествебазисного модуля Windows. С этими модулями тесно связаны модули CursorMouse и Menu.

Первыйпредполагает наличие указательного устройства, так называемой мыши, для ввода значенийкоординат и отображает его положение на экране дисплея с помощью курсора. Модуль Menuсвязывает мышь с дисплеем, обеспечивая универсальное средство ввода команд в виде такназываемых иерархических меню.Эти модули представлены здесь в виде модулей определений. Мы подчеркиваем, что онине являются частью языка Модула-2. Различные реализации могут отличаться либо деталямиреализации модулей, либо выбором предоставляемых модулей.DEFINITION MODULE Terminal; (*S.E.Knudsen*)PROCEDURE Read(VAR ch: CHAR);PROCEDURE BusyRead(VAR ch: CHAR);(*если клавиша не была нажата, то возвращает 0С*)176PROCEDURE ReadAgain;(*после этого вызова последняя прочитанная литера может быть прочитана еше развызовом Read*)PROCEDURE Write(ch: CHAR);PROCEDURE WriteLn; (*завершить строку*)PROCEDURE WriteString(s: ARRAY OF CHAR);END Terminal.DEFINITION MODULE FileSystem; (*S.E.Knudsen*) ]FROM SYSTEM IMPORT ADDRESS,WORD;TYPEResponse = (done,notdone,notsupported,callerror,unknownmedium, unknownFile, paramerror,toomanyfiles,eom,deviceoff,softparityerror,softprotected,softerror,hardpar1tyerror,hardprotected,timeout,harderror);Command = (create,open,сlose,lookup,rename,setread,setwrite,setmodify,setopen,doiо,setpos,getpos,length,setprotect,getprotect,setpermanent,getpermanent,getinternal);Flag = (er,ef,rd,wr,ag,bytemode);FlagSet = SET OF Flag;File = RECORD res: Response;bufа,еlа,ina,topa: ADDRESS;elodd,inodd,eof: BOOLEAN;flags: FlagSet; CASE com: Command OFcreate,open,getinternal:fileno,verslonno: CARDINAL |lookup: new: BOOLEAN |177setpos,getpos,length: highpos,lowpos: CARDINAL|setprotect,getprotect: wrprotect: BOOLEAN |setpermanent,getpermanent: on: BOOLEANEND;END;(*Процедуры, определяемые файловой системой, могут быть сгруппированы следующимобразом:1.

Открытие, закрытие и переименование Файлов.(Create,Сlose,Lookup,Rename)2. Чтение из Файла и запись в Файл.(SetRead,SetWrite,SetModifу,SetOpen,Doiо)3. Позиционирование файлов.(SetPos,GetPos,Length)4. Потокоподобная работа с Файлами.(Reset,Again,ReadWord,WriteWord,ReadChar,WriteChar)*)PROCEDURE Create(VAR f: File;ИмяУстройства: ARRAY OF CHAR);(* создает новый временный (или безымянный) Файл на указанном устройстве *)PROCEDURE Close(VAR f: File);(* завершает операции над Файлом f, т.е.

разрывает связь между переменной f и Файловойсистемой. Тем самым временный Файл уничтожается, а Файл с непустым именем остается вдиректории для последующего использования *)PROCEDURE Lookup(VAR f: File;filename: ARRAY OF CHAR; new: BOOLEAN);(* ищет Файл filename. Если Файла не существует и new-TRUE, то создается новыйфайл с данным именем *)PROCEDURE Rename(VAR f: File; filename: ARRAY OF CHAR);(* Файл переименуется именем filename, если новое имя пусто, то Файл fстановится временным *)178PROCEDURE SetRead(VAR f: File);(* инициализация файла f на чтение *)PROCEDURE SetWrite(VAR f: File);(* инициализация Файла f на запись *)PROCEDURE SetModify(VAR f: File);(* инициализация Файла f на модификацию *)PROCEDURE SetOpen(VAR f: File);(* прекращает любую операцию ввода-вывода над Файлом f*)PROCEDURE Doio(VAR f: File);(* используется совместно с SetRead, SetWrite и SetModifу для последовательного чтениязаписи и модификации Файла f *)PROCEDURE SetPos(VAR f: File; highpos,lowpos: CARDINAL);(* устанавливает текущую позицию Файла f на байт highpos*2^16 + lowpos *)PROCEDURE GetPos(VAR f: File; VAR highpos,lowpos: CARDINAL);(* выдает текущую позицию файла f в переменные highpos и lowpos*)PROCEDURE Length(VAR f: File; VAR highpos,lowpos: CARDINAL);(* выдает длину Файла f в переменные highpos и lowpos *)PROCEDURE Reset(VAR f: File);(* выполняет SetOpen и устанавливает позицию Файла в его начало *)PROCEDURE Again(VAR f: File);(* после этого вызова, процедуры ReadWord и ReadChar прочитают то же самое значение,которое было прочитано перед этим *)179PROCEDURE ReadWord(VAR f: File; VAR w: WORD);(* читает из Файла следующее слово *)PROCEDURE WriteWord(VAR f: File; w: WORD);(* пишет в Файл следующее слово *)PROCEDURE ReadChar(VAR f: File; VAR ch: CHAR);(* читает из Файла следующую литеру *)PROCEDURE WriteChar(VAR f: File; ch: CHAR);(* пишет в Файл следующую литеру *)END FileSystem.DEFINITION MODULE InOut; (*N.Wirth*)CONST EOL = 36C;VAR Done: BOOLEAN;termCH: CHAR;PROCEDURE 0penInput(defext: ARRAY OF CHAR);(*запрашивает имя Файла и открывает на ввод файл "in".

Done := "Файл успешно открыт".После этого вызова последующий ввод происходит из этого Файла. Если имязаканчивается точкой, то добавляется расширение defext *)PROCEDURE OpenOutput(defext: ARRAY OF CHAR);(*запрашивает имя Файла и открывает на ввод Файл "out". Done := "файл успешно открыт".После этого вызова последующий вывод происходит в этот Файл *)PROCEDURE CloseInput;(*закрывает входной Файл: возвращает ввод на терминал*)PROCEDURE CloseOutput;(*закрывает выходной Файл; возвращает вывод на терминал*)180PROCEDURE Read(VAR ch: CHAR);(*Done := NOT in.еоf*)PROCEDURE ReadStrlng(VAR s: ARRAY OF CHAR);(*чтение цепочки, т.е. последовательности литер, не содержащей пробелов и управляющихлитер; начальные пробелы игнорируются.

Ввод прекратится на любой литере <= " "; эталитера присваивается переменной termCH. Литера DEL используется для забоя литер привводе с терминала*)PROCEDURE ReadInt(VAR x: INTEGER);(*прочитать строку и преобразовать ее в целое. Синтаксис: целое = ["+"|"-"]циФра{циФра}.Предшествующие пробелы пропускаются. Done := "прочитано число"*)PROCEDURE ReadCard(VAR x: CARDINAL);(*прочитать строку и преобразовать ее в число типа CARDINAL. Синтаксис: целое =цифра{цифра}. Предшествующие пробелы пропускаются.

Done := "прочитано число"*)PROCEDURE Write(ch: CHAR);PROCEDURE WriteLn; (*завершить строку*)PROCEDURE WriteStrlng(s: ARRAY OF CHAR);PROCEDURE WriteInt(x: INTEGER; n: CARDINAL);(*записать целое число х, использовав не менее п литер, в Файл "out". Если п большеколичества необходимых позиций, то происходит дополнение пробелами слева *)PROCEDURE WriteCard(x,n: CARDINAL);PROCEDURE WriteOct(x,n: CARDINAL);PROCEDURE WriteHex(x,n: CARDINAL);END InOut.DEFINITION MODULE RealInOut; (*N.Wirth*)VAR Done: BOOLEAN;PROCEDURE ReadReal(VAR x: REAL);(*Прочитать действительное число х согласно синтаксису:["+"|"-"]цифра{цифра}["." цифра{цифра}]["Е"["+"|"-"]цифра[цифра]]181Done = "число прочитано".Учитывается не более 7 цифр, предшествующие нули не считаются.

Максимальныйпорядок равен 38. Ввод завершается пробелом или управляющей литерой. DELиспользуется для забоя *)PROCEDURE WriteReal(x: REAL; n: CARDINAL);(*Напечатать х, используя п.литер, если требуется меньше чем п позиций, то слевавставляются пробелы *)PROCEDURE WriteRealOct(x: REAL);(*Напечатать х в восьмеричной Форме с мантиссой и порядком *)END RealInOut.DEFINITION MODULE Windows: (*O.Gutknecht*)CONST Background = 0; FirstWindow = 1; LastWindow = 8;TYPE Window = [Background..LastWlndow];RestoreProc = PROCEDURE(Window);PROCEDURE OpenWindow(VAR u: Window; x,y,w,h: CARDINAL;Repaint: RestoreProc; VAR done: BOOLEAN);(*Открыть новое окно.

Repaint будет вызываться для его восстановления*)PROCEDURE DrawTitle(u: Window; title: ARRAY OF CHAR);(*Вывести заголовок title *)PROCEDURE RedefineWindow(u: Window; x,y,w,h: CARDINAL;VAR done: BOOLEAN),(*Переопределить прямоугольник окна*)PROCEDURE CloseWindow(u:Window);(*Закрыть окно u*)PROCEDURE PlaceOnTop(u:Uindow);(*Поместить окно и на верх*)182PROCEDURE PlaceOnBottom(u:Window);(*Поместить окно и в самый низ*)PROCEDURE OnTop(u:Window): BOOLEAN;(*Окно и - самое верхнее*)PROCEDURE UpWindow(x,y: CARDINAL): Window;(*Возврашает номер окна или Фона, соответствующего координатам экрана (х,у)*)END Windows.DEFINITION MODULE TextWindows: (*J.Gutknecht*)IMPORT Windows;TYPE Window = Windows.Window;RestoreProc = Windows.RestoreProc;VAR Done: BOOLEAN;(*Done="предыдущая операция успешно завершена"*)termCH: CHAR; (*завершающая литера*)PROCEDURE OpenTextUlndow(VAR u: Window;x,y,w,h: CARDINAL; name: ARRAY OF CHAR);(* Открыть текстовое окно и спараметрами x,y,u,w и именем name *)PROCEDURE RedefTextWindow(u: Window; x,y,w,h: CARDINAL);(* Переопределить текстовое окно *)PROCEDURE CloseTextWindow(u: Window);(* Закрыть текотвое окно *)PROCEDURE AssignFont(u: Window; frame,charW,lineH: CARDINAL);183(*Назначить окну шрифт с номером frame, с расстоянием между символами charW и междустроками lineН *)PROCEDURE AssignRestoreProc(u: Window; r: RestoreProc):(* Назначить процедуру восстановления окна *)PROCEDURE AssignEOWAction(u: Window; r: RestoreProc);(*Определить действие, выполняемое по достижению конца окна*)PROCEDURE ScrollUp(u: Window);(*Передвинуть текст в окне на одну строку вверх*)PROCEDURE DrawTitle(u: Window; title: ARRAY OF CHAR);(*Напечатать заголовок title *)PROCEDURE DrawLine(u: Window; line,col: CARDINAL);(*col=0:прочертить горизонтальную линию в строке line line=0:прочертить вертикальнуюлинию в столбце col*)PROCEDURE SetCaret(u: Window; on: BOOLEAN);(*Управление текстовым курсором: оn="курсор на экране"*)PROCEDURE Invert(u: Window; on: BOOLEAN);(*Инвертирование изображения в окне: on ="изображение негативное"*)PROCEDURE IdentifyPos(u: Window; x,y: CARDINAL; VAR line,col:CARDINAL);(*Определить координаты в окне (line,col) точки экрана с координатами х,у*)PROCEDURE GetPos(u: Window; VAR line,col: CARDINAL);(*Получить текущую позицию в окне*)PROCEDURE SetPos(u: Window; line,col: CARDINAL);(*Установить текущую позицию в окне*)184PROCEDURE ReadString(u: Window; a: ARRAY OF CHAR);PROCEDURE ReadCard(u: Window; VAR x: CARDINAL);PROCEDURE ReadInt(u: Window; VAR x: INTEGER);PROCEDURE Write(u: Window; ch: CHAR);(*Напечатать литеру в текущей позиции.

Управляющие литеры BS,LF,FF,CR,CAN,EOL иDEL соответствующим образом интерпретируются*)PROCEDURE WriteLn(u: Window);PROCEDURE WriteString(u: Window; a: ARRAY OF CHAR);PROCEDURE WriteCard(u: Window; x.n: CARDINAL);PROCEDURE WriteInt(u: Window; x: INTEGER; n: CARDINAL);PROCEDURE WriteOct(u: Window; x,n: CARDINAL); END TextWindows.DEFINITION MODULE GraphicWindows; (*E.Kohen*)IMPORT Windows;TYPE Window = Windows.Window;RestoreProc = Windows.RestoreProc;Mode = (replace,paint,invert,erase);VAR Done: BOOLEAN;(*Done="предыдущая операция успешно завершена"*)PROCEDURE OpenGraphicWindow(VAR u:Window:x,y,w,h: CARDINAL; name: ARRAY OF CHAR;Repaint: RestoreProc);(*Открыть графическое окно.

Характеристики

Тип файла
PDF-файл
Размер
2,76 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6358
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее