FOR х = 0 ТО I STEP 0.1

будут выполняться так, как предполагает пользователь, хотя в ма­шине, работающей в двоичной системе счисления, не существует точного представления числа 0.1, а конструкция вида

FORx = I ТО 0 STEP 0.1 не будет работать, как ожидается.

Как уже было указано, значение управляющей-переменной при выхо­де из цикла-с-шагом через оператор-конца-цикла не определено. При вы­ходе из блока-цикла по оператору управления управляющая-переменная должно сохранять значение, котороге она имела при выполнении опера­тора управления.

Программа, содержащая циклы, будет удовлетворять настоящему стандарту только в том случае, если каждый цикл, которому передано управление, выполняется хотя бы один раз.

3.11. О п е р а.то p-в ы в о д а

  1. Общее описание

Оператор-вывода предназначен для вывода данных.

Общая синтаксическая форма оператора-вывода имеет вид:

PRINT элемент р элемент р ... р элемент

где каждый элемент является либо выражением, либо вызовом- табулятора, либо пробелом, а знак пунктуации (р) является либо запя­той, либо точкой с запятой.

  1. Синтаксис

  1. оператор-вывода = PRINT список-вывода

  2. список-вывода = (элемент-вывода разделитель-вывода)* эле­мент-вывода.

  3. элемент-вывода = выражение вызов табулятора

  4. вызов-табулятора = ТАВ круглая-скобка-левая арифметическое- выражение круглая-^кобка-правая

  5. разделитель-вывода = запятая точка-с-запятой

  1. Примеры

  1. PRINT X

PRINT X,Y

PRINT X, Y, Z

PRINT ,,, X

PRINT

PRINT “X EQUALS", 10

PRINT X;- (Y+Z)/2

PRINT TAB (10); A; “IS DONE".

  1. Семантика

Выполнение оператора-вывода создает строку символов для переда­чи на внешнее устройство. Эта строка символов определяется в результа­те последовательной обработки каждого элемента-вывода и разделителя- вывода в списке-вывода.

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

В каждой реализации должны быть определены 2 параметра: d — максимальное количество выводимых значащих десятичных цифр числа; е — минимальное количество выводимых цифр порядка числа (см. п. 3.3.1). Значение d должно быть не менее шести, а значение е — не менее двух.

Число, точно представимое целым (d или меньшим) количеством десятичных цифр, выводится в формате представления с неявно задан­ной точкой без указания порядка.

Все остальные числа выводятся либо в формате представления с яв­но заданной точкой без задания порядка, либо с явно заданной точкой и с заданным порядком.

Если точность чисел, которые могут быть представлены с d или мень­шим количеством цифр без задания порядка, не меньше точности в слу­чае представления этих чисел в формате с заданным порядком, они долж­ны выводиться без задания порядка. Например, если d = 6, то Юл(—6) - должно выводиться как 0.000001.

Числа, представленные в формате с явно заданной точкой без зада­ния порядка, должны выводиться не менее чем с d десятичными значащи- ' ми цифрами и точкой; последующие нули в дробной части могут быть опущены. В представлении числа, меньшего единицы, должны отсутст­вовать цифры левее точки. Эта форма требует не менее d+З символов, включая знак, точку и замыкающий пробел.

Числа,, представленные с явно заданной точкой и заданным поряд­ком, должны выводиться в формате:

’’значение” Е s ’’порядок”

где s — знак плюс или минус, величина Означения” находится в диа­пазоне от единицы до десяти и представлена не менее d цифрами точнос­ти, а ’’порядок” содержит от одной до е цифр.

В дробной части ’’значения” замыкающие нули, могут быть опуще­ны, так же как ведущие нули в ’’порядке”. Точка распечатывается как 4-126$

часть ’’значения”, поэтому выводимое число всего будет содержать d+e+5 символов (знак мантиссы, точка, Е, знак порядка и замыкающий пробел). і

При обработке текстовых-выражений генерируется соответствую­щий текст. При обработке разделителя точка-с-запятой генерируется текст нулевой длины.

Обработка вызова-табуляции или разделителя ’’запятая” зависит от ранее сгенерированной строки символов текущего или предыдущего оператора-вывода. ’’Текущая строка” (возможно пустая) — это строка символов, сгенерированная после последнего выведенного конца-стро- ки. ’’Размер поля” — это число символов, включая символ конца-стро­ки, которые могут быть выведены на одной строке. ’’Размер поля” определяется реализацией. ’’Указатель позиции” текущей строки — это номер позиции для очередного выводимого в этой строке символа; по­зиции вывода нумеруются последовательно слева направо, начиная с единицы.

Каждая строка вывода разделена на фиксированное число зон вы­вода. Число зон и длина каждой зоны определяется реализацией. Все зоны вывода, кроме, возможно, последней в строке, должны иметь оди­наковую длину. Эта длина должна быть не менее чем d+e+б символов. Это нужно, во-первых, для того, чтобы разместить числа, представлен­ные с явно заданной точкой и заданным порядком, и, во-вторых, для перевода механизма вывода с помощью разделителя запятая на следую­щую зону вывода, как будет описано ниже.

Назначение вызова-табулятора состоит в том, что указатель пози­ции текущей строки устанавливается на ранее специфицированное зна­чение для вывода следующего элемента-вывода. Для этого аргумент вызова-табуляции вычисляется и округляется до ближайшего целого N. При N < I возникает исключительная ситуация. Если N больше, чем размер поляМ, то N преобразуется по формуле

N = M*INT ((N-I)/M)

Если ’’указатель позиции” в текущей строке меньше или равен N, то для перемещения указателя позиции в позицию N выводится необ­ходимое количество пробелов. Если указатель позиции больше N, то выводится конец-строки, а в следующей строке выводится N-І пробе­лов для установления указателя позиции в N.

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

Всякий раз, когда при генерации символа во время обработки элемента-вывода ’’указатель позиции” превысит размер поля более чем на одну позицию, перед этим символом будет выведен конец-строки, ’’указатель позиции” будет вновь установлен на единицу.

По завершении обработки списка-вывода, если этот список вы­вода не кончается разделителем-вывода, генерируется последний ко­нец-строки; в противном случае этот последний конец-строки не вы­рабатывается.

  1. Исключения

Вычисление вызова-табулятора генерирует значение меньше единицы (ошибка не является неустранимой, восстановительная процедура должна заменять значение аргумента единицей, после чего выполне­ние программы должно продолжаться).

  1. Примечания

Запятая, используемая как разделитель-вывода, позволяет прог­раммисту организовать вывод в табличном формате, который опре­деляется по зонам вывода.

При пустом списке-вывода генерируется конец-строки, формирую­щий текущую строку вывода. Если в этой строке нет никаких символов, выводится строка Из пробелов.

Строка вывода на терминале обычно делится на 5 зон по 15 пози­ций в каждой.

Строка символов, полученная при выводе значения арифметичес­кого-выражения, должна содержать в конце один пробел. В случае, ес­ли этот пробел вызывает установку значения указателя позиции, пре-' вышающего размер поля, реализация может не выводить этот пробел.

  1. п ер а т о р-в в о д а

  2. Общее описание ;

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

INPUT переменная,..., переменная

  1. Синтаксис

  1. оператор-ввода = INPUT список-переменных

  2. список-переменных = переменная (запятая переменная) *

  3. подсказка-ввода — определяется реализацией

ответ-вводу = список-ввода конец-строки 4

  1. *список-ввода = заполненная-заданная-величина (запятая запол- ненная-заданная-величина) *

  2. заполненная-заданная-величина = пробел * заданная-величина про­бел *

  3. заданная-величина = текст-в-кавычках текст-не-в-кавычках

  1. Примеры

1) INPUT х

INPUT х, АЦ, Y(2)

5)2, SMITH,-З

25,0,-15

  1. ) 3.14159

  2. .12А. Семантика

После того, как при выполнении программы будет получен ответ- вводу, оператор-ввода, присваивает переменным из списка-переменных значения, полученные по порядку из ответа-вводу.

Программа запрашивает у пользователя необходимые данные при помощи подсказки-вводу. Выполнение программы приостанавливается до получения ответа-вводу.

Тип каждой заданной-величины в ответе-вводу должен соответство­вать типу переменной, которой присваивается эта величина. Таким обра­зом, тексты-не-в-кавычках, которые являются числовыми константами, должны присваиваться числовым переменным. Строковым переменным должны присваиваться текст-в-кавычках или текст-не-в-кавычках.

Вычисление индексированных-выражений в списке-переменных производится после присваивания значений переменным, предшествую­щим этим выражениям (т.е. стоящим левее этих выражений) в списке- переменных.

Присваиванием значений из ответа-вводу не может производить­ся до тех пор, пока не будут сделаны следующие проверки:

  1. тип каждой заданной-величины должен соответствовать типу пе­ременной;

  2. число заданных-величин должно быть равно числу переменных в списке-переменных;

  3. каждая из заданных-величин должна находиться в допустимом для нее диапазоне.

  1. .Исключения

Тип заданной-величины не согласуется с типом переменной, кото­рой она должна быть присвоена (ошибка не является неустранимой, должна существовать восстановительная процедура, разрешающая пов­торный ответ-вводу).

Число данных в списке-ввода недостаточно (ошибка не являётся неустранимой, должна существовать восстановительная процедура, раз­решающая повторный ответ-вводу).

Число данных превышает число переменных в списке-ввода (ошиб­ка не является неустранимой, должна существовать восстановительная процедура, разрешающая повторный ответ-вводу).Вычисление арифметической заданной-величины приводит к пере­полнению (ошибка не является неустранимой, должна существовать восстановительная процедура, разрешающая повторный ответ-вводу).

Присваивание заданной-величины строковой-переменной приводит к переполнению строки (ошибка не является неустранимой, должна ■существовать восстановительная процедура, разрешающая повторный ответ-вводу).

  1. . Примечания

Настоящий стандарт требует, чтобы пользователю в диалоговом режиме предоставлялась возможность для повторного ответа-вводу в случае ошибки. Стандарт не требует, чтобы реализация обладала средствами исправления ошибок в ответе-вводу.

Рекомендуется, чтобы подсказка-вводу состояла из знака вопро­са и одного пробела.

В случае ошибочного ответа-вводу должно выдаваться сообщение о возникновении исключительной ситуации, и должен быть разрешен повторный ответ-вводу.

Если для присваивания текстовой-переменной вводится текст- не-в-кавычках, то ведущий и завершающий пробелы должны игнори­роваться (см. п. 3.1). Если вводится текст-в-кавычках, то пробелы яв­ляются значачими (см. л. 3.3).

  1. Хранение и рассылка данных в прог­рамме

    1. Общее описание

Оператор-хранения-данных подготавливает последовательность представлений элементов данных для оператора-рассылки-данных. Общая синтаксическая форма оператора-хранения-данных следующая:

DATA заданная-величина,..., заданная-величина

где каждая заданная-величина — либо текст-не-в-кавычках (кото­рый может быть представлением числовой-константы), либо текст- в-кавычках.

Оператор-рассылки-данных служит для присваивания переменным значений из последовательности данных, созданной оператором-хра- нения-данных.

Оператор-восстановления-указателя-рассылки позволяет подгото­виться к повторному считыванию данных из этой последовательности. Общая синтаксическая форма операторов-рассылки-данных и восста- новления-указателя-рассылки следующая:

READ переменная,..., переменная

• RESTORE

  1. Синтаксис

  1. оператор-хранения-данных = DATA список-данных

  2. список-данных = заданная-величина (запятая заданная-величи­на)*

  3. оператор-рассылки-данных = READ список-переменных

  4. оператор-восстановления-указателя-рассылки = RESTORE