![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Листинг 5.2. Ввод и обработка массива целых чисел
unit getar_; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; Type TForm1 = class(TForm) Label1: TLabel; StringGridl: TStringGrid; Button1: TButton; Label2: TLabel; procedure ButtonlClick(Sender: TObject); private { Private declarations } Public { Public declarations } End; Var Form1: TForml; Implementation {$R *.dfm} procedure TForml.ButtonlClick(Sender: TObject); Var a: array[1..5] of integer; // массив summ: integer; // сумма элементов sr: real; // среднее арифметическое i: integer; // индекс Begin // ввод массива // считаем, что если ячейка пустая, то соответствующий // ей элемент массива равен нулю for i: = 1 to 5 do if Length(StringGridl.Cells[i-1, 0]) < > 0 then a[i]: = StrToInt(StringGridl.Cells[i-1, 0]) else a[i]: = 0; // обработка массива summ: = 0; for i: =1 to 5 do summ: = summ + a[i]; sr: = summ / 5; // вывод результата Label2.Caption: ='Сумма элементов: ' + IntToStr(summ)+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr); End; End. После пробных запусков программы возникает желание внести изменения в процесс ввода массива. Так, было бы неплохо, чтобы курсор автоматически переходил в следующую ячейку таблицы, например, в результате нажатия клавиши < Enter>. Сделать это можно при помощи процедуры обработки события onKeyPress. На эту же процедуру можно возложить задачу фильтрации вводимых в ячейку таблицы данных. В нашем случае надо разрешить ввод в ячейку только цифр. Текст процедуры обработки события OnKeyPress приведен в листинге 5.3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.
Листинг 5.3. Процедура обработки события OnKeyPress procedure TForm1.StringGridlKeyPress(Sender: TObject; var Key: Char); Begin case Key of #8, '0'..'9':; // цифры и клавиша < Backspace> #13: // клавиша < Enter> if StringGridl.Col < StringGridl.ColCount — 1 then StringGridl.Col: = StringGridl.Col + 1; else key: = Chr(0); // остальные символы запрещены End; End; Если нужно ввести массив дробных чисел (a: array [1..5] of real), то процедура обработки события OnKeyPress несколько усложнится, т. к. помимо цифр допустимыми символами являются символ-разделитель (запятая или точка — зависит от настройки Windows) и минус. С целью обеспечения некоторой дружественности программы по отношению к пользователю можно применить трюк: подменить вводимый пользователем неверный разделитель верным. Определить, какой символ-разделитель допустим в текущей настройке Windows, можно, обратившись к глобальной переменной Decimaiseparator. В листинге 5.4 приведен текст модуля приложения ввода и обработки массива дробных чисел. Процедура обработки события OnKeyPress обеспечивает ввод в ячейку таблицы только допустимых при записи дробного числа символов.
|