максимального и минимального по абсолютной величине. (учесть, что |max| u |min| могут быть несколько)
нужно написать все с процедурами и функцией. Сделайте пожалучста кто-нибудь. А то я не знаю как описывать процедуры с функциями...

sr := 0;
count := 0;
for i := 1 to n do
if (x[i] <> min) and (x[i] <> max) then begin
sr := sr + x[i];
inc(count);
end;
if count <> 0 then sr := sr / count;
type
TArr = array [1..100] of integer;
...
function Min(a : TArr; n : integer) : integer;
var
i,Amin : integer;
begin
Amin := maxint;
for i := 1 to n do
if abs(a[i]<abs[Amin]) then Amin := abs(a[i]);
Min := Amin;
end;
const
n = 10;
type
buffer = array[1 .. n] of integer;
procedure sort(var ar: buffer; n: integer);
var i, j, T: integer;
begin
for i := 1 to n do
for j := n downto i + 1 do
if ar[Pred(j)] > ar[j] then begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
end
end;
procedure get_ranges(const arr: buffer;
var start, finish: integer);
begin
start := 1; finish := n;
while (arr[start + 1] = arr[start]) and (start < n) do
inc(start); inc(start);
while (arr[finish - 1] = arr[finish]) and (finish > 1) do
dec(finish); dec(finish);
end;
function get_average(const arr: buffer;
start, finish: integer): real;
var
i: integer;
s: real;
begin
s := 0;
for i := start to finish do s := s + arr[i];
get_average := s / (finish - start + 1);
end;
var
i, st, fn: integer;
const
a: buffer = (1, 9, 4, 3, 5, 6, 8, 9, 9, 1);
begin
sort(a, n);
get_ranges(a, st, fn);
writeln('average = ', get_average(a, st, fn) : 10 : 5);
end.