FOR х = 0 ТО I STEP 0.1
будут выполняться так, как предполагает пользователь, хотя в машине, работающей в двоичной системе счисления, не существует точного представления числа 0.1, а конструкция вида
FORx = I ТО 0 STEP 0.1 не будет работать, как ожидается.
Как уже было указано, значение управляющей-переменной при выходе из цикла-с-шагом через оператор-конца-цикла не определено. При выходе из блока-цикла по оператору управления управляющая-переменная должно сохранять значение, котороге она имела при выполнении оператора управления.
Программа, содержащая циклы, будет удовлетворять настоящему стандарту только в том случае, если каждый цикл, которому передано управление, выполняется хотя бы один раз.
3.11. О п е р а.то p-в ы в о д а
Общее описание
Оператор-вывода предназначен для вывода данных.
Общая синтаксическая форма оператора-вывода имеет вид:
PRINT элемент р элемент р ... р элемент
где каждый элемент является либо выражением, либо вызовом- табулятора, либо пробелом, а знак пунктуации (р) является либо запятой, либо точкой с запятой.
Синтаксис
оператор-вывода = PRINT список-вывода
список-вывода = (элемент-вывода разделитель-вывода)* элемент-вывода.
элемент-вывода = выражение вызов табулятора
вызов-табулятора = ТАВ круглая-скобка-левая арифметическое- выражение круглая-^кобка-правая
разделитель-вывода = запятая точка-с-запятой
Примеры
PRINT X
PRINT X,Y
PRINT X, Y, Z
PRINT ,,, X
PRINT “X EQUALS", 10
PRINT X;- (Y+Z)/2
PRINT TAB (10); A; “IS DONE".
Семантика
Выполнение оператора-вывода создает строку символов для передачи на внешнее устройство. Эта строка символов определяется в результате последовательной обработки каждого элемента-вывода и разделителя- вывода в списке-вывода.
При вычислении арифметических-выражений создается строка ^символов, содержащая в начале либо пробел, если число положительное, либо знак-минус, если число отрицательное. Далее следует десятичное представление абсолютного значения числа, завершающееся пробелом. Положительное десятичное представление числа совпадает с описанием числовых-констант (см. п. 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.
Обработка разделителя-вывода ’’запятая” зависит от ’’указателя позиции”. Если данная позиция не находится в последней зоне вывода в строке и не превышает размеры поля, то генерируется один или более пробелов до установления указателя позиции на начало новой зоны вывода в строке. Если ’’указатель позиции” находился в последней зоне вывода, то генерируется конец строки. Наконец, если ’’указатель позиции” превышает размер поля (как, например, при обработке последнего элемента-вывода, точно заполняющего строку), то генерируется конец-строки, а первая зона вывода в следующей строке заполняется пробелами.Всякий раз, когда ’’указатель позиции” больше единицы, а обработка следующего элемента-вывода потребует расширения более чем на одну позицию, перед генерацией символов элемента-вывода будет выведен конец-строки.
Всякий раз, когда при генерации символа во время обработки элемента-вывода ’’указатель позиции” превысит размер поля более чем на одну позицию, перед этим символом будет выведен конец-строки, ’’указатель позиции” будет вновь установлен на единицу.
По завершении обработки списка-вывода, если этот список вывода не кончается разделителем-вывода, генерируется последний конец-строки; в противном случае этот последний конец-строки не вырабатывается.
Исключения
Вычисление вызова-табулятора генерирует значение меньше единицы (ошибка не является неустранимой, восстановительная процедура должна заменять значение аргумента единицей, после чего выполнение программы должно продолжаться).
Примечания
Запятая, используемая как разделитель-вывода, позволяет программисту организовать вывод в табличном формате, который определяется по зонам вывода.
При пустом списке-вывода генерируется конец-строки, формирующий текущую строку вывода. Если в этой строке нет никаких символов, выводится строка Из пробелов.
Строка вывода на терминале обычно делится на 5 зон по 15 позиций в каждой.
Строка символов, полученная при выводе значения арифметического-выражения, должна содержать в конце один пробел. В случае, если этот пробел вызывает установку значения указателя позиции, пре-' вышающего размер поля, реализация может не выводить этот пробел.
п ер а т о р-в в о д а
Общее описание ;
Оператор-ввода позволяет пользователю взаимодействовать с программой в процессе ее выполнения, т.е. присваивать значения переменным программы в режиме диалога или в пакетном режиме. Оператор- ввода дает возможность вводить элементы данных, где элементом данных может быть как числовое, так и текстовое выражение. Общая синтаксическая форма оператора-ввода следующая:
INPUT переменная,..., переменная
Синтаксис
оператор-ввода = INPUT список-переменных
список-переменных = переменная (запятая переменная) *
подсказка-ввода — определяется реализацией
ответ-вводу = список-ввода конец-строки 4
*список-ввода = заполненная-заданная-величина (запятая запол- ненная-заданная-величина) *
заполненная-заданная-величина = пробел * заданная-величина пробел *
заданная-величина = текст-в-кавычках текст-не-в-кавычках
Примеры
1) INPUT х
INPUT х, АЦ, Y(2)
5)2, SMITH,-З
25,0,-15
) 3.14159
.12А. Семантика
После того, как при выполнении программы будет получен ответ- вводу, оператор-ввода, присваивает переменным из списка-переменных значения, полученные по порядку из ответа-вводу.
Программа запрашивает у пользователя необходимые данные при помощи подсказки-вводу. Выполнение программы приостанавливается до получения ответа-вводу.
Тип каждой заданной-величины в ответе-вводу должен соответствовать типу переменной, которой присваивается эта величина. Таким образом, тексты-не-в-кавычках, которые являются числовыми константами, должны присваиваться числовым переменным. Строковым переменным должны присваиваться текст-в-кавычках или текст-не-в-кавычках.
Вычисление индексированных-выражений в списке-переменных производится после присваивания значений переменным, предшествующим этим выражениям (т.е. стоящим левее этих выражений) в списке- переменных.
Присваиванием значений из ответа-вводу не может производиться до тех пор, пока не будут сделаны следующие проверки:
тип каждой заданной-величины должен соответствовать типу переменной;
число заданных-величин должно быть равно числу переменных в списке-переменных;
каждая из заданных-величин должна находиться в допустимом для нее диапазоне.
.Исключения
Тип заданной-величины не согласуется с типом переменной, которой она должна быть присвоена (ошибка не является неустранимой, должна существовать восстановительная процедура, разрешающая повторный ответ-вводу).
Число данных в списке-ввода недостаточно (ошибка не являётся неустранимой, должна существовать восстановительная процедура, разрешающая повторный ответ-вводу).
Число данных превышает число переменных в списке-ввода (ошибка не является неустранимой, должна существовать восстановительная процедура, разрешающая повторный ответ-вводу).Вычисление арифметической заданной-величины приводит к переполнению (ошибка не является неустранимой, должна существовать восстановительная процедура, разрешающая повторный ответ-вводу).
Присваивание заданной-величины строковой-переменной приводит к переполнению строки (ошибка не является неустранимой, должна ■существовать восстановительная процедура, разрешающая повторный ответ-вводу).
. Примечания
Настоящий стандарт требует, чтобы пользователю в диалоговом режиме предоставлялась возможность для повторного ответа-вводу в случае ошибки. Стандарт не требует, чтобы реализация обладала средствами исправления ошибок в ответе-вводу.
Рекомендуется, чтобы подсказка-вводу состояла из знака вопроса и одного пробела.
В случае ошибочного ответа-вводу должно выдаваться сообщение о возникновении исключительной ситуации, и должен быть разрешен повторный ответ-вводу.
Если для присваивания текстовой-переменной вводится текст- не-в-кавычках, то ведущий и завершающий пробелы должны игнорироваться (см. п. 3.1). Если вводится текст-в-кавычках, то пробелы являются значачими (см. л. 3.3).
Хранение и рассылка данных в программе
Общее описание
Оператор-хранения-данных подготавливает последовательность представлений элементов данных для оператора-рассылки-данных. Общая синтаксическая форма оператора-хранения-данных следующая:
DATA заданная-величина,..., заданная-величина
где каждая заданная-величина — либо текст-не-в-кавычках (который может быть представлением числовой-константы), либо текст- в-кавычках.
Оператор-рассылки-данных служит для присваивания переменным значений из последовательности данных, созданной оператором-хра- нения-данных.
Оператор-восстановления-указателя-рассылки позволяет подготовиться к повторному считыванию данных из этой последовательности. Общая синтаксическая форма операторов-рассылки-данных и восста- новления-указателя-рассылки следующая:
READ переменная,..., переменная
• RESTORE
Синтаксис
оператор-хранения-данных = DATA список-данных
список-данных = заданная-величина (запятая заданная-величина)*
оператор-рассылки-данных = READ список-переменных
оператор-восстановления-указателя-рассылки = RESTORE