Показать сообщение отдельно
Старый 17.12.2011, 18:53   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070