Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Темы 3, 5 + массивы ИиП.docx
Скачиваний:
7
Добавлен:
09.06.2015
Размер:
81.78 Кб
Скачать
  1. Начальные сведения о вводе-выводе данных. Ввод данных.

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

Константы приобретают свои значения в программе и не меняют их в ходе ее работы. А значения переменным либо придаются оператором присваивания, либо поставляются (вводятся) из внешней среды. Под внешней средой понимается источник во внешней памяти (например, жесткий магнитный диск) или внешнее логическое устройство (например, клавиатура), предназначенное в данном случае для ввода данных.

Для ввода данных с клавиатуры используется специальная стандартная процедура READ. Ее простейшая форма записи следующая:

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

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

Именно файл INPUT связан либо с консольным устройством (клавиатурой), либо с терминалом (дисплеем).

Каждый вводимый символ (цифра, буква или специальный знак) по мере набора на клавиатуре отображается на экране. Параллельно, перед размещением в оперативной памяти он помещается в специальный буфер (промежуточную память). Длина этого буфера ограничена и составляет 128 символов. Заполнение буфера осуществляется до нажатия на клавишу «ENTER». После нажатия этой клавиши:

- вводимые данные помещаются в оперативную память, отводимую для той или иной переменной из списка;

- курсор устанавливается в начало следующей строки;

- уже введенные строки перемещаются вверх, а самая верхняя строка ввода исчезает.

Использование буфера позволяет редактировать (исправлять) вводимую информацию до момента нажатия «ENTER».

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

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

Присвоение значений ведется слева направо в соответствии с порядком следования переменных в процедуре READ. Типы переменных и констант должны совпадать. Переменным типа REAL можно присваивать значения типа INTEGER.

Распознавание арифметического значения осуществляется от пробела(ов) до пробела(ов).

Пример:

VAR I,J: INTEGER;

A,B,C: REAL;

D: BYTE;

READ(I,A,B); READ(C,D,J);

При вводе:

-25 3.28Е2 34.08 9 024 1754

переменные получат следующие значения:

I=-25 A= 328.0 B=34.08 C=9.0 D=24 J=1754

Укажем особенности работы процедуры READ:

  1. значение числа выделяется от первого символа, отличного от пробела, и до следующего пробела; ведущие (перед числом) пробелы игнорируются;

  2. выделенное значение проверяется на соответствие формату правильной арифметической константы;

  3. полученное значение преобразуется в формат хранения числа и затем присваивается переменной.

При вводе значений символьного и строкового типов апострофы не указываются. Любой символ или их последовательность будут введены так, как они набраны на клавиатуре. Разделителей нет (!).

Пример:

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.

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