Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2016, 20:35   #1
Belzan
 
Регистрация: 29.11.2016
Сообщений: 4
Печаль Помогите написать программу через цикл For. Сборка домов сельского типа из разных деталей.

Из строительных деталей двух видов нужно собрать три типа домов сельского типа. Для сборки X-квартирного дома требуется A деталей первого и B деталей второго вида; для сборки Y-квартирного дома - C и D, а для Z-квартирного дома – E и F деталей
первого и второго вида соответственно. Определить, какое количество домов каждого типа нужно собрать, чтобы общее количество квартир в них было наибольшим, если всего имеется Р деталей первого и Т деталей второго вида.

Желательно в Free Pascal

Последний раз редактировалось Belzan; 29.11.2016 в 20:37.
Belzan вне форума Ответить с цитированием
Старый 30.11.2016, 09:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
//задание (ввод) данных 

M:=0; m1:=0; m2:=0; m3:=0; //пока считаем что это лучший вариант
for t1:=0 to min(P div A, T div B) do // возможное число домов первого типа
for t2:=0 to min(P div C, T div D) do // второго типа
for t3:=0 to min(P div E, T div F) do // и третьего типа 
begin                                 // да и то без учета использования деталей в домах другого типа
  if t1*A+t2*C+t3*E>P then continue;//мы захотели слишком много деталей первого типа
  if t1*B+t2*D+t3*F>T then continue;//аналогично со вторым типом
  r:=t1*X+t2*Y+t3*Z; //квартир мы все-таки построим
  if r>M then begin //мы нашли лучший вариант
    M:=r; m1:=t1; m2:=t2; m3:=t3; // запомнили этот лучший(пока лучший)
  end;
end;  
// вывод результатов
И модификация циклов для учета использованных ранее блоков
Код:
for t1:=0 to min( P div A, T div B) 
for t2:=0 to min( (P-t1*A) div C, (T-t1*B) div D) do
for t3:=0 to min( (P-t1*A-t2*C) div E, (T-t1*B-t2*F) div F) do
begin
  r:=......
  if r>M then ...
end;
P.S. все предложенные варианты НЕ учитывают, что какая-то деталь может НЕ использоваться при изготовлении какого-либо типа домов.
и требуют A, B, C, D, E, F >0 !!! а иначе ZeroDivide!
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.11.2016 в 12:30.
evg_m вне форума Ответить с цитированием
Старый 02.12.2016, 09:16   #3
Belzan
 
Регистрация: 29.11.2016
Сообщений: 4
Радость спасибо

Спасибо большое
Belzan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо написать программу в паскале через цикл While Mark706 Помощь студентам 2 11.12.2014 15:16
Помогите, как написать программу через макросы 5Настёна Помощь студентам 2 04.12.2013 18:31
Помогите написать несложную программу на TP. Тема: программирование ветвлящихся и цикл. выч. процессов Andrey6451 Помощь студентам 6 12.10.2008 21:58