Если вы хотите внедрить простое процедурное обновление сотрудников, вы не указали язык (что хорошо, так как я все равно предоставляю псевдокод для домашней работы), но вот оно:
def update (N,MAX)
if N < 1:
return
for every employee E:
select E.catagory:
if 'C':
E.salary = E.salary * (1 + N / 100)
endif
if 'B':
E.salary = E.salary * (1 + 2 * N / 100)
endif
if 'A':
E.salary = E.salary * (1 + 3 * N / 100)
endif
endselect
if E.salary > MAX:
E.salary = MAX
endif
print E.name " is now on a wage of $" E.salary
endfor
enddef
Теперь ваша задача состоит в том, чтобы перевести это на любой язык, на котором вам нужно это реализовать: -)
Если вы хотите решить все неизвестные в уравнении, у вас есть проблема (противоречивые требования). Похоже, что вы можете следовать за значением N, которое даст наибольшую зарплату в 50 тысяч долларов.
Вам просто нужно пройти через каждого сотрудника и вычислить максимальный процент:
def update (MAX) returns N:
N = Infinity
for every employee E:
select E.catagory:
if 'C':
ThisN = MAX / E.salary - 1
endif
if 'B':
ThisN = (MAX / E.salary - 1) / 2
endif
if 'A':
ThisN = (MAX / E.salary - 1) / 3
endif
endselect
if ThisN < N:
N = ThisN
endif
endfor
if N < 1:
# Conflicting requirement
endif
enddef
Возможно получить значение N
, которое меньше 1, если, например, сотрудник категории C уже стоит 50 тыс. Долларов. Вам нужно решить, что вы хотите сделать в этом случае, либо:
- никто не платит (нарушает правило> = 1%).
- дать каждому 1% (нарушает правило ограничения в $ 50K).
- дают каждому 1%, но ограничение составляет $ 50K (нарушает правило множителя 1,2,3).
Как только у вас будет процентное увеличение от этого кода (с вашим решением о том, что делать для противоречивых требований), вы можете передать его в первый фрагмент кода выше для фактического do и распечатать обновление .