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

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

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

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

CHR(x)=VAL(CHAR,x).FLOAT(x)x типа CARDINAL преобразуется в значение типа REAL.HIGH(a)верхняя граница индекса массива а.МАХ(Т)максимальное значение типа Т (!).MIN(T)минимальное значение типа Т (!).ODD(x)x MOD 2#0.ORD(x)порядковый номер (типа CARDINAL) x в множестве значений,определяемомтипомТ,которому принадлежит х. Т - любойперечислимый тип, CHAR, INTEGER или CARDINAL.SIZE(T)число единиц памяти, требуемых для переменной типа Т, или число единицпамяти, требуемых для переменной Т (!).TRUNC(x)действительное число х округляется до целого (типа CARDINAL).VAL(T,x)значение с порядковым номером х типа Т.

Т - любой перечислимый тип,или CHAR, INTEGER или CARDINAL. Если х типа Т, тоVAL(T,ORD(x))=х.DEC(x)x:=x-1.DEC(s,n)x:=x-n.EXCL(s,i)s:=s-{i}.HALTПрекращение исполнения программы.INC(x)x:=x+1.INC(x,n)х:=х+n.INCL(s,i)s:=s+{i}.160Процедуры INC и DEC применимы также к операндам перечислимых типов и типа CHAR.В этих случаях результатом является элемент, на п элементов предшествующий х или следующийчерез п элементов после х.11. МОДУЛИМодуль представляет собой набор описаний и последовательность операторов.

Онизаключаются в скобки MODULE и END. Заголовок модуля состоит из идентификатора модуля и,возможно, нескольких списков импорта и списка экспорта. Первый из них определяет идентификаторывсех объектов, описанных вне модуля, но используемых внутри него (поэтому должны бытьимпортированы). Список экспорта определяет идентификаторы всех объектов, которые описанывнутри модуля и используются вне его. Следовательно, модуль образует стену вокруг своихлокальных объектов, прозрачность которой находится полностью под контролем программиста.Уровень видимости объектов, локальных для модуля, определяется равным уровню самогомодуля. Их можно рассматривать как локальные для процедуры, охватывающей модуль, но сболее ограниченной областью видимости.$$ОписаниеМодуля = MODULE Идентификатор [Приоритет]":" {Импорт} [Экспорт] Блок Идентификатор.$Приоритет = "[" КонстВыражение "]".$Экспорт = EXPORT [QUALIFIED] СписИдент ";".$Импорт = [FROM Идентификатор] IMPORT СписИдент ";".Идентификатор модуля повторяется в конце описания.Последовательность операторов, составляющая тело модуля, исполняется при вызовепроцедуры, для которой модуль локален.Если в процедуре описано несколько модулей, то их тела исполняются в том порядке, вкотором модули расположены.

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

Квалифицированныйэкспорт служит для того, чтобы избежать конфликтов идентификаторов при экспорте изразличных модулей (когда имеются в виду различные объекты).Модуль может иметь несколько списков импорта, которым может предшествовать символFROM и идентификатор модуля. Результатом предложения FROM является снятие квалификациис импортируемых идентификаторов. Следовательно, внутри модуля они могут использоваться так,как будто они экспортированы обычным, неквалифицированным образом.Если экспортируется тип запись, то экспортируются и все идентификаторы ее компонент.То же относится и к идентификаторам констант перечислимого типа.Примеры описаний модулейПриведенный ниже модуль служит для просмотра текста и копирования его в выходнуюпоследовательность литер. Входные литеры последовательно выбираются процедурой ВзятьЛит ивыводятся процедурой ВывестиЛит.

Литеры представлены в коде ASCII; управляющие литеры, заисключением LF (конец строки) и FS (разделитель Файлов), игнорируются. Они оба переводятся в161пробел, и при этом устанавливается логическая переменная КонецСтроки или КонецФайласоответственно. Предполагается, что LF предшествует FS.MODULE ВводСтрок;IMPORT ВзятьЛит, ВывестиЛит:EXPORT Читать,.НовСтрока, НовФайл, КонецСтроки,КонецФайла, НомСтроки; CONST LF=12C; CR=15C; FS=34C;VAR НомСтроки:CARDINAL;(*номер строки*)ch:CHAR; (*последняя прочитанная литера*)КонецФайла, КонецСтроки:BOOLEAN;PROCEDURE НовыйФайл;BEGINIF NOT КонецФайла THENREPEAT ВзятьЛит(сh) UNTIL ch=FS;END;КонецФайла:=FALSE; КонецСтроки:=FALSE;НомСтроки:=0END НовыйФайл;PROCEDURE НовСтрока;BEGINIF NOT КонецСтроки THENREPEAT ВзятьЛит(сh) UNTIL ch=LF;ВывестиЛит(СR); ВывестиЛbn(LF)END;КонецСтроки:=FALSE;INС(НомерСтроки)END НовСтрока;PROCEDURE Читать(VAR x:chAR);BEGIN(*предполагается NOT КонецСтроки и NOT КонецФайла*)LOOP ВзятьЛит(ch): ВывестиЛит(сh);162IF ch>=" " THENx:=ch; EXIT;ELSIF ch=LF THENx:=" "; КонецСтроки:=TRUE; EXITELSIF ch=FS THENx:=" "; КонецСтроки:=TRUE;КонецФайла:=TRUE;EXITENDENDEND Читать;BEGIN КонецФайла:=TRUE;КонецСтроки:=TRUEEND ВводСтрокСледующий пример - модуль, оперирующий с таблицей резервирования дорожек диска изащищающий эту таблицу от недозволенного доступа.

