Решенные задачи на языке Паскаль
Условие задачи - из списка задач к Госэкзаменам по предмету "Технология разработки программных продуктов".
Задача №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 - для цикла.
Скачать исходник