Задача 582 на Pascal
Условие задачи - из списка задач к Госэкзаменам по предмету "Технология разработки программных продуктов".
Задача №1. Создать файл, содержащий сведения о месячной заработной плате рабочих завода. Каждая запись содержит поля: фамилия рабочего, наименование цеха, заработной платы за месяц. Количество записей 2-3. Вычислить общую сумму выплат за месяц по цеху X, а также среднемесячный заработок этого цеха.
TYPE
tip1=record
fio,factory:string[20]; {ФИО, Цех } zp:real; {зароботная плата} end;
tip2=record
factory:string[20]; { Цех } all_zp,average_zp:real; {вся зарплата, средняя з/п} end;
VAR
d:array[1..10]of tip1;
i,j,max_d:integer;
r:array[1..10]of tip2;
count:array[1..10]of byte;
{ввод данных с клавиатуры} PROCEDURE input_data;
BEGIN
writeln('* * * Ввод данных * * *'); write('Введите количество записей: '); readln(max_d);
writeln;
for i:=1 to max_d do
begin
writeln('Заполнение записи ',i);
write('Введите ФИО: '); readln(d[i].fio);
write('Введите наименование цеха: ');
readln(d[i].factory);
write('Введите заработную плату в месяц: ');
readln(d[i].zp); writeln;
end;
END;
{расчет} PROCEDURE raschet;
var
i1:integer;
flag:boolean;
BEGIN
{----------------------------}
r[1].factory:=d[1].factory;
j:=2;
for i:=1 to max_d do
begin
flag:=true;
for i1:=1 to j do if d[i].factory=r[i1].factory then flag:=false;
if flag then begin r[j].factory:=d[i].factory;inc(j);end;
end;
dec(j); {----------------------------} {расчет суммы всех выплат} for i:=1 to max_d do
for i1:=1 to j do
if d[i].factory=r[i1].factory then
begin
r[i1].all_zp:=r[i1].all_zp+d[i].zp;
inc(count[i1]);
end;
{расчет среднемесячного зароботка} for i:=1 to j do r[i].average_zp:=r[i].all_zp/count[i];
END; {вывод результатов на экран} PROCEDURE view_result;
BEGIN
for i:=1 to j do
begin
writeln('Наименование цеха: ',r[i].factory); writeln('Общая сумма выплат: ',r[i].all_zp:5:1); writeln('Среднемесячный заработок: ',r[i].average_zp:5:1); writeln;
end; END; {сохранение данных в файл} PROCEDURE save_d;
var
f:file of tip1;
BEGIN
assign(f,'data.dat');
rewrite(f);
for i:=1 to max_d do write(f,d[i]);
close(f); END; {чтение данных из файла} PROCEDURE read_d;
var
f:file of tip1;
BEGIN
assign(f,'data.dat');
reset(f);
max_d:=0;
while not eof(f) do
begin
inc(max_d);
read(f,d[max_d]);
end; close(f); END; {*********** основная программа *************} BEGIN
input_data;
raschet;
view_result;
save_d; END. |
· переменная d - для данных;
· переменная r - для хранения расчетов данных;
· переменная count - для подсчета количества одинаковых цехов;
· переменные i,j - для цикла.