1) Название филиала; 2) Плановый объем товарооборота филиала;3) Фактический объем товарооборота филиала;4) Среднесписочное количество работников филиала. Постановка задачи:- Pascal(Паскаль)

1) Отклонение фактического от планового объема товарооборота каждого филиала; 2) Количество филиалов перевыполнивших план;3) Начисление премий (пропорционально количеству работников филиала);4) Филиал с наименьшим количеством работников;5) Филиал, обеспечивающий наименьший товарооборот;6) Вывод информации о филиалах, в названии которых есть только буквы;7) Упорядочить филиалы по убыванию количества работников.

uses crt;
type
Tfil=record{тип запись-филиалы}
     naz:string[20];{назв.}
     pln:word;{план}
     fkt:word;{факт}
     kol:word;{кол. раб.}
     prm:longint;{премия}
     end;
var sp:array[1..50] of Tfil;{массив записей, список филиалов со всеми данными}
    bf:Tfil;{буфер для сортировки}
    kp:byte;{кол. вып. план}
    mnk:word;{мин. кол. раб.}
    p:word;{премия на 1 чел}
    imnk:byte;{индекс филиала с мин.кол.раб.}
    mnt:word;{мин. товарооборот}
    imnt:byte;{индекс филиала с мин. т/о}
    kb:byte;{количество букв в названии}
    n,i,j:byte;{размер массива, счетчики циклов}
    c:char;{символ для окончания ввода}
begin
clrscr;
writeln('Введите данные, окончание ввода Esc.');
n:=0;
repeat
n:=n+1;
writeln('Филиал ',n);
write('  Название: ');readln(sp[n].naz);
write('  Плановый объем: ');readln(sp[n].pln);
write('  Фактический объем: ');readln(sp[n].fkt);
write('  Количество работников: ');readln(sp[n].kol);
c:=readkey;{ждем нажатия клавиши, если любая, продолжаем}
until c=#27;{если Esc, заканчиваем}
clrscr;{очищаем экран}
writeln('Полный список филиалов:':30);
writeln;
writeln('-------------------------------------------');
writeln('|  Название  |  План  |  Факт  | Кол. раб.|');
writeln('-------------------------------------------');
for i:=1 to n do
  begin
   write('| ',sp[i].naz);
   gotoXY(14,whereY);{14-позиция в строке,whereY-номер текущей строки }
   write('| ',sp[i].pln);
   gotoXY(23,whereY);
   write('| ',sp[i].fkt);
   gotoXY(32,whereY);
   write('| ',sp[i].kol);
   gotoXY(43,whereY);
   write('|');
   writeln;
  end;
writeln('-------------------------------------------');
mnk:=sp[1].kol;imnk:=1;
for i:=2 to n do
if sp[i].kol<mnk then {находим индекс с мин. кол. раб.}
  begin
   mnk:=sp[i].kol;{мин. кол}
   imnk:=i;{индекс}
  end;
writeln('Наименьшее количество работников в филиале ',sp[imnk].naz,' = ',mnk);
mnt:=sp[1].fkt;imnt:=1;{тоже с товарооборотом}
for i:=2 to n do
if sp[i].fkt<mnt then
  begin
   mnt:=sp[i].fkt;
   imnt:=i;
  end;
writeln('Наименьший товарооборот в филиале ',sp[imnt].naz,' = ',mnt);
readln;
clrscr;
writeln('Отклонение от плана:':30);
writeln;
writeln('---------------------------------------------');
writeln('|  Название  |  План  |  Факт  | Отклонение |');
writeln('---------------------------------------------');
kp:=0;
for i:=1 to n do
  begin
   write('| ',sp[i].naz);
   gotoXY(14,whereY);
   write('| ',sp[i].pln);
   gotoXY(23,whereY);
   write('| ',sp[i].fkt);
   gotoXY(32,whereY);
   if sp[i].pln>sp[i].fkt then{если план больше факта}
   write('|   -',sp[i].pln-sp[i].fkt)
   else if sp[i].pln<sp[i].fkt then{если факт больше плана}
     begin
       kp:=kp+1;{считаем перевыполнивших}
       write('|   +',sp[i].fkt-sp[i].pln);
     end
   else write('|     0');{если одинаковые}
   gotoXY(45,whereY);
   write('|');
   writeln;
  end;
writeln('---------------------------------------------');
writeln('Перевыполнили план=',kp);
readln;
clrscr;
writeln('Список филиалов, в названии которых только буквы:':40);
writeln;
writeln('-------------------------------------------');
writeln('|  Название  |  План  |  Факт  | Кол. раб.|');
writeln('-------------------------------------------');
i:=1;
while i<=n do
  begin
   kb:=0;
   for j:=1 to length(sp[i].naz)do{смотрим название}
   if sp[i].naz[j] in ['A'..'Z','a'..'z','А'..'п','р'..'ё'] then{если буква, считаем}
   kb:=kb+1;
   if kb=length(sp[i].naz)then{если все буквы, выводим}
     begin
      write('| ',sp[i].naz);
      gotoXY(14,whereY);
      write('| ',sp[i].pln);
      gotoXY(23,whereY);
      write('| ',sp[i].fkt);
      gotoXY(32,whereY);
      write('| ',sp[i].kol);
      gotoXY(43,whereY);
      write('|');
      writeln;
      i:=i+1;{к следующему}
    end
  else i:=i+1;{если есть не буква, сразу к следующему}
 end;
writeln('-------------------------------------------');
readln;
clrscr;
write('Размер премии 1 работника p=');
readln(p);
for i:=1 to n do
if sp[i].fkt-sp[i].pln>=0 then sp[i].prm:=p*sp[i].kol{если выполнили план, начисляем премию}
else sp[i].prm:=0;
for i:=1 to n-1 do{сортировка пузырьком по убыванию поля кол. раб.}
for j:=i+1 to n do
if sp[i].kol<sp[j].kol then
  begin
    bf:=sp[i];
    sp[i]:=sp[j];
    sp[j]:=bf;
  end;
writeln('Список филиалов, упорядоченный по убыванию количества работников:');
writeln;
writeln('----------------------------------------------------');
writeln('|  Название  |  План  |  Факт  | Кол. раб.| Премия |');
writeln('----------------------------------------------------');
for i:=1 to n do
  begin
   write('| ',sp[i].naz);
   gotoXY(14,whereY);
   write('| ',sp[i].pln);
   gotoXY(23,whereY);
   write('| ',sp[i].fkt);
   gotoXY(32,whereY);
   write('| ',sp[i].kol);
   gotoXY(43,whereY);
   write('| ',sp[i].prm);
   gotoXY(52,whereY);
   write('|');
   writeln;
  end;
writeln('----------------------------------------------------');
readln
end.

Leave a Comment

+ 64 = 70