Подсчет среднего арифметического без учета максимального и минимального значения
Категория: Delphi/Pascal
2011-12-26 22:28:35
Размер массива должен быть введен пользователем.
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
Поделиться: