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