Показать сообщение отдельно
Старый 21.05.2011, 20:26   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот Вам точно рабочий вариант, слегка даже с косметикой. Основные недостатки Вашей программы:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070