пока не оконч := страница хороша (f, чтение);

строчка окончена (f) Л не оконч

цк (и (испр строчка из f) (f) I настроить (f, чтение); нов строчка (f)) кц;

не оконч *

конец;

  1. проЬ ^страница хороша = (имя файл f, лог чтение) лог: начало лог не оконч;

пока не оконч := файл хорош (f, чтение);

страница окончена (f) Л не оконч

цк (-; (испр страница из f) (f) I настроить (f, чтение); нов страница (f)) кц;

не оконч конец;

  1. проц '’-файл хорош = (имя файл f, лог чтение) лог: начало лог не оконч := истина;

пока настроить (f, чтение);

не оконч Л

(чтение I лог файл окончен! физ файл окончен) (f) цк не оконч := (чтение I испр лог файл из f I испр физ файл из f) (f) кц;

не оконч конец;

  1. проц ^настроить = (имя файл f, лог чтение) пуст: (чтение I настроить на чтение (f) I настроить на запись (f) );

  2. проц установить = (имя файл f, цел р, 1, с) пуст: если ~I открыт из f V

,возм установка (f) то не определено иначе лог чтение = (для чтения из f I истина

I : для записи из f I ложь I не определено; пропуск) ; имя позиция тпоз = тпоз из f, ппоз = заполн из книга из f;

позиция раб тпоз = тпоз;

если (тпоз := (р, 1, с)) вне ппоз если тпоз := ппоз;

(“1 (испр лог файл из f) (f) I не определено); настроить (f, чтение)

инее позиция границы = границы книги (f);

р < 1V р > р из границы + 1 V 1

  1. < 1V1 > 1 из границы + 1 V с<1/с>сиз границы + 1 то тпоз := раб тпоз; не определено

все все;

проц (имя файл, цел, цел, цел) пуст set = установить;

  1. проц уст нач = (имя файл f) пуст:

есл! открыт из f V -)возм уст нач (f) то не определено иначе

имя лог (для чтения из f) := ~1 возм вывод (f);

имя лог (для записи из f) := Й возм ввод (f);

имя лог (для литер из f) := ~івозм двоичн (f);

имя лог (для двоичн из f) := ложь;

имя позиция (тпоз из f) := (1,1,1) все;

проц (имя файл) пуст reset = уст нач;

  1. проц уст номер литеры = (имя файл f, цел с) пуст:

если открыт из f то не определено

иначе имя имени позиция тпоз = тпоз из f;

пока с из тпоз ф с

цк

если с<1/с>сизграницы книги (f) + 1

то не определено инее с > с из тпоз то вперед (f) иначе назад (f) все

кц
все;

проц (имя файл, цел) пуст set char number =

уст номер литеры;

  1. Значения для обмена

    1. Процедуры преобразования.

'{Процедуры целое, фикс и плав предназначены для использования с процедурами бесформатного обмена вывод, печ и зап в тех случаях, когда требуется небольшое добавочное управление над порождаемым расположе­нием. Каждая из этих процедур имеет параметр разрядность, абсолютная ве­личина которого задает длину строки, порождаемой преобразованием предъявляемого арифметического значения V. И фикс, и плав имеют пара­метр после, задающий число цифр, требуемых после десятичной точки, а параметр порядок в плав задает разрядность, отводимую для порядка. Если V нельзя выразить строкой в пределах заданного разрядность, - даже за счет уменьшения значения после, если оно есть, — то вместо этого выраба­тывается строка, заполненная литерами литера ошибки (10.2.1 .t).

Знак включается обычным образом, и начальные нули заменяются про­белами. Однако пользователь может указать, задавая отрицательную раз­рядность, чтобы знак включался только для отрицательных значений. Если задана разрядность нуль, то вырабатывается кратчайшая возможная строка, в которую, согласно остальным параметрам, можно преобразовать V. Сле­дующие примеры иллюстрируют некоторые из этих возможностей:

печ (целое (і, —4)), которое может печатать”—— —0”, ”——99”, ”——99”, „9999” или, если і было больше, чем 9999, „****”, где — выдача литера ошибки;

печ (целое (і, 4)), которое будет печатать .+ 99”, а не — 99”;

печ (целое (і, 0)), которое может печатать „0”, „99”, „—99”, „9999” или „99999”;

печ (фикс (х, —6, 3)),

которое может печатать „2.718”, „27.183”,

или „271.83” (в последнем случае пожертвовано одним местом после десятичной точки, чтобы приспособиться к данному числу);

печ (фикс (х, 0, 3)), которое может печатать „2.718”, „27.183” или „271.828”;

печ (плав (х, 9, 3,2)),

которое может печатать 2.71810+0”> „+2.718—1”

или „+2.7210 +11” (в последнем случае пожертвовано

одним местом после десятичной точки, чтобы освободить пространство для неожиданно большого порядка) .J

  1. вид *-число = об (< Д вещ >, < Д цел >);

  2. проц целое = (число V, цел разрядность) строк:

выб V в

< (Д цел х) :

(цел длина := абс разрядность - (х < Д 0V разрядность >0 111 0), Д цел п := абс х;

если разрядность = 0 то

Д цел m := п; длина := 0;

покат+:=Д10; длина+:=1; т=#=Д0

цк пропуск кц все;

строк s := предст целого (п, длина);

если длина = 0 V

литера в строке (литера ошибки, лок цел, s)

то абс разрядность X литера ошибки

иначе

(х<Д 0 I ”—”1 : разрядность>0 1’’+”1 ” ”) прип s;

(разрядность #= 01

(абс разрядность - вегр s) X ”. ” прип s);

S все) >, < (Д вещ х) : фикс (х, разрядность, 0) >

