Размер массива должен быть введен пользователем.
procedure TForm1.Button1Click(Sender: TObject);
var
n: integer;
begin
n := strtoint(edit1.text); // создаем таблицу, куда будем заносить
StringGrid1.ColCount := 1; // исходные данные
StringGrid1.RowCount := n;
end;
// Функция обеспечивает ввод в ячейку только допустимых символов
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#8, '0' .. '9':
; // цифры и <Back Space>
#13: // клавиша <Enter>
if StringGrid1.Col < StringGrid1.ColCount - 1 then
StringGrid1.Col := StringGrid1.Col + 1;
'.', ',': // разделитель целой и дробной частей числа
begin
if Key <> DecimalSeparator then
Key := DecimalSeparator; // заменим разделитель на допустимый
if Pos(StringGrid1.Cells[StringGrid1.Col, 0], DecimalSeparator) <> 0
then
Key := Chr(0); // запрет ввода второго разделителя
end;
'-': // минус можно ввести только первым символом,
// т.е. когда ячейка пустая
if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <> 0 then
Key := Chr(0);
else // остальные символы запрещены
Key := Chr(0);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
a: array [1 .. 50] of real; // массив
summ: real; // сумма элементов
x, sr: real; // буфер и среднее арифметическое
n, i, j: integer; // размерность массива,индексы
begin
n := strtoint(edit1.text); // размерность массива
for i := 1 to n do
a[i] := StrToFloat(StringGrid1.Cells[0, i - 1]);
// создаем массив из таблицы
for i := 1 to n - 1 do // сортируем его методом "пузырька"
for j := 1 to n - 1 do // по возрастанию
if a[j] > a[j + 1] then
begin
x := a[j];
a[j] := a[j + 1];
a[j + 1] := x;
end;
// обработка массива
summ := 0;
for i := 2 to n - 1 do
summ := summ + a[i];
sr := summ / (n - 2);
// вывод результата в форматированном виде
edit2.text := 'Среднее арифметическое: ' + FloatToStrF(sr, ffFixed, 5, 2);
end;
end.