Подсчитать, сколько элементов стека превышает среднее значение от всех его элементов - Free Pascal
Формулировка задачи:
Подсчитать, сколько элементов стека, построенного из случайных чисел, превышает среднее значение от всех элементов стека.
Программно стек реализуется в виде однонаправленного списка с одной точкой входа (вершиной стека).
Решение задачи: «Подсчитать, сколько элементов стека превышает среднее значение от всех его элементов»
textual
Листинг программы
program pr;
type
prec = ^trec;
trec = record
num: integer;
next: prec;
end;
var
stack: prec;
procedure push(an: integer);
var
p: prec;
begin
new(p);
p^.num := an;
p^.next := stack;
stack := p;
end;
function pop(var an: integer): boolean;
var
p: prec;
begin
pop := (stack <> nil);
if stack <> nil then
begin
an := stack^.num;
p := stack;
dispose(p);
end;
end;
procedure printstack;
var
p: prec;
begin
p := stack;
while p <> nil do
begin
writeln(p^.num);
p := p^.next;
end;
end;
function summstack: integer;
var
p: prec;
sum: integer;
begin
sum := 0;
p := stack;
while p <> nil do
begin
sum := sum + p^.num;
p := p^.next;
end;
summstack := sum;
end;
function coutstack( const av: real): integer;
var
p: prec;
cout: integer;
begin
cout := 0;
p := stack;
while p <> nil do
begin
if p^.num > av then
begin
cout := cout + 1;
end;
p := p^.next;
coutstack := cout;
end;
end;
var
x, n, i, s, k: integer;
avg: real;
begin
stack := nil;
randomize;
writeln('Введите количество элементов для заполнения стека');
readln(n);
for i := 1 to n do
begin
x := random(21);
push(x);
end;
writeln;
printstack;
writeln;
s := summstack;
avg := s / n;
writeln('Среднее значение элементов списка: ', avg);
k := coutstack(avg);
writeln('Количество элементов списка, превышающих среднее значение:', k);
end.