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

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

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

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

Он предоставляет процедурыосуществляетсястандартнымReadReal(x)WriteReal(x,n)и имеет доступ к потокам через посредство процедур Read и Write модуля InOut.Следовательно, перенаправление ввода и вывода вызовами Openlnput и OpenOutput влияет также ина процедуры из RealInOut, определение которого также приведено в приложении.Модуль InOut содержит переключатель, направляющий потоки данных либо на терминал,либо в Файловую систему в зависимости от того, был открыт Файл или нет. На уровне, лежащемниже чем InOut, мы, следовательно, обнаружим два модуля: один для ввода с терминала и выводана терминал, и другой модуль, представляющий Файловую систему. Здесь будут описаны оба этимодуля, поскольку во многих случаях программист пожелает иметь доступ к нимнепосредственно.Для терминального ввода-вывода мы определяем модуль Terminal.

Он экспортируетпроцедуру Read для чтения данных с клавиатуры и процедуры Write и WriteString для записи наэкран или на печатающее устройство терминала (см. приложение 2).Другой модуль, тоже лежащий уровнем ниже в иерархии и связывающий InOut с Файловойконкретной ЭВМ, включает в себя понятие потока. Учитывая тот Факт, что этот модульдолжен быть близок к конкретной Файловой системе, мы не даем его точного определения, нежелая накладывать ограничения на возможные реализации. В различных окружениях можетменяться даже его имя. Тем не менее перечисляется совокупность описаний, которые программистможет считать присутствующими во всех Модула-системах. Эти описания будут перечисленыниже, но вначале сосредоточим внимание на потоках, т.е. на структурах последовательногодоступа.системойМы будем, различать два вида потоков, а именно текстовый поток с базовым типом CHAR ибазовым типом WORD.

Тип WORD зависит от марки ЭВМ, но он всегда должен бытьсовместим при передаче параметров со всеми типами, занимающими в памяти одно слово, такими,как INTEGER, CARDINAL и BITSET. (Более подробно этот тип будет описан в разделе,посвященном средствам программирования низкого уровня.)поток слов сОписываемый модуль экспортирует тип, обозначающий поток.

Здесь мы будем обозначатьэтот тип именем STREAM (поток), однако возможны и другие имена, поскольку в некоторыхреализациях этот тип может экспортироваться из Файловой системы. Такой экспорт вдействительности более предпочтителен, поскольку в конечном счете поток реализуется именно ввиде Файла. Файл превращается в поток простым ограничением набора применимых к немуопераций только операциями последовательного ввода и вывода.

Это следующие операции (если sимеет тип STREAM):ReadChar(s,ch)ReadWord(s,w) WriteChar(s,ch)WriteWord(s,w)Модуль также экспортирует средства для установки и проверки состояния потока, вчастности, того, достигнут при вводе конец потока или нет. Если модуль, содержащий поток, невключен непосредственно в Файловую систему, то он экспортирует процедуры для связи новогопотока с Файлом (из Файловой системы) и для отсоединения потока от Файла, когда поток большене требуется.В качестве такого модуля приведем раздел описаний модуля, реализованного воперационной системе RT-11 на мини-ЭВМ PDP-11.

Этот модуль, называемый Streams,импортирует тип FILE из модуля Files. Фактически этот модуль определяет взаимодействиепрограмм на Модуле с операционной системой RT-11, которая идентифицирует Файлы попорядковым номерам, так называемым номерам каналов. Процедура Connect связывает Файл108системы RT-11, т.е. объект типа FILE, с потоком, т.е. объектом типа STREAM, и определяет, будетли это символьный поток или поток слов.DEFINITION MODULE Streams; (* для RT-11 *)FROM SYSTEM IMPORT WORD;FROM Files IMPORT FILE;TYPE STREAM;PROCEDURE Connect(VAR s: STREAM; f: FILE;ws: BOOLEAN);(* связать поток s с открытым Файлом f.В RT-11 f - номер канала.ws = "s - поток слов, а не литер" *)PROCEDURE Disconnect(VAR s: STREAM;закрытьфайл: BOOLEAN);PROCEDURE WriteWord(s: STREAM; w:WORD);PROCEDURE WriteChar(s: STREAM; ch: CHAR);PROCEDURE EndWrite(s: STREAM);PROCEDURE ReadWord(s: STREAM; VAR w:WORD);PROCEDURE ReadChar(s: STREAM; VAR ch: CHAR);PROCEDURE EOS(s: STREAM): BOOLEAN:PROCEDURE Reset(s: STREAM);PROCEDURE SetPos(s: STREAM; ст,мл: CARDINAL);PROCEDURE GetPos(s: STREAM; VAR ст.мл: CARDINAL);END Streams.В случае текстовых потоков процедуры ReadChar и WriteChar осуществляют необходимыепреобразования представления концов строк.

