Цитата:
Сообщение от 11Angelav
Задание 2 (программирование циклических алгоритмов (с параметром)): Требуется определить план выпуска продукции, обеспечивающий наибольшую суммарную прибыль:На предприятии организуется побочный цех для использования отходов производства. Цех может освоить выпуск продукции двух видов: столов и книжных шкафов. На производство одного стола и шкафа затрачивается соответственно рабочего времени – С1 человеко-часов и С2 человеко-часов, древесины – D1 м3 и D2 м3, а на производство одного шкафа, кроме того -2 м стекла. Ресурсы ос¬новных материалов в месяц составляют: С человеко-часов рабочего времени, V м3 древесины и S м2 стекла. Прибыль от реализации стола составляет P1 руб., шкафа – P2 руб.
|
С Вашего разрешения, я лучше решу задачу 2. Алгоритм:
1. Вводятся исходные данные.
2. Определяется максимально возможное количество столов по человеко-часам и древесине, а также прибыль, если делать только столы.
3. В цикле уменьшаем количество столов на 1 за проход, из оставшихся ресурсов, если такое возможно, делаем шкафы, и каждый раз считаем суммарную прибыль. Сохраняем данные только если эта прибыль превзойдёт ту, что получена на предыдущем шаге.
Программа:
Код:
Const
S2=2.0;
Var
C1,C2,C,C_cur,D1,D2,D,D_cur,S:Real;
Max_t,M1,M2,N_t,N_w,P1,P2,P_cur,P,i,j:LongInt;
BEGIN
Write('Human resource for 1 table= ');
Readln(C1);
Write('Human resource for 1 wardrobe= ');
Readln(C2);
Write('Full amount of human resources= ');
Readln(C);
Write('Wood for 1 table= ');
Readln(D1);
Write('Wood for 1 wardrobe= ');
Readln(D2);
Write('Full amount of wood= ');
Readln(D);
Write('Full amount of glass= ');
Readln(S);
Write('Profit from 1 table (integer)= ');
Readln(P1);
Write('Profit from 1 wardrobe (integer)= ');
Readln(P2);
{Search of maximal amount of tables}
M1:=Trunc(C/C1);
M2:=Trunc(D/D1);
If M1<M2 then Max_t:=M1 else Max_t:=M2;
P:=Max_t*P1;
N_t:=Max_t;
N_w:=0;
i:=N_t;
Repeat
Dec(i);
C_cur:=C-C1*i;
D_cur:=D-D1*i;
M1:=Trunc(C_cur/C2);
M2:=Trunc(D_cur/D2);
If M1<M2 then j:=M1 else j:=M2;
While S2*j>S do Dec(j);
P_cur:=i*P1+j*P2;
If P_cur>P then
begin
N_t:=i;
N_w:=j;
P:=P_cur;
end;
Until i=0;
Writeln;
Writeln('Maximal profit corresponds to ',N_t,' tables and ',N_w,' wardrobes');
Readln
End.