Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 09.05.2007, 00:38   #1
Freem
Новичок
Джуниор
 
Регистрация: 09.05.2007
Сообщений: 1
Восклицание Паскаль. Списки

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

Исходная ведомость:
Фамилия Заработок
Непейвода 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[i].surname);
       writeln ('Vvedite z/p ',i,' -ogo rabotnika');
       readln (ms[i].money);
       n:=i;
     for k:=1 to n do begin
       if ms[i].surname=ms[k].surname then begin
       sum:=ms[k].money+ms[i].money;
       n:=n-1;
       writeln ('Summa = ',sum);
       end;
       end;
       end;
     readln;
     end.
Пытался сделать, но не получилось!!!!!!!!!! Работает неправлильно!!!!!!!!!!!!!!
Freem вне форума   Ответить с цитированием
Старый 10.05.2007, 09:40   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Для начала посоветую создать не статический, а динамический массив или set и производить чтение до опеределенного момента (например, пока пользователь не введет 'exit').
Вот примерный алгоритм:
1. Читаем фамилию
2. если зарезервированное слово, идем к 6
3. Читаем сумму
4. Увеличиваем счетчик количества записей
5. идем к 1
6. С первой записи, до счетчика:
Ищем в массиве фамилию,
если есть, то: прибавляем к имеющейся сумме текущую
иначе: добавляем в массив фамилию и сумму.

Алгоритм есть.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума   Ответить с цитированием
Старый 11.05.2007, 14:22   #3
Акашаев Нурлан
Пользователь
 
Регистрация: 02.05.2007
Сообщений: 53
Сообщение

В своём решении я указал кол-во сотрудников, но можете переделать.
вот решение:
Код:
uses crt;
var a:array[1..100] of string;
b:array[1..100] of integer;
i,j,k,l,m,n:integer;
procedure solution;
begin
for i:=1 to n do
for j:=1 to n do begin if a[j]<>'#' then
if (a[j]=a[i])and(i<>j) then begin
a[j]:='#';b[i]:=b[i]+b[j];end;end;
end;
begin
clrscr;
writeln('kol-vo sotrudnikov');readln(n);
writeln(' familiya       zarabotok');
for i:=1 to n do
read(a[i],b[i]);
solution;
writeln(' familiya       zarabotok');
for i:=1 to n do
if a[i]<>'#' then writeln(a[i],' ',b[i]);readln;
end.
Вцелом прога работает, но там только кол-во сотрудников должно быть <=100.
Акашаев Нурлан вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль динамич. списки...помогите кто чем может) Никита35 Помощь студентам 16 09.05.2008 16:41
Срочно,пожалуйста...паскаль динамич. списки Никита35 Помощь студентам 2 07.05.2008 22:48
Паскаль,списки.Срочно,пожалуйста... Никита35 Помощь студентам 7 06.05.2008 11:25
Списки. Паскаль Demyrg Помощь студентам 2 10.04.2008 08:20