- •5. Общая характеристика языков программирования.
- •Тема 2. Введение в язык Турбо-Паскаль.
- •2. Структура и основные конструкции.
- •3. Алфавит языка.
- •Тема 3. Объекты и средства программирования на языке.
- •3.2. Данные как объекты работы программы.
- •3.3. Константы и их определение.
- •3.4. Идентификаторы и переменные.
- •3.5.Выражения.
- •3.7.Начальные сведения о вводе-выводе данных.
- •Var I,j: integer;
- •Var obl: char;
- •Vt: longint;
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. Иначе вывод будет в форме с плавающей точкой.
