Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Какую процедуру можно использовать??


Автор: lynx13 8.5.2008, 11:21
У меня есть 34 вложенных цикла for, по мере прохождения этих циклов обрабатываются все варианты размещения 34 грузов на 34 позициях т.е. получается 34! вариантов(что представляет собой огромную цифру)....
Но в задаче используется нейкий критерий оптимальности, по которому определяется лучший вариант размещения...Превышение этого критерия, говорит о том, что вариант заведомо не перспективный и дальнейшее его рассмотрение не нужно, поэтому  вычисление должно прерваться, а я должна перейти к следующему шагу текущего цикла. Как это сделать?? Может есть какая-нибудь функция типа  Break?


M
Alexeis
Модератор: Название темы должно отражать ее суть!



Автор: dumb 8.5.2008, 11:27
Цитата(lynx13 @  8.5.2008,  12:21 Найти цитируемый пост)
У меня есть 34 вложенных цикла for
smile
Цитата(lynx13 @  8.5.2008,  12:21 Найти цитируемый пост)
Может есть какая-нибудь функция типа  Break?
continue

Автор: lynx13 8.5.2008, 12:03
Если использовать continue, то будут выполняться все оставшиеся вложенные циклы, а мне это как раз и не надо..
А надо , чтобы я перешла к следующему шагу цикла на котором , критерий стал больше чем нужно..

Например, 
For i:=1 to 34

* * * 
for i:= 1 to 26 do
begin

* * *

if Yoptim>1000 then  ***(вот тут типа должен быть какой-нибудь метод, чтобы перейти на следуйщий шаг этого же цикла,все что ниже не выполняется)

for i:=1 to 25 do
    for i:=1 to 24 do
          ***

 end;
*
*
*
end;

Автор: FranticMan 8.5.2008, 12:11
goto?
Знаю, его никто не любит (в т.ч. и я) но в даной задаче может помочь.

Автор: THandle 8.5.2008, 12:24
lynx13, извиняюсь за оффтоп, но нельзя ли узнать на решение какой задачи потребовалось 34 вложенных цикла? 

ЗЫ: Просто интересно.

Автор: dumb 8.5.2008, 12:31
Цитата(lynx13 @  8.5.2008,  13:03 Найти цитируемый пост)
Если использовать continue, то будут выполняться все оставшиеся вложенные циклы
это с чего бы?! - continue прерывает выполнение текущей итерации и переходит к следующей.
именно этого ты и хочешь добиться, если конечно не ошибаешься при описании того, чего хочешь.

Автор: lynx13 8.5.2008, 14:11
Цитата

lynx13, извиняюсь за оффтоп, но нельзя ли узнать на решение какой задачи потребовалось 34 вложенных цикла? 

Задача оптимизации загрузки грузовой фуры!!
Есть 34 груза разной массы,а определенная марка полуприцепа фуры имеет 34 поддона... ну вобщем нужно рассмотреть все возможные варианты укладки этих самых грузов в полуприцепе и выбрать лучший, при котором нагрузки на оси будут соответствоввать нормам...И все это дело решается методом ветвей и границ
Другого способа, кроме как сделать 34 вложенных цикла, я  не придумала smile 

Цитата

Цитата(lynx13 @  8.5.2008,  13:03 ) 
Если использовать continue, то будут выполняться все оставшиеся вложенные циклы 

это с чего бы?! - continue прерывает выполнение текущей итерации и переходит к следующей.
именно этого ты и хочешь добиться, если конечно не ошибаешься при описании того, чего хочешь. 


Ты абсолютно прав , что-то я торможу!!!

Но если честно идиотская задача, там стока всего учитывать надо, что одним  continue не отделаешься smile

Добавлено через 46 секунд
А делать надо, это блин мой диплом!

Автор: SAVANE 8.5.2008, 15:55
А если  использовать не цыкл For а к примеру 
WHILE (I<x) AND (STOP=FALSE) DO
А В ТЕЛЕ ЦЫКЛА  і прибавлять (ну и так 34 раза)

Автор: Esperito 8.5.2008, 15:56
lynx13, это у тебя полный перебор, а не метод ветвей и границ. Тебе за такой диплом сделают большой ай-яй-яй smile

Автор: lukas 9.5.2008, 16:49
да и к тому же... кто в одной процедуре пишет ну больше 10 циклов максимум...

разгрупируй свою задачу по функциям и процедурам... все станет горазда легче! 

Автор: TName 14.5.2008, 22:11
если приходится делать много циклов, возникает вопрос: "а не решить ли это рекурсивной функцией?"
И раз уж это диплом, то может в этом и есть суть...

Автор: aktuba 14.5.2008, 23:11
Цитата(TName @  14.5.2008,  23:11 Найти цитируемый пост)
если приходится делать много циклов, возникает вопрос: "а не решить ли это рекурсивной функцией?"

и тут возникает вопрос - а надо ли?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)