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

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

code: #pascal
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.

автор: puporev

Поделиться:

Похожие статьи: