Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИиП. Контент для студ-ов (фрагмент).docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
82 Кб
Скачать
☆

Var obl: char;

POLE: STRING[7];

Vt: longint;

…

READ(POLE,OBL,VT);

Тогда при вводе с первой позиции:

ТЕЛЕФОН-2223344

получим: POLE= `ТЕЛЕФОН`,

OBL=`-`

VT=2223344

Однако, если ввести:

Т Е Л Е Ф О Н - 222-33-44

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

Чтобы избежать подобных ситуаций, рекомендуется использовать 2 самостоятельные разновидности процедуры READ:

А) для ввода символов (тип CHAR):

READ(KBD, <имя символьной переменной>);

Здесь KBD – имя логического устройства, соответствующего клавиатуре (KeyBoarD). Когда указывается это имя, ввод с клавиатуры ведется только одного символа без его отображения на экране дисплея.

Б) для ввода строки (тип STRING):

READ( <имя строковой переменной>);

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

Примечания:

1. во внутреннем представлении строка ввода хранится с

добавлением в ее конец специального символа (Ctrl-Z),

обозначающего завершение строки ввода и, одновременно,

маркер конца всей последовательности данных (файла). Поэтому,

если количество значений в строке ввода меньше числа

переменных в списке процедуры READ, то все лишние

переменные:

- для типа CHAR получают значение управляющего

символа Ctrl-Z;

- для типа STRING – становятся пустыми;

- для целых и вещественных типов остаются неизменными.

2. Хотя длина вводимой строки по умолчанию ограничена 127

символами, эту граничную величину можно уменьшить с

помощью стандартной переменной BUFLEN. Она определяет

длину буфера в диапазоне от 0 до 127 байтов и распространяется

только на одну, следующую за ней процедуру READ:

…

BUFLEN:=30;

READ(NAIM_E); => буфер ввода уменьшится до 30

символов. Но после этого опять

станет равным 127.

Еще одним примечательным вариантом процедуры ввода является READLN:

READLN[(<список имен переменных через запятую>)];

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

Если список имен переменных отсутствует, то очередная строка ввода пропускается.

Для типа BOOLEN значениями ввода могут быть только TRUE и FALSE.

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

Вывод данных.

Для вывода результатов работы программы в стандартный файл OUTPUT (на экран дисплея) используются две процедуры:

WRITE(<список выражений через запятую>);

WRITELN[(<список выражений через запятую>)];

В списке «выражений» допустимы константы, имена переменных, элементов массивов или записей, а их значения могут быть любого типа, кроме интервального, перечисляемого и файлового.

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

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

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

- символы и строки выводятся без изменений;

- логические значения выводятся только словами TRUE или

FALSE;

- числа целого типа выводятся с выделением позиций для всех

разрядов «плюс» один разряд для знака числа (но явно

выводится только «минус»);

- числа вещественного типа выводятся в формате числа с

плавающей точкой (в экспоненциальной форме с мантиссой и

порядком).

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

WRITE(<выражение>:P[:d]);

В общем случае формат задает ширину поля (P), выделяемого для вывода значения. Он может быть выражением только целого типа и указывается после имени выводимого выражения (например, переменной) через двоеточие. Возможно также явное указание в формате количества знаков после точки (d). Причем (!) d включено в P.

Например:

WRITE(POLE:24,KOL_VO:5,SUM:10:2);

Если выводимое значение занимает меньше места, чем число позиций, указанное в формате, то в выделенном поле оно прижимается вправо, а лишние позиции заполняются пробелами. Если больше, то выделенное поле расширяется до нужных размеров.

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

- если формат не указан, то вывод осуществляется в поле шириной 18 символов в экспоненциальной форме, т.е. в форме числа с плавающей точкой (с мантиссой и порядком);

- если формат задан только шириной поля P, то значение выражения выводится также в экспоненциальной форме с выравниванием по правой границе поля. Т.к. после десятичной точки выводится, по крайней мере, одна цифра, то минимальная ширина поля для REAL равна 7, а для отрицательного значения – 8 (с разрядом для «минуса»);

- если формат включает P и d, то вывод значений осуществляется в форме числа с фиксированной точкой с d десятичными знаками в дробной части и с выравниванием по правому краю поля из С знаков. При этом d должно быть в диапазоне от 0 до 24. Иначе вывод будет в форме с плавающей точкой.