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.