В Модуле строка завершается одной литерой EOL, ав файле RT-11 - парой литер - сr и lf (15C,12C). Если достигнут конец потока, то процедураReadChar(s,ch) присваивает переменной ch значение 0С.Программист, желающий использовать другие файловые операции операционной системы,должен получить к ним непосредственный доступ, импортировав их из модуля Files. Для удобствапрограммиста раздел определений модуля Files приведен ниже.

Особый интерес представляютпроцедуры LookUp (найти), Create (создать) и Close (закрыть). Они требуются во всех программах,использующих модуль Streams, поскольку файл должен быть либо найден в директории RT-11,либо создан до привязки к нему потока. Отметим, что имя Файла в RT-11 состоит ровно из 12109литер: первые три обозначают устройство, следующие шесть -собственно имя Файла и трипоследних образуют так называемое расширение имени.DEFINITION MODULE Files; (* Ch.

Jacobi для RT-11 *)FROM SYSTEM IMPORT ADDRESS,WORD;TYPE FILE = [0..15];FileName = ARRAY [0..11] OF CHAR; (* имя Файла *)PROCEDURE Lookup(f: FILE; fn: FileName; VAR ответ: INTEGER);(* поиск Файла f в директорииответ: >= 0 = все в порядке, длина Файла< 0 = ошибка: -1 = канал занят,-2 = Файл не найден *)PROCEDURE Create(f: FILE; fn: FileName: VAR ответ: INTEGER);(* создать новый Файл f, не занося его в директорию,ответ: >= 0 = все в порядке, длина Файла< 0 = ошибка: -1 = канал занят,-2 = нет места *)PROCEDURE Delete(f:FILE; fn: FileName; VAR ответ: INTEGER);(* удалить Файл f и его имя из директорииответ: >= 0 = все в порядке, длина Файла< 0 = ошибка: -1 = канал занят,-2 = Файл не найден *)PROCEDURE Close(f: FILE);(* закрыть Файл f и занести его в директорию *)PROCEDURE Release(f: FILE);(* закрыть Файл f, не занося его в директорию *)PROCEDURE ReadBlock(f: FILE; p: ADDRESS;110номбл,счслов: CARDINAL; VAR ответ: INTEGER);(* чтение из файла f р: адрес буфераномбл: номер первого читаемого блокасчслов: сколько слов нужно прочестьответ: >= 0 = число пересланных слов< 0 = ошибка: -1 = серьезная ошибка,-2 = канал не открыт *)PROCEDURE WriteBlock(f: FILE; p: ADDRESS;номбл,счслов: CARDINAL; VAR ответ: INTEGER);(* запись в Файл f р: адрес буфераномбл: с какого блока начнется записьсчслов: сколько слов нужно записатьответ: >= 0 = число пересланных слов< 0 = ошибка: -1 = серьезная ошибка,-2 = канал не открыт *)PROCEDURE Rename(f: FILE; new,old: FileName;VAR ответ: INTEGER);(* переименовывает Файл f: файл должен быть закрыт,ответ: 0 = все в порядке< 0 = ошибка: -1 = канал занят,-2 = Файл не найден *)END Files.Мы завершим описание работы с файлами в системе RT-11 тем, что укажем иерархиюмодулей.InOut —> Streams —> Files—> RT-11.Следовательно, вызов, например, процедуры Read модуля InOut подразумевает вызовпроцедуры ReadChar модуля Streams, которая может вызывать процедуру ReadBlock модуля Files,что в свою очередь подразумевает вызов системного примитива для чтения сектора диска.

