Подсчет среднего арифметического без учета максимального и минимального значения — Delphi(Делфи)

Размер массива должен быть введен пользователем.

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.

Leave a Comment

47 − 40 =