Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Ввод данных с клавиатуры

Практически все программы так или иначе взаимодействуют с пользователем в процессе своей работы. Чаще всего средством взаимодействия пользователя с программой является терминал ввода-вывода, использующий клавиатуру для ввода данных, а экран - для их вывода.
Взаимодействие Паскаль-программы с этими устройствами осуществляется с помощью стандартных (предопределенных) файлов Input и Output. Данные, набираемые на клавиатуре, поступают в файл Input, а из него могут быть прочитаны программой с помощью оператора Read. Выводимые данные должны быть записаны программой с помощью оператора Write в файл Output, который отображается на экране. Файлы Input и Output в этих операторах могут быть указаны, а могут отсутствовать - они будут подразумеваться по умолчанию.

Набираемая на клавиатуре последовательность символов отображается на экране, а при нажатии клавиши Enter поступает в файл Input, откуда операторами Read последовательно считывается с использованием переменных, указанных в этих операторах. На экране целые и вещественные значения имеют внешнее (текстовое) представление. Вводимая последовательность символов может содержать несколько целых и вещественных значений, которые должны отделяться друг от друга по крайней мере одним пробелом.

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

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

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

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

Чтобы обнаружить эту ошибку, необходимо задавать директиву {$R+}.
Только при задании режима {$R+} система гарантирует правильность ввода и присваивания значений переменным целочисленных типов.

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

Оператор ReadLn (без параметров), исполняемый при завершении программы, всегда задерживает на экране результат работы (User Screen), что полезно для рассмотрения результатов. Нажатие клавиши Enter возвращает в программу.

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

program d_3_2;
{ЗАДА ЧА Особенности выполнения операции чтения из текстового фата в переменные различных типов
ПРИЕМЫ:
- использование именованных констант,
- контроль диапазона при вводе значения типа integer, путем включения директивы $R,
- контроль правильности представления значения типа с использованием директивы $I и реакцией программы на ошибку.

РЕКОМЕНДАЦИИ
- проверить особенности выполнения операции чтения из текстового файла в
переменные других арифметических типов,
- задавать контроль и другие реакции на ошибки }
uses Crt;
const maxint =3 2767; minint = -32768;
const maxreal = 1.7 E38; minreal = 2.9388E-39;
var A: real; B: integer; f: integer;
Begin ClrScr;
TextColor(White); {установка цвета текста}
WriteLn('ВЫПОЛНЕНИЕ ОПЕРАЦИИ ЧТЕНИЯ');
WriteLn(' из текстового файла в переменные различных типов');
TextColor(Green);
WriteLn('I.При вводе в переменную типа real значения, ');
WriteLn(' превосходящего максимально допустимое (1.71Е38)');
WriteLn(' возникает исключительная ситуация "недопустимый ');
WriteLn(' числовой формат" и прерывание программы');
TextColor(White); {установка цвета текста}
Write(' Задайте значение типа real = '); ReadLn(A);
WriteLn( Введено ', А);
TextColor(Green); {установка цвета текста}
WriteLn('2.npH вводе в переменную типа integer значения, ');
WriteLn('вне допустимого диапазона (', minint, ',', maxint, ')');
WriteLn('контроль производится только при задании директивы');
WriteLn( {$R+J, иначе вводится неверное значение');
TextColor( White);
{$R+}
Write(' Контроль включен, задайте значение типа integer = ');
ReadLn(B);
WriteLnC Введено', В);
($R--}
TextColor(Green);
WriteLn('Контроль отключен !!!');
TextCoIor(White);
Write(' Задайте значение типа integer = '); ReadLn(B);
WriteLn('Введено', В);
TextColor(Green); {установка цвета текста}
WriteLn('3. При вводе в переменную любого скалярного типа ');
WriteLn(' значения, представление которого не соответствует ');
WriteLn(' этому типу, используя директиву {$!}, можно задать');
WriteLn(' собственную реакцию, например, выдать сообщение ');
TextColor(White);
Write(' Задайте неверное представление значения типа real = ');
{$I- } ReadLn(A); f := IOResult: {значение кода ошибки}{SH } if f < > 0 then
Begin
WriteLn('*** неверный числовой формат');
ReadLn
end
else WriteLn(' Введено ', A); ReadLn
end. {Program d_3_2}




 

Комментарии:


Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru