|
Устройства ввода. Ввод с клавиатуры. Реакция на действия пользователяУстройства ввода К устройствам ввода можем отнести следующие: клавиатура, сканер, планшет. Клавиатура компьютера — устройство для ввода информации в компьютер и подачи управляющих сигналов. Содержит стандартный набор клавиш печатной машинки и некоторые дополнительные клавиши — управляющие и функциональные клавиши, клавиши управления курсором и малую цифровую клавиатуру. Все символы, набираемые на клавиатуре, немедленно отображаются на мониторе в позиции курсора (курсор — светящийся символ на экране монитора, указывающий позицию, на которой будет отображаться следующий вводимый с клавиатуры знак). Рисунок 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 - Примеры чтения строк из файла
Конец файла Пусть на диске есть некоторый текстовый файл. Нужно в диалоговое окно вывести содержимое этого файла. Решение задачи довольно очевидно: надо открыть файл, прочитать первую строку, затем вторую, третью и т. д. до тех пор, пока не будет достигнут конец файла. Но как определить, что прочитана последняя строка, достигнут конец файла? Для определения конца файла можно воспользоваться функцией 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 Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования... Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|