К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 30
Текст из файла (страница 30)
Заметим, что р не ссгь фактический параметр-переменная, поэтому оно может быть компонентой упакованного массива или записи. 202 Описание языка Значение г) должно быть порождено с помощью первого (короткого) варианта обращения к Ыем, если зто не так, то — ошибка уничтожает идентифипирующее значение Ч. Если Ч равно пг1, то гакая ситуапня считается ошибкой. Значение Ч должно быть порождено с помощью второго (длинного) варианта обращения к Ысчг, причем К1, ..., Кп дгглжны выбирать те же варианты, которые были выбраны при порождении указанного значения, если зто не так, то — ошибка 1взрозе(Ч, И, ..., Кп) Ьейгп К = 1; (ог ) = В (с С бгг Ьейгп Р ( 3 ) ' = 0 ( К.1, г 1 3 < > С 1 Ь е и К : = во с С 1 К ) е вб ()п р ас)с ( Р, 13, 1 ) эквивалентно опер атору бей 1 и К:= 1; (ог 3:= В Ьо С до Ьей[п 0[К1 := Р[31 11 3 > С Ьйеп К:= кпсс(К) епб епб И в том и в другом случае во всех итерациях ойератора цикла Р обозначает одну переменную и [.) — одну переменную.
11.4.3. Процедуры передачи данных. Предположим, что (l обозначает неупакованный массив (персменную), у которого тип индекса Ы, а тип компонент — Т. Пусть Р обозначает упакованный массив (переменную), у которого 52 — тип индекса, а Т вЂ” тип компонент. В и С обозначают наименьшее и наибольшее значения, относяшиеся к типу Я2, К вЂ” некоторую новую переменную (нигдс нс используемую), относящуюся к типу 51, а ) обозначает новую переменную, относящуюся к типу 52. Пусть 1 — некоторое выражение, совместимое с 51.
Рас)с([), 1, Р) эквивалентно. оператору: !!. Процедуры и функции 20З. ! !.5. Н!тЕДО(1ИСАНН!з!Е ФУНКЦИИ 11.5.1. Арифметические функции. Пусть х — любое вещественное нли целое выражение. Тип результата функций аЬз и зг)г тот же, что н тип х. Тип результата других арифметических функций— цеа1. аЬа (х) зцг(х) дает абсолютное значение х дает квадрат х. Ситуация, когда в данной реализации квадрата не существует, считается ошибкой дает синус от х, где х выражено в радианах дает косинус ог х, где х — в радианах дает значение, равное сснояанию натурального лога- рифма, возведенному в степень х дает натуральный логарифм от х. Ситуация, когда х меньше или равно нулю, считается ошибкой дает корень квадратный из х. Ситуация, когда ив отрицательное, считается ошибкой дает выраженное в радианах главное значение арктан- гснса от х ып(х) соз(х) ехр(х) !и (х) ацгыт) агс!ап(х) 11.5.2. Логические функции.
Пусть х — любос целое выраженно, а ( обозначает любую переменную-файл. Тип результата всякой логической функции — Воо)сап. зквивалентно выражению (аЬз(!) шод 2 !) если 1 не определено, то — . ошибка. Обращение ео((1) дает значение !гнс, сели 1 ваходитси н режиме формирования или же до обрашения 1 был установлен в последнюю позицию, т. е. па последнюю компоненту последовательности. Если список параметров (параметр) спущен, то ео1 применяется к параметру программы под именем 1прщ если 1 нг определено или ео([В истина, то — оншйка. Фекл ! должен быть текстовым файлом.
Обришсннс ео!и (1) дает значение 1гце, если текупгая компонента последояатечьности ! представляет собой маркер конца строки. Если список параметров (параметр) опущен, то ео1п применяется к параметру программы под именем 1прн! одб)!) ео1(1) ео1п (г) !гнпс(г) дает значение, удовлетворяю~!гее условию: 0 ( = г— !гипс (г) ( 1 при г )= 0 или же — ! ( г — !гцпс (г) ( == О нри г ( О. Если такгло значения пе сушсствует, то — ошибка дает значение, удовлетворяюнгее условию: гонпд (г) = 1гнпс (г + 0,5) при г )= О, или ке гоояд (г) = 1гнпс (г — 0,5) прн г ( О. Если такого значения яс сунпют«усгс го ошибка. гонпд(г) 11.5.3. Преобразующие функции ((гапз(сг).
Пусть г — любое вещественное выражение. Тип результата каждой из функций (п(енсг. 204 Описание языка 11.5.4. Ординальиые функции. Пусть ! — любое целое выражение, а х — любое ординальное выражение. огд(х) сьг(1) дает порядковый номер для.х дает значение типа С1гаг с порядковым номером 1.
Если такого значения не существует, то — ошибка. Если с обозначает некоторое символьное значение, то всегда верно сов~ношение: снг(огб[с)1 = с дает следующее зв х значение (если оно существус~). В этом случае верно соотношение огд (зпсс (х) ) = огб(х) +!. Если следующего значения не сущест- вует, то — ошибка дает значение, предшествующее х (если оно сущеет- вует).
В этом случае верно соотношение огб(ргег1(х) ) = огб(к) — 1. Если предшествующего значения не существует, то — ошибка зпсс(х) ргеб (х) 12. ТЕКСТОВЫЕ ФАЙЛЫ. ВВОД И ВЫВОД 12.!. ЧТЕНИЕ ()(ЕД()) Работа процедуры Кеаг) с текстовым файлом следует таким правилам. Пусть ! обозначает текстовый файл, а у), ..., уп— Разумные'.ввод и вывод базируются на текстовых файлах (см. равд. б.2.4), задаваемых программе на Паскале в качестве параметров (программы). В окружении, где работает программа, им могут соответствовать разные вводные и выводные устройства вроде клавишной панели, дисплея, магнитной ленты или печатающего устройства. Для упрощения работы с текстовыми файлами вводятся три прсдописанные процедуры (Кеа()!гг, Юг!(е!и и Раде) и расширяются возможности двух других предописанных процедур ()(еа() и !)угг!(е; см.
равд. 11.4.1) . Текстовые файлы, с которыми работают все эти процедуры, не обязательно представляют собой вводные и выводные устройства, онн могут быть и просто локальными файлами. Списки фактических параметров этих процедур не следуют обычным правилам (см. равд. 11.3); кроме всего прочего, в них (списках) может быть разное (переменное) число параметров.
Кроме того, параметры не обязательно относятся к типу Сваг. Они могут быть и других типов. В этом случае прн псреднче данных выполняезся неявная операция преобразования, Если первый параметр — файловая переменная, то ввод или вывод идет именно в, этот файл. В противном же случае считается, что ввод идет из файла (параметра программы) (прн(, а вывод- в файл (параметр программы) Ои1рц( (см. равд. !3). !2. Текстовые фадвы.
Ввод и вывод 205 перемснныс, относящиеся к типам СЬаг, 1п1едег (либо их диапазонам) или Кеа1. а) Кеаб (у1, ..., чп) эквивалентно Ксан (К, т1, ..., нп), где д обозначает параметр программы — файл 1прн!. б) Кеа<1 (1, т1, ..., тп) эквивалентно оператору: Ьеп1п Кеаб (1, у!); ...; Кеаб (1, тп) спб где все вхождения 1 обозначают одну и ту же переменную. в) Обращение Ксаб (1, т). считается ошибкой, если 1 не определено либо же находится в режиме просмотра, или жс ео1(1) — 1гпе.
'Действие обращения Кеаб (1, т) зависит от типа параметра ю 12.1.1. Чтение символа. Обращение Ксаб (1, т), где ч обозначает переменную, относящуюся к типу, совместимому с типом СЬаг, эквивалентно оператору: Ьсп!и т:= Ц; Ое!(1) епб где все вхождения 1 обозначают одну и ту же переменную.
Если перед обращением Кеаб(1, у) было истинно со!п(1), то после будет истинно условие (ч = ' '). !2.'1.2. Чтение целого числа. Обращение Кеаб(1, ч), где т обозначает переменную, относящуюся к типу, совместному с типом 1п1епег, предполагает, что из 1 читается последовательность символов, образующая целое число со знаком (см. равд. 4), целое значение которого присваивается переменной у. Предшествующие числу пробелы и маркеры конца строки пропускаются. Если целое число со знаком не обнаружено. то — ошибка.
12.!.3. Чтение вещественного числа. Обращение Кеаб !1, т), где т обозначает переменную, относящуюся к типу Кеа!, предполагает, что из 1 читается последовательность символов, образующая число со знаком (см. равд. 4), вещественное значение которого присваивается переменной т. Предшествующие числу пробелы и маркеры конца строки пропускаются. Если число со знаком не обнаружено, то — ошибка. !2.2. ЧТЕНИЕ СТРОКИ 1ПЕАОЕМ! Пусть 1 обозначает некоторый текстовый файл, а ч1, ..., тп— переменные типа СЬаг или 1и!епег (либо их диапазоны) или Кеа!. Обращение Кеаб!п(т1, ..., чп) эквивалентно Кеаб!п(д, т1, ..., тп), а Кеаб!п эквивалентно Кеаб!п(д), где и обозначает параметр программы — текстовый файл 1прн1.
Обращение Кеаб!п(1, т1, ..., тп) эквивалентно оператору: Ьсй!п Кеаб(1, т1, ..., тп); Кеаб!п(1) епб где все вхождения 1 обозначают одну и ту же переменную. Обращение Кеаб!п(1) эквивалентно оператору: 206 Онисиние леыка Ьеде ° ню!е оо1 ео1 ° (() 0о йе((11; Э ее(1) сои где все вхождения 1 обозначают одну и ту жс переменную. !23.
ЗАПИСЬ ()УК1ТЕ) Работа процедуры Фг![е с текстовым файлом следует таким правилам. Пусть 1 обозначает некоторый текстовый файл, р, р1, ..., рп — параметры вывода, е выражение, а гп и п — целые выражения. Список фактических параметров вывода должен удовлетворять такому синтаксису. Список ааримстров ел~води ="(" (переменкам-файл[ Цирамстр вывода) ("," параметр вывода)" ) ". Параметр выводи = Вырожсоиы !":" Целю выражение [":" Целое сыриженис! [. а) Обращение %п(е(р[, ..., рп) эквивалентно Юп[с([д р[, ..., рп), где д — параметр программы (текстовый файл Оц[рц!). б) Обращение %г[!е(1, р[, ..., рп) эквивалентно оператору: [эеячп Ъг[!е(1, р1); ...; %с[[с(1, рп) еде[ где все вхождения 1 обозначают одну и ту же переменную.
в) Если 1 не определено или не находится в режиме формирования, то обращение Юг[[е(1, р) — ошибка. г) Любой параметр записи имеет один из таких видов: е егп етп причем с представляет собой значение, «записываемое» в 1, а ш и п так называемые параметры, размеры поля (1!е!е[-ю!дй рагагпс(сгз). Если п или гп мепшпе или равно нулю, то это ошибка. Выражение е должно относиться к типу [я[снег, Кеа[, Снаг, Воо!сап или же к некоторому строковому типу. Выражение п может встречаться только в том опучае, если е — вещественного (Кеа!) типа (см.
равд. [2.3.3.). Если ш опущено, то вместо него предполагается некоторое подразумеваемое значение. 11одразумевасмос значение, если речь идет о типах [п(снег. Йса! или Вор[еап, определяется при реализации. Для типа Сйаг подразумеваемым значением является [, а для строкового типа оно равно числу элементов в строке. Если для представления значения е требуется меньше, чем гп символов, то ему предшествует такое число пробелов, чтобы было записано точно гп символов.
Представление значения е зависит от типа е. !Д Гекстоеые фийлы. Вопд и вывод 207 12.3.1. Запись символа. Если с относится к типу С1!аг, то обращение Юг(1с(1, е: т) эквивалентно операторуз Ьед1п !ог д := 1 Ье а — 1 Пе Иг11е(1.' '); 11:= е; РЬЬГ!) епд где все вхождения 1 обозначают одну и ту жс переменную, а 3 обоз,начает новую (нигде ранее не встречающуюся) целую переменную. 12.3.2. Запись целого числа.
Если с относится к типу 1п1едег, то при с ( 0 обращение Вг!1е(1, е: ш) записывает к — > (минус), за которым следует десятичное представление аЬз(е). Если необходимо, то записываются предшествующие пробелы (нужно чтобы было всего гп символов). 12.3.3. Запись вещественного числа. Если е относится к типу Кеа!, то обращение Юг((е(1, е: т: п) записывает с п цифрами после десятичной точки представление с фиксированной точкой, а Юг(1е(1, е: т) записывает представление с плавающеи точьои соответствующего значения.
Операция «> «» означает «возведение в степень». 12.3.3.1. Представление с фиксированной точкой. Пусть, если е — нуль, тч будет нулевым, в других же случаях в — абсолютное значение, округленное, а затем сокращенное до п десятичных позиций. Пусть если ч! ( 1, б будет 1, в других же случаях пусть б (удовлстворяет условию. — Примеч. лер.) 10«" (б — 1) (= тч ~ 10**!). Значение б — число цифр влево от десятичной точки.