А здесь - вариант той же программы, но с записями. Сравните, обратив особое внимание на реализацию метода пузырька:
Код:
program otchet;
uses crt;
type
Base=Record
n:string;
v:real;
f:real;
k:real;
end;
var
Predp:array [1..100] of Base;
Pr:Base;
i,im,j,m:integer;
km,s,sum,min:real;
begin
clrscr;
write('Vvedite kolichestvo predpriyatiy= ');
readln(m);
for i:=1 to m do
with Predp[i] do
begin
write('Vvedite nazvanie predpriyatiya ',i,' = ');
readln(n);
write('vvedite planoviy obiom roznichnogo tovarooborota= ');
readln(v);
write('Vvedite fakticheskiy obiom roznichnogo tovarooborota= ');
readln(f);
end;
s:=0;
km:=-999;
for i:=1 to m do
with Predp[i] do
begin
k:=f/v*100;
if k<100 then s:=s+f;
if k>km then
begin
km:=k;
im:=i;
end;
end;
writeln;
writeln('naimen. predpr, plan, fact, proc:');
for i:=1 to m do
with Predp[i] do
begin
write(n);
for j:=Length(n)+1 to 40 do write(' ');
writeln(v:10:2,f:10:2,k:10:2);
end;
writeln;
writeln('naib proc = ',km:10:2,' u predpr ',Predp[im].n);
readln;
sum:=0;
for i:=1 to m do
If Predp[i].f>=Predp[i].v then sum:=sum+Predp[i].f;
Write('Summa obioma tovarooborota predpriatii, vipolnivshih plan = ',sum:8:2);
readln;
min:=32000;
for i:=1 to m do
If min>Predp[i].f then min:=Predp[i].f;
Write('naim obioma tovarooborota = ',min:8:2);
readln;
writeln;
for j:=1 to m-1 do
for i:=1 to m-j do
if Predp[i].k>Predp[i+1].k then
begin
Pr:=Predp[i];
Predp[i]:=Predp[i+1];
Predp[i+1]:=Pr;
end;
writeln;
writeln('sort po proc ');
for i:=1 to m do
with Predp[i] do
begin
write(n);
for j:=Length(n)+1 to 40 do write(' ');
writeln(k:6:2);
end;
readln;
end.