Options.AlwaysShowEditing=true
Options.goTabs=true
Значения свойств Height и Width следует при помощи мыши установить такими, чтобы размер компонента был равен размеру строки.
Приложение должно иметь следующий вид:
Label1
StringGrid
Label2
Label3
Button3
Button2
Button1
Процедура обработки события OnClick (клавиша Вычислить) представлена ниже:
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..10] of integer;
sum,i:integer;
sr:real; s:string;
begin s:='';
for i:=1 to 10 do
ввод массива begin
if length(StringGrid1.Cells[i-1,0])0
then a[i]:=StrToInt(StringGrid1.Cells[i-1,0])
else a[i]:=0;
вывод массива s:=s+StringGrid1.Cells[i-1,0]+' ';
Label2.Caption:='Введенный массив'+#13+s+#13;
end;
обработка массива sum:=0;
for i:=1 to 10 do sum:=sum+a[i];
sr:=sum/10;
вывод результата Label3.Caption:='сумма элементов:'+IntToStr(sum)+
#13+'Среднее арифметическое:'+FloatToStr(sr)
end;
Текст процедуры обработки события OnKeyPress приведен ниже. Процедура осуществляет контроль вводимых данных, разрешая вводить в ячейку таблицы только цифры. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы при нажатии клавишиEnter>. Однако нужно учитывать, что колонки и строки таблицы нумеруются с нуля.
Procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
#8,'0'..'9':;
#13: if StringGrid1.Col
then StringGrid1.Col:=StringGrid1.Col+1;
else key:=Chr(0);
end;
end;
При нажатии клавиши Сброс происходит очистка полей ввода:
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
For i:=1 to 10 do StringGrid1.Cells[i-1,0]:='';
Label2.Caption:=’ ‘;
Label3.Caption:=’ ‘;
end;
При нажатии клавиши Выход происходит закрытие приложения:
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.Close
end;
Использование компонента Memo.
В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент Memo позволяет вводить текст, состоящий из достаточно большого количества строк, поэтому его удобно использовать для ввода символьного массива. Компонент Memo добавляется в форму обычным образом. Значок компонента находится на вкладке Standart (Стандартная).
Свойство Lines определяет массив, каждый элемент которого содержит одну строку находящегося в поле Memo текста, а свойство Lines.Count определяет количество строк текста в поле Memo.
При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу Enter>. Для того, чтобы курсор был виден в поле ввода компоненты Memo, надо установить у свойства OnRead значение False, а у свойства Enabled значение True.
Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с нуля).
Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть так:
for i:=1 to 10 do a[i]:=Memo1.Lines[i-1];
Для ввода числового массива надо использовать функции преобразования StrToInt или StrToFloat:
for i:=1 to 10 do a[i]:=StrToInt(Form1.Memo1.Lines[i-1]);
for i:=1 to 10 do a[i]:=StrToFloat(Form1.Memo1.Lines[i-1]);
Приложение должно иметь следующий вид:
Label1
Окно
ShowMessage
Memo1
Batton3
Batton2
Batton1
Процедура обработки события OnClick (клавиша Вычислить) представлена ниже:
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..10] of integer;
sum,i,n:integer;
sr:real; s:string;
begin
s:='';
n:=Memo1.Lines.Count;
if n=0 then
begin ShowMessage('Исходные данные не введены!');
Exit;
end;
if n>10 then
begin ShowMessage('Количество строк превышает размер массива.');
n:=10;
end;
for i:=1 to n do
begin
a[i]:=StrToInt(Form1.Memo1.Lines[i-1]);
s:=s+Form1.Memo1.Lines[i-1]+#13;
end;
s:='Введенный массив'+#13+s+#13;
sum:=0;
for i:=1 to n do sum:=sum+a[i];
sr:=sum/n;
s:=s+'сумма элементов:'+IntToStr(sum)+
#13+'Среднее арифметическое:'+FloatToStr(sr);
ShowMessage(s);
end;
Процедура TForm1.Button1Click сначала проверяет, есть ли в поле Memo1 текст. Если текст есть (в этом случае значение свойства Lines.Count больше нуля), то процедура сравнивает количество введенных строк и размер массива. Если это количество превышает размер массива, то программа выдает сообщение об этом и изменяет значение n, тем самым подготавливает ввод только первых 10 строк. Если текста нет, т.е. n=0, то выдается сообщение об ошибке и программа завершает свою работу.
Веденный массив и результаты работы программы выдаются в отдельное окно функцией ShowMassage.
Текст процедуры обработки события OnKeyPress приведен ниже. Процедура осуществляет контроль вводимых данных, разрешая вводить в ячейку таблицы только цифры.
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin Case key of
'0'..'9',#8,#13:;
else key:=chr(0);
end;
end;
При нажатии клавиши Сброс происходит очистка полей ввода при помощи события Clear:
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
При нажатии клавиши Выход происходит закрытие приложения:
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
Задание:
-
Напишите программу поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов.
-
Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 – баллы, полученные на ЕНТ. Напишите программу, которая подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен.
Лабораторная работа №7
Тема: Поиск элементов массива. Сортировка массивов.
Цель: Сформировать практические навыки: реализация процессов обработки одномерных и двумерных массивов; построение однооконных интерфейсов с помощью визуального компонента «окно» (класс TForm) и визуальных компонентов панели инструментов Standard: «метка» (класс TLabel), «редактор» (класс TEdit), «кнопка» (класс TButton), (класс TStringGrid).
|