Вкачестве примера приведем последовательную обработку файла DATA. IN, рассматриваемого какпоток слов, и запись результатов в Файл DATA. OUT в виде потока символов.111FROM Files IMPORT FILE, Lookup, Create, Close;FROM Streams IMPORTSTREAM, Connect, ReadWord, WriteChar,EOS,Disconnect;VAR f1,f2:FILE;s1,s2:STREAM;x: CARDINAL; y: CHAR; ответ: INTEGER;BEGIN f1 := 1; f2 := 2; (* номера каналов в RT-11 *)Lookup(f1,"DK DATA IN ".ответ);Create(f2,"DK DATA OUT".ответ);Connect(s1,f1,TRUE); Connect(s2,f2,FALSE);ReadWord(s1,x);WHILE NOT EOS(s1) DOобработать(х,у); WriteChar(s2,y); ReadWord(s1,x)END;Dlsconnect(s1,FALSE); Disconnect(s2,TRUE)ENDПримером реализации, в которой уровень модуля Streams совпадает с Files, т.е.реализации, представляющей собой Файловую систему, включающую понятие потока, являетсясистема Medos для ЭВМ Лилит (Lilith).

Фрагмент программы, решающей все ту же задачупоследовательной обработки Файла, которая уже рассматривалась ранее, приведен ниже.Упрощение, полученное за счет ликвидации промежуточного модуля (Streams), очевидно.FROM FlleSystem IMPORTFile,Lookup,ReadWord,WriteChar,Close;VAR f1,f2: File;x: CARDINAL; y: CHAR;BEGINLookup (f1,"DK.DATA. IN",FALSE);Lookup(f2,"DK.DATA.OUT",TRUE);ReadWord(f1.x);WHILE NOT f1.eof DO112обработать(х.у); WriteChar(f2.y); ReadWord(f1,x)END;Close(f1); Close(f2)ENDАккуратный программист, несомненно, вставит проверки успешного поиска Файла. Втаких деталях различные реализации, как и следовало ожидать, отличаются друг от друга.Например, в RT-11 успешность поиска определяется анализом параметра reply (ответ) процедурыLookUp, а в системе Medos - анализом компоненты res Файловой переменной (которая имеетструктуру записи).

Более конкретно, проверка имеет вид: "f1.res = done", где done (сделано) - этоконстанта перечислимого типа Response (ответ), экспортируемая из модуля FileSystem.Внимательный программист должен также иметь в виду, что существует еще одно небольшоеотличие между двумя версиями: в то время как процедура Create (для RT-11) всегда открываетновый Файл, процедура LookUp (в Medos) создает новый Файл, только если третий параметр TRUE и не существует уже Файла с заданным именем. Поле f2.new позволяет определить,действительно ли Файл f2 новый. Другими словами, старый Файл может быть перезаписан.28. ЭКРАННЫЙ ВВОД И ВЫВОДПри последовательном вводе и выводе подразумевается, что элементы данных могутпередаваться без явного указания позиции. Это естественно, если позиция неявно определяетсязапоминающим устройством, таким, как лента (которая по определению образуетпоследовательность) или клавиатура (с которой данные поступают в четкой временнойпоследовательности) или печатающее устройство (где позиции литер определяются механическимдвижением устройства).

Даже если запоминающее устройство и допускало бы большую гибкость,все равно последовательный вывод удобен, если структура данных существенно последовательна.Например, текст -существенно последовательная структура, и отсутствие необходимости хранитьинформацию о позиции каждой литеры сильно упрощает задачу чтения и записи. И наконец,последовательный ввод и вывод весьма экономен, поскольку легко реализуется буферизацияданных между процессами (устройствами), работающими параллельно. Все это объясняет, почемупоследовательная работа с данными так широко распространена и желательна.Однако существуют приложения, требующие рассмотрения данных не в видепоследовательности.

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

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

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

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