Версия для печати

Задача 582 на Pascal

Оцените материал
(1 Голосовать)


Задача 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 - для цикла.

Прочитано 8729 раз