быв;

проц (число, цел) строк whole = целое;

  1. проц фикс = (число V, цел разрядность, после) строй: выб V в

  • (Д вещ х) :

если цел длина := абс разрядность —

(х < Д О V разрядность > О 111 0); после > 0 Л

(длина > после V разрядность = 0)

то Д вещ у = абс х;

если разрядность = 0

то длина := (после =01110);

пока у + Д.5 X Д .1 t после > Д 10 t длина

цк длина +:= 1кц;

длина +:= (после = 0 101 после + 1)

все;

строк s := предст рационального (у, длина, после); если -. литера в строке (литера ошибки,док цел, s) то (длина > вегр s Ду < Д 1.0 I ”0” прип s);

(х < Д 0 I ” I : разрядность > 0 I ”+” I ” ”) прип s; (разрядность ¥= 0 I

(абс разрядность — вегр s) X ”г” прип s);

s

инее после >0

то фикс (v, разрядность, после — 1) иначе абс разрядность X литера ошибки все

иначе не определено; абс разрядность X литера ошибки все >,

  • (Д цел х): фикс (Д вещ (х), разрядность, после) > быв;

проц (число, цел, цел) строк fixed = фикс;

  1. проц плав = (число v, цел разрядность,

после, порядок) строк:

выб V в

< (Д вещ х) :

если цел прежде = абс разрядность — абс порядок — (после Ф 0 I после + 1 I 0) - 2;

знак прежде + знак после > 0

то строк s, Д вещ у := абс х, цел р := 0;

Д нормализовать (у, прежде, после, р);

s :=

фикс (знак х X у, знак разрядность X

(абс разрядность - абс порядок - 1), после) + „до” + целое (р, порядок);

если порядок = 0 V литера в строке (литера ошибки,лок цел, s)

то

плав (х, разрядность, (после Ф О I после — 1 I 0), (порядок > 0 I порядок + 1 I порядок - 1))

иначе s

все

иначе не определено; абс разрядность X литера ошибки все >,

< (Д цел х): плав (Д вещ (х), разрядность, после, порядок) > быв;

проц (число, цел, цел, цел) строк float = плав;

  1. проц *-предст у! авление у! целого =

(число V, цел разр) строк:

у! вырабатывает строку с максимальной длиной 'разрядность, содержащую десятичное представление положительного целого числа V выб V в

< (Д цел х):

начало строк s, Д цел п := х;

пока цифру в литеру (С (п мод ДЮ)) прип s;

П-? :=Д 10; п=#=Д0

цк пропуск кц;

(вегр s > разр І разр X литера ошибки I s) конец >

, быв;

  1. проц *- пре дет 0 авление 0 рационального =

(число V, цел разр, после) строк:

у! вырабатывает строку с максимальной длиной 'разр ядность, содержащую округленное десятичное представление положительного вещественного числа V; если 'после'больше нуля, эта строка содержит десятичную точку, за которой следует 'после' цифру!

выб V в

< (Д вещ х):

начало строк s, цел прежде := 0;

Д вещ у := х + Д.5 X Д.1 t после;

проц подб 0 ор циф у! ры у! = (имя Д вещ у) лит : цифру в литеру ( (цел с := С целч (у X := Д 10.0);

(с > 9 I с := 9); у-:= У с; с));

пока у > Д 10.0 t прежде цк прежде +:= 1 кц; і

у/:=Д 10.0 t прежде;

до прежде цк s плюспр подб циф (у) кц;

(после > 0 I s плюспр ” . ”);

до после цк s плюспр подб циф (у) кц;

(вегр s > разр І разр X литера ошибки I s)

конец >

быв;

  1. проц нормализовать = (имя Д вещ у, цел прежде, после, имя цел р)

пуст: 0приспосабливает значение 'у' к тому, чтобы

оно могло подвергаться обмену согласно формату ф п (прежде) d . п (после) d ф;

'р' устанавливается таким, чтобы у X 10 t р равнялось первоначальному значению у' ft

начало

Д вещ g = Д 10.0 Т прежде; Д вещ h = g X Д.1;

пока у>g цк у X:= Д.1; р+:=1кц;

(у =# Д 0.0 I пока у <h цк у X := Д 10.0; р —:= 1 кц);

(у + Д.5 X Д.1 t после > g I у :=h; р +:= 1)

конец;

  1. проц *-цифру в литеру = (цел х) лит:

,,0123456789abcdef” [х + 1J;

  1. проц ^строку в Д цел = (строк s, цел основание,

имя Д цел і) лог:

0 вырабатывает истина, если абсолютное значение результата не больше Д макс цел fi

начало

Д цел 1г = У основание; лог безопасно := истина;

Д цел п := Д 0, Д цел m = Д макс цел -г 1г;

Д цел ml = Д макс цел — m X 1г;

для і от 2 до вегр s

пока Д цел циф = Y литеру в цифру (s [і]);

безопасно := n<mVn-mAциф<ml

цк n := n X lr + циф кц;

если безопасно то і := (s [1] =”+” Ini —п);истина

иначе ложь все

конец;

  1. проц ^строку в Д вещ = (строк s, имя Д вещ г) лог: i/i вырабатывает истина, если абсолютное значение результата не больше, чем Д макс вещ 0

начало

цел е := вегр s + 1;

литера в строке (”ю”> е> s) '■>

цел р := е; литера в строке (”. ” р, s);

цел j := 1, длина := 0, Д вещ х := Д 0.0;

fl пропуск начальных нулей: 0

для і от 2 до е — 1

пока s [i] =”0”Vs [і] = ” . ”Vs [і] =”r”

цк j := і кц;

для ioTj + Ідое — 1 пока длина <