Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 177
Текст из файла (страница 177)
Оператор Рааса! можно пометить с помощью целочисленной метки и затем передать ему управление при помощи оператора асье. Как неолнократно подчеркивалось в нашей книге, использование этой конструкции пе является необходимым и, вообще говоря, приводит к сложностям прн отладке программ. Операторы ввода-вывода. Для большинства операций ввода-вывода функции низкого уровня сет и рсь, а также операторы геат! и хгт Се обеспечивают всю необходимую функциональность.
Функции себ и рок Для записи в файл очередного компонента необходимо предпринять следутошие шаги: 1) значение нового компонента присвоить буферной переменной этого файла; 2) вызнаешь процедуру рць, которая передаст данные из буферной переменной в файл, вставляя новый компонент с заданным значением в конец файла и перемещая указатель текущей позиции в файле на следующую за новым компонентом позицию. Например, для записи в файл Е значения 2 требуется выполнить два оператора: Е !:=2;рц1(Е).
Для считывания текущего компонента файла в локальную переменную требуется выполнить аналогичную последовательность действий (например, Х: =ЕТ; ре1 ( Е) копирует текущий компонент из буферной переменной ЕТ в переменную Х, а затем перемещает указатель текущей позиции файла к следующему компоненту, помещая его значение в буферную переменную ЕТ). Операторы геас и хгт1е. Поскольку обработка файлов обычно требует многократных повторений описанной последовательности двух шагов, в Рааса! имеются стандартные операторы геат! и хгт1е, которые объединяют соответствующую последовательность в вызовединой процедуры.
Например, геаЖЕ. Х) эквивалентноХ:=ЕТ;цеь(ЕХ Операторы геат!! и и хщ ье! и и текстовые файлы, Текстовый файл — это файл, компоненты которого представляют собой отдельные символы; он объявляется с использованием стандартного типа гех1. Предполагается, что текстовый файл организован в строки, которые являются последовательностями символов, завершающимися специальным символом конца строки. Текстовые файлы можно обрабатывать с помощью обычных файловых операций ре1 и рп~, а также с помощью операторов хш 'ье и геат!. Но эти операторы расширены таким образом, что допускают использование в качестве параметров данных, отличных от символьного типа (НаПрИМЕр, ГЕат!(Е.
!т), ГдЕ К вЂ” цЕЛОЧИСЛЕПНая ПсрЕМЕННая). КОГда ПараМЕтрОМ ОПЕ- б44 Приложение. Обзоры языков ратора ип ~е или геаО оказывается объект числового, а не символьного типа, то этот оператор автоматически преобразует символьное представление компонента файла во внутреннее двоичное представление, требуемое в качестве значения переменной. Оператор геэ(( сканирует входной файл, пока не будет найдено необходимое для него полное число компонентов требуемого типа; оператор иг1'(е обеспечивает автоматическое форматирование выводимых данных при записи их в файл вывода. Процедуры иг1се1 п и геа01п выполняют те же действия, что и операторы июле или геэ((, но дополнительно перед своим завершением переводят указатель текущей позиции в файле на новую строку.
Стандартные функции Функции ввода-вывода: + Функция геиг11е(й) открывает файл ( для вывода. Во многих реализациях эта функция задается как геиг1(е(С иия файла), связыва|ошая внешнюю строку иия файла с внутренним файлом языка Рааса! й геэе((1), или геэес (1, иия файла), открывающая файл иодля ввода. + Функпия рп((О перемешает объектданных из буферной переменной файла т!' в файл вывода. Функция дерг) перемегцает очередной объект данных из файла в буферную переменную (1'. Функции геас( иг1ъе, геа((1п и иш Се1 и в действительности являются процедурами и уже были описаны в предыдущем разделе, посвященном операторам Рааса!.
+ Функция ео((О возврагпает значение (гпе, если указатель позиции в файле 1 указывает па его конец. Если у является файлом ввода, то функцию люжно записать просто как ео1, Функпня ео1 п(Г) возвращает значение 1гпе, если из файла ( читается символ конца строки. К сожалению, в Рааса! символ копна строки всегда трансформируется в пробел, так что его присутствие невозможно проверить явным образом, как в С. Функции управления памятью: + Функция пеи(р) отводит место в памяти для объекта данных, тип которого совпадает с типом объекта данных, на который указывает переменная-указатель р, и устанавливает гзначение р так, чтобы оно указывало па этот объект данных.
+ Функция 01яроэе(р) освобождает память, занятую под объект данных, на который указывает указатель р. Эта память должна была быть выделена ранее при помощи вызова функции пеи(р). Арифметические функции: + Функцииэбэ(х),эдг(х), юп(х), соя(х), ехр(х), )п(х),эдгМ(х) иагс1эп(х) вычисляютт соответственно абсолютное значение, квадрат, синус, косинус, экспоненту (е'), натуральный логарифм, квадратный корень и арктангенс своего аргумента. + Функции (гипс и гоипΠ— это две функции для преобразования вещественных ланпых в целочисленные. Огппс(х) возвращает целочисленное значение, причем 0 < х — (гппс(х) < 1, если х положительно или равно О, и -1 < хфгипс(х) < О, если х меньше О.
гоппщх) = (гипс(хч0.5), если х положительно или равно О, и гоип(((х) = = ~гипс(х-0 5),если хотрицательно. П.9. Рег) 645 + Функции рйсй и цпрасх используются для преобразования символьных массивов в упакованные массивы. раск(й, з, г) означает, что следует создать упакованный массив 2 из компонентов массива а, начиная с а[1!. цпраск (г, а, 1) означает, что нужно распаковать массив д формируя массив а, начиная с элемента а[з 3.
Порядковые функции: + Функция огс((х) возвращает инлекс параметра х как элемента перечисления. + Функция сйг(х) возвращает символ, который представлен целым числом х. + Функция зосс(х) возвращает значение элемента, следующего за х в перечислении. Если следующего элемента нет, вызов этой функции воспринимается как ошибка. + Функция рге(((х) возвращает значение предыдущего элемента в перечислении. Аналогично если предыдущего элемента нет, то вызов атой функции приводит к ошибке. П.9.
Рег! Пример с пояснениями В листинге П.11 приведена программа на Рег[, суммирующая элементы массива. В данном примере нри вводе данных )гзз будет получен следующий результат: )ггпу 50И = 10 Программа на Рег! состоит из последовательности операторов, каждый их которых завершается точкой с запятой. Первая строка программы является псевдо- комментарием — она начинается с символа (г, который используется для обозначеа ия комментариев, за которым сразу же следует символ! . В этой строке указывается имя программы, которая будет выполнять сценарий. Обычно первая строка выглядит так'.
()!/цзг)Ьзп)рег1 Листинг П.11. Пример программы суммирования элементов массива на языке Рег) 1 ()! г'наг(Ь1п) рег) 2 Р1 Прана(а = ЗР1 П(Г Д с5т01й ) 3 тсонп( = 0: л (огеасй зпехсопе (91прн(йа(а) 5 (рг~пг "%цех(опе"; б тсонпс - тсонпь + тпехгопе,): 7 рппг "5ци - "; 5 рг1пг 01соцппп"; Это опщсится к сценариям Рег), аыполняемым а операционной системе (йЧ1Х. В системс игнийотчз псенпокоммегпарий обычно игнорируется, но может быть использоаан для устаноаки режимоа работы интернреппора рег! заданием н атой строке соотастстаущщих с~а кщочсй. — Примеч. науч ред 646 Приложение.
Обзоры языков Строка 1. Информирует операционную систему о том, что данньш сценарий будет выполняться интерпретатором рег!. Строка 2. Читает вводимую пользователем строку данных и разбивает ее на элементы массива (в1прцьс1а са, используя в качестве разделителя пробелы. Строки 4 — 6. Выполняется цикл по всем элементам массива с1прцЫа ьа, на каждом шаге которого значение очередного элемента массива добавляется к значению переменной $соцп1. Строка 4. На каждом шаге цикла гогеас!1 переменной зпехьопе присваивается значение очередного элемента массива с«х прцтх1зьа.
Строки 7-8. Распечатывается вычисленная сумма, а также символ конца строки. П.9.1. Объекты данных Элементарные данные. Скалярные переменные имеют идентификаторы, начинающиеся с символа $, и могут хранить числовые и строковые данные. Строки заключаются в одинарные кавычки (' '). Для вычисления значения строки при ее обработке интерпретатором' она должна быть заключена в двойные кавычки (" ").. Следовательно, при выполнении Фх - 'вес'. ргхпс 'Нои инициалы - ьх'; будет напечатано йои инициалы - %х, в то время как операторы $х - 'иег' рт пь "ион иницивнм — хх"; напечатают йои инициалы - мед Для многих функций, если ие задан параметр, по умолчанию используется параметр ь .