Процедура-функция НовДор дает номерсвободной дорожки, которая при этом резервируется, дорожки освобождаются при вызовепроцедуры ВозврДор.MODULE РезервДор;EXPORT НовДор, ВозврДор;CONST ЧисДор=1024; (*число дорожек*)w=16; (*размер слова*)m=ЧисДор DIV w;VAR i:CARDINAL;Своб:ARRAY[0..m-l]OF BITSET;PROCEDURE НовДор():INTEGER;(*резервирует новую дорожку и возвращает ее индекс, если свободная дорожканайдена, и -1, если нет*)VAR i,j:CARDINAL;Найдена:BOOLEAN;BEGIN Найдена:=FALSE: i:=m;REPEAT DEC(i);j:=w;REPEAT DEC(j);IF j IN Своб[i] THEN Найдена:= TRUE ENDUNTIL Нашли OR (j=0)163UNTIL Нашли OR (i=0);IF Нашли THEN EXCL(Своб[i],j);RETURN i*w+jELSE RETURN -1ENDEND НовДор;PROCEDURE ВозврДор(k: CARDINAL)jBEGIN (*предполагается, что 0<=к<ЧисДор*)INCL(Своб[k DIV w],k MOD w)END ВозврДор;BEGIN (*пометить все дорожки как свободные*)FOR i:=0 TO m-1 DO Своб[i]:={0..w-1}ENDEND РезервДор12.

СИСТЕМНО-ЗАВИСИМЫЕ ВОЗМОЖНОСТИМодула-2 предлагает некоторые возможности, необходимые для программированияопераций низкого уровня. обращающихся непосредственно к объектам, свойственным данноймашине и/или реализации. Сюда входят, например, возможности доступа к устройствам,управляемым машиной, и возможности нарушения правил совместимости типов, наложенныхопределением языка. Такие возможности следует использовать с крайней осторожностью, инастойчиво рекомендуется ограничить их использование специальными модулями (называемымимодулями низкого уровня). Большинство из них имеет форму типов данных и процедур,импортируемых из стандартного модуля SYSTEM. Поэтому модуль низкого уровня явнохарактеризуется идентификатором SYSTEM, стоящим в списке его импорта. (Замечание:Поскольку объекты, импортируемые из SYSTEM, подчиняются специальным правилам, этотмодуль должен быть доступен компилятору.

Поэтому его называют псевдомодулем и он не имеетсоответствующего модуля определений (см. гл. 14).)Возможности, предоставляемые модулем SYSTEM, определяются особенностямиреализации. Обычно в их число входят типы WORD и ADDRESS и процедуры ADR, TSIZE,NEWPROCESS, TRANSFER (см. также гл. 13).Тип WORD соответствует адресуемой единице памяти. Над этим типом не определеноникаких операций, кроме присваивания. Однако, если Формальный параметр процедуры имееттип WORD, соответствующий Фактический параметр может иметь любой тип, занимающий однослово памяти в данной реализации.

Если Формальный параметр имеет тип ARRAY OF WORD, тосоответствующий ему Фактический параметр может быть любого типа, в частности он можетбыть типом записи и рассматриваться как массив слов. Тип ADDRESS определяется какADDRESS = POINTER TO WORDОн совместим с любым типом указателя, а также с типом CARDINAL. Поэтому коперандам этого типа применимы все операции целой арифметики. Следовательно, тип ADDRESSможет использоваться для выполнения адресных вычислений и экспорта результатов в виде164указателей.

Если Формальный параметр имеет тип ADDRESS, соответствующий Фактическийпараметр может иметь любой тип указателя, даже если Формальный параметр - это параметрпеременная. Следующий пример примитивного распределителя памяти демонстрирует обычноеиспользование типа ADDRESS.MODULE Storage;FROM SYSTEM IMPORT ADDRESS;EXPORT Allocate;VAR LastUsed:ADDRESS;PROCEDURE Allocate(VAR a:ADDRESS;n:CARDINAL);BEGIN a:=LastUsed; LastUsed:=LastUsed+nEND Allocate;BEGIN LastUsed:=0END Storage;Функция ADR(x) дает адрес памяти переменной х и имеет тип ADDRESS. TSIZE(T) число единиц памяти, занимаемых любой переменной типа Т.

TSI2E имеет арифметический тип,зависящий от реализации. (!) Примеры:ADR(LastUsed) ТSIZЕ(Узел)Помимо экспорта из псевдомодуля SYSTEM, имеются еще две возможности, зависящие отреализации. Первая - использовать тип идентификатора Т в качестве имени, обозначающегофункцию преобразования типа из типа операнда в тип Т. Очевидно, такие Функции зависят отпредставления типа и не включают в себя явных команд преобразования.

Вторая нестандартнаявозможность используется при описании переменной: можно задать абсолютный адреспеременной и игнорировать схему распределения памяти компилятора. Это обеспечивает доступ кпамяти, имеющей специальное назначение и Фиксированные адреса, такой, например, какрегистры устройств машины с вводом-выводом, "отображаемым на память". В этом случае адресзадается целым константным выражением, заключенным в скобки и следующим сразу заидентификатором описываемой переменной. Выбор подходящего типа данных остается запрограммистом.13.

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

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

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

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