народ, помогите плиз решить задачу по паскалю!!!! курсовая горит!!!!

Ответить
Freem
Сообщения: 2
Зарегистрирован: 09 май 2007, 13:42

Народ, помогите плиз решить задачу!!!
В бухгалтерии предприятия имеется ведомость сумм заработанных сотрудниками в течение месяца (суммы исчисляются в тыс. руб.). Подсчитать общий заработок каждого сотрудника за весь месяц. То есть вводишь с клавиатуры фамилия сотрудников, затем их зарплаты. И если встречаются несколько одинаковых фамилий, то их зарплаты надо суммировать. Как вот в этом примере:

Исходная ведомость:
Фамилия Заработок
Непейвода 800
Тарбеев 300
Тарбеев 425
Непейвода 250
Лесков 850
Тарбеев 100

Итоговая ведомость за месяц:
Фамилия Заработок
Непейвода 1050
Тарбеев 825
Лесков 850

Код:

program x_z;
uses crt;
Type MyRec = Record
surname:string;
money:integer;
end;
Const max = 4;
var ms:array [1..max] of MyRec;
a:array [1..max] of integer;
i,j,k,n,sum:integer;
b:string;
begin
clrscr;
for i:=1 to max do begin
writeln ('Vvedite phamiliiu ',i,' -ogo rabotnika');
readln (ms.surname);
writeln ('Vvedite z/p ',i,' -ogo rabotnika');
readln (ms.money);
n:=i;
for k:=1 to n do begin
if ms.surname=ms[k].surname then begin
sum:=ms[k].money+ms.money;
n:=n-1;
writeln ('Summa = ',sum);
end;
end;
end;
readln;
end.


Пытался сделать, но не получилось!!!!!!!!!! Работает неправлильно!!!!!!!!!!!!!! Заранее буду благодарен!!!!!!!!!!
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Здесь тебе нужно:
1) Добавить в MyRec переменную sum: integer, так как у тебя в программе одна сумма для всех рабочих.
2) Отсеять показ работников, имеющих одинаковые имена.
3) Привести в порядок програмный код. (грязненько-) ;)
Вот рабочий код:

Код: Выделить всё

Type MyRec = Record
surname:string;
money:integer;
sum: integer;
end;
Const max = 4;
var ms:array [1..max] of MyRec;
a:array [1..max] of integer;
s: array [1..max] of string; 
{список с именами работников, чьи зарплаты уже подсчитаны}
i,j,k:integer;
begin
for i:=1 to max do begin
writeln ('Фамилия ',i,' работника');
readln (ms[i].surname);
writeln ('Зарплата ',i,' работника');
readln (ms[i].money);
end;
writeln('----------------------');
for i:=1 to max do begin
for k:=1 to max do begin
if (ms[i].surname=ms[k].surname) and (ms[i].surname<>s[k]) then begin
ms[i].sum:=ms[k].money+ms[i].sum;
s[k]:=ms[i].surname; {занесём пользователя в список}
end;
end;
if ms[i].sum<>0 then writeln(ms[i].surname,'-',ms[i].sum); 
{безденежные работники отображаться не будут}
end;
readln;
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Freem
Сообщения: 2
Зарегистрирован: 09 май 2007, 13:42

большое спасибо тебе за помощь!!!!!!!!!!! ты прям меня спас!!!!!!! незнаю, как тебя благодарить!!!! :)
Ответить