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