Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Устройства ввода. Ввод с клавиатуры. Реакция на действия пользователя





Устройства ввода

К устройствам ввода можем отнести следующие: клавиатура, сканер, планшет.

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

Все символы, набираемые на клавиатуре, немедленно отображаются на мониторе в позиции курсора (курсор — светящийся символ на экране монитора, указывающий позицию, на которой будет отображаться следующий вводимый с клавиатуры знак).

Рисунок 10 - Клавиатура компьютера

Манипуляторы (мышь, джойстик и др.) — это специальные устройства, которые используются для управления курсором.

К манипуляторам можно отнести мышь, джойстик, трекбол.

Джойстик — обычно это стержень-ручка, отклонение которой от вертикального положения приводит к передвижению курсора в соответствующем направлении по экрану монитора. Часто применяется в компьютерных играх. В некоторых моделях в джойстик монтируется датчик давления. В этом случае, чем сильнее пользователь нажимает на ручку, тем быстрее движется курсор по экрану дисплея.

Рисунок 11 - Джойстик и трекбол

Трекбол — небольшая коробка с шариком, встроенным в верхнюю часть корпуса. Пользователь рукой вращает шарик и перемещает, соответственно, курсор. В отличие от мыши, трекбол не требует свободного пространства около компьютера, его можно встроить в корпус машины.

Мышью (Mouse) исторически называют координатно-позиционирующее устройство, преобразующее перемещение на плоскости в команды позиционирования указателя на экране монитора. Другие названия (например, позиционер), как-то не прижились и давно забыты.



 

Рисунок 12 - Мышь

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

 

Рисунок 13 - Сканер

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

Художники и прочие люди, привыкшие что-то постоянно чер­тить и рисовать, облюбовали ПК в качестве рабочего инструмента уже давно. Первоначально планировалось специально для художников раз­работать “компьютерный каран­даш” — вид мышки в форме пера. Со специального планшета, оборудованного чув­ствительной поверхностью, которая реагирует на испускаемые пе­ром сигналы и передает точные координаты “точки соприкоснове­ния” в компьютер. Тесный контакт пера с рабочей поверхностью планшета при этом не обязателен — между ними может находиться лист бумаги. Именно это качество графического планшета делает возможным не только создание новых иллюстраций, но и перенос в компьютер старых рисунков — их надо просто положить на план­шет под специальную пленку и обвести контуры рисунка пером.

 

Рисунок 14 - Планшет

“Перо” при контакте с план­шетом испускает специальные сигналы, говорящие ему о том, ка­ким цветом нужно нарисовать в компьютере тот или иной эле­мент, какой толщины должен быть штрих и т. д.

Ввод из файла

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

Открытие файла

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

Например, следующие инструкции открывают файл для ввода:

 

AssignFile(f, 'c:\data.txt'); Reset(f);

 

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

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

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

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

 

Листинг.1. Обработка ошибки открытия файла (фрагмент программы)

 

var

fname : string[80]; // имя файла

f : TextFile; // файл

res : integer; // код ошибки открытия файла (значение lOResult)

answ : word; // ответ пользователя

begin

fname := 'a:\test.txt'; AssignFile(f,fname);

repeat

<$I-}

Reset(f); // открыть файл для чтения

{$!+}

res:=IOResult;

if res <> 0

then answ:=MessageDlg('Ошибка открытия '

+ fname+#13 +'Повторить попытку?',mtWarning,

[mbYes, mbNo],0); until (res= 0) OR (answ = mrNo);

if res <> 0

then exit; // завершение процедуры

// здесь инструкции, которые выполняются

// в случае успешного открытия файла

end;

Чтение данных из файла

Чтение из файла выполняется при помощи инструкций read и readln, которые в общем виде записываются следующим образом:

read(ФайловаяПеременная, СписокПеременных);

readln(ФайловаяПеременная, СписокПеременных) ;

где:

· ФайловаяПеременная — переменная типа TextFile;

· СписокПеременных — имена переменных, разделенные запятыми.

Чтение чисел

Следует понимать, что в текстовом файле находятся не числа, а их изображения. Действие, выполняемое инструкциями read или readln, фактически состоит из двух: сначала из файла читаются символы до появления разделителя (пробела или конца строки), затем прочитанные символы, являющиеся изображением числа, преобразуются в число, и полученное значение присваивается переменной, имя которой указано в качестве параметра инструкции read или readln.

Например, если текстовый файл а: \data. txt содержит следующие строки:

23 15 45 28 56 71

то в результате выполнения инструкций:

 

AssignFile(f, 'a:\data.txt');

Reset(f); // открыть для чтения

read(f, а); read(f, b, с); read(f, d);

значения переменных будут следующими: а = 23, b = 15, с = 45, d = 28.

Отличие инструкции readln от read состоит в том, что после считывания из файла очередного числа и присвоения полученного значения переменной, имя которой стоит последним в списке параметров инструкции readln, указатель чтения из файла автоматически перемещается в начало следующей строки файла, даже в том случае, если за прочитанным числом есть еще числа.

Поэтому в результате выполнения инструкций:

 

AssignFile(f,'a:\data.txt'); Reset(f); readln(f, a);readln(f, b, c); readin(f, d);

 

значения переменных будут следующими: а = 23, b = 45, с = 28, d = 56.

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

Чтение строк

В программе строковая переменная может быть объявлена с указанием длины или без нее.

Например:

stroka1:string[10]; stroka2:string;

При чтении из файла значения строковой переменной, длина которой явно задана в ее объявлении, считывается столько символов, сколько указано в объявлении, но не больше, чем в текущей строке.

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

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

Пусть, например, текстовый файл f reinds. txt содержит строки:

Косичкина Маша Васильев Антон Цой Лариса

 

В табл. 19 приведено несколько вариантов объявления переменных, инструкции чтения из файла freinds.txt и значения переменных после выполнения инструкций чтения.

Таблица 19 - Примеры чтения строк из файла

Объявление переменных и инструкция чтения переменных из файла Значение переменных после чтения из файла
fam: string[15] name: string[10] Readln (f, fam, name) f am= ' Косичкина name= ' Маша
fam, name: string; Readln (f, fam, name) fam= ' Косичкина Маша ' name= ' '
drug: string[80] Readln (f, drug) drug =' Косичкина Маша'
       

Конец файла

Пусть на диске есть некоторый текстовый файл. Нужно в диалоговое окно вывести содержимое этого файла. Решение задачи довольно очевидно: надо открыть файл, прочитать первую строку, затем вторую, третью и т. д. до тех пор, пока не будет достигнут конец файла. Но как определить, что прочитана последняя строка, достигнут конец файла?

Для определения конца файла можно воспользоваться функцией EOF (End of File — конец файла). У функции EOF один параметр — файловая переменная. Значение функции EOF равно False, если прочитанный элемент данных не является последним в файле, т. е. возможно дальнейшее чтение. Если прочитанный элемент данных является последним, то значение EOF равно True.

Значение функции EOF можно проверить сразу после открытия файла. Если при этом оно окажется равным True, то это значит, что файл не содержит ни одного элемента данных, т. е. является пустым (размер такого файла равен нулю).

В листинге 4 приведена процедура, которая выполняет поставленную задачу. Она читает строки из файла, имя которого ввел пользователь во время работы программы, и выводит эти строки в поле Memo. Окно программы приведено на Рисунок 15 - Окно программы Чтение из файла.

Рисунок 15 - Окно программы Чтение из файла

 

Листинг.2. Чтение из файла

unit rd_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Button2: TButton;

Edit1: TEdit;

Memo1: TMemo;

Button1: TButton;

procedure Button2Click(Sender: TObject);

procedure ButtonlClick(Sender: TObject); private

{ Private declarations ) public

{ Public declarations } end;

var

Form1: TForml;

implementation

{$R *.dfm}

// щелчок на кнопке Открыть

procedure TForm1.Button1Click(Sender: TObject);

var

f: TextFile; // файл fName: String[80]; // имя файла

buf: String[80]; // буфер для чтения из файла

begin

fName := Edit1.Text; AssignFile(f, fName); {$!-}

Reset(f); // открыть для чтения {$I+}

if IOResult <> 0 then begin

MessageDlgt'Ошибка доступа к файлу ' + fName,

mtError,[mbOk],0); exit; end;

// чтение из файла

while not EOF(f) do begin

readln(f, buf); // прочитать строку из файла

Memo1.Lines.Add(buf); // добавить строку в поле Memo1

end;

CloseFile(f); // закрыть файл

end;

// щелчок на кнопке Сохранить — запись в файл

procedure TForml.Button2Click(Sender: TObject);

var

f: TextFile; // файл

fName: String[80]; // имя файла

i: integer/; begin

fName := Edit1.Text; AssignFile(f, fName);

Rewrite(f); // открыть для перезаписи

// запись в файл

for i:=0 to Memo1.Lines.Count do // строки нумеруются с нуля

writeln(f, Memo1.Lines[i]);

CloseFile(f); // закрыть файл

MessageDlg('Данные записаны в файл ',mtlnformation,[mbOk],0);

end;

end.

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

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

Добавление очередной прочитанной из файла строки в поле Memo выполняется применением метода Add к свойству Lines.

 

Лекция 12









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.