Найдите фамилии двух работников с наибольшей зарплатой - PascalABC.NET
Формулировка задачи:
Нужно написать программу. Только не очень мудрено
Ведомость на зарплату представлена как две таблицы. Одна содержит фамилии работников цеха, а вторая — их зарплату за текущий месяц.
1)Найдите фамилию работника, зарплата которого наименее отклоняется от средней зарплаты всех работников за текущий месяц.
2)Найдите фамилии двух работников с наибольшей зарплатой.
3)Удалите из ведомости на зарплату сведения о работнике, зарплата которого минимальна.
Это всё в одной программе.
Решение задачи: «Найдите фамилии двух работников с наибольшей зарплатой»
textual
Листинг программы
type sotr=record
fam:string[20];
zp:real;
end;
var
a:array of sotr;
i,j,l,t:integer;
s:real;
begin
repeat
write('введите количество работников(>1):');
readln(l);
until l>1;
SetLength(a,l);
s:=0.0;
for i:=0 to l-1 do with a[i] do begin
writeln('Сотрудник ',i+1);
write('Фамилия:');readln(fam);
write('Зарплата:');readln(zp);
s:=s+zp;
end;
s:=s/l;
for i:=0 to l-2 do
for j:=i to l-1 do
if a[i].zp<a[j].zp then Swap(a[i],a[j]);
for i:=0 to l-1 do WritelnFormat('{0} - {1}',a[i].fam,a[i].zp);
writeln('Средняя зп:',s:0:2);
write('работник, зарплата которого наименее отклоняется от средней зарплаты всех работников за текущий месяц:');
t:=0;
for i:=1 to l-1 do if abs(a[i].zp-s)<abs(a[t].zp-s) then t:=i;
writeln(a[t].fam);
writelnformat('два работников с наибольшей зарплатой: {0} и {1} ', a[0].fam,a[1].fam);
writelnformat('Удален сотрудник {0} c заработной платой {1}',a[l-1].fam,a[l-1].zp);
l:=l-1;
SetLength(a,l);
for i:=0 to l-1 do WritelnFormat('{0} - {1}',a[i].fam,a[i].zp);
end.
Объяснение кода листинга программы
В данном коде используется язык программирования PascalABC.Net.
Сначала объявляется структура sotr, которая представляет собой запись с полями fam (фамилия работника) и zp (зарплата работника).
Затем объявляются следующие переменные:
a- массив, который будет содержать несколько структурsotr;i,j,l,t- целочисленные переменные, которые будут использоваться в цикле и для индексации элементов массиваa;s- переменная для хранения суммы всех зарплат работников;r- переменная для хранения количества работников. Далее следует блок повторяющегося ввода, который продолжается до тех пор, пока пользователь не введет количество работников больше 1. Затем происходит инициализация массиваaзаданным количеством работников и обнуление переменнойs. Цикл проходит по каждому работнику и выводит его фамилию и зарплату. Значение переменнойsувеличивается на значение зарплаты текущего работника. После этого происходит вычисление средней зарплаты и поиск работника, зарплата которого наименее отклоняется от средней зарплаты. Затем выводится фамилия этого работника, две строки для ввода фамилий двух работников с наибольшей зарплатой и сообщение об удалении последнего работника из массива. Код заканчивается выводом всех фамилий и зарплат работников в консоль.