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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2016, 21:32   #1
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию Выход из тройного цикла

Помогите, пожалуйста, народ.
Допустим у меня цикл, в нем еще один цикл, а в нем еще один цикл.Мне нужно прервать третий цикл, и второй, чтобы попасть в первый. Как это сделать?
Например:
Код:
for i:=1 to n do begin
 a:=b+c;
 v:=a-b;
 for j:=1 to n do begin
  if (a<b) and(a>c)
  then
  for b:=1 to n do begin
   if (a<c) then begin
   a:=c;
   b:=c;
   break; \\Вот здесь выход из третьего цикла. Мы попадаем во второй. А как сразу же попасть в первый?
   end;
  end;
  a:=c;
  v:=b;
 end;
 Inc(b);
end;
В код не вчитывайтесь, только что бред сочинил.

Последний раз редактировалось dimon_snake; 03.02.2016 в 21:35.
dimon_snake вне форума Ответить с цитированием
Старый 03.02.2016, 21:37   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

вспомогательная переменная Boolean? например в начале первого цикла bHelp:=False
Код:
b:=c;
bHelp := true;
break;\\ bla bla bla
end;
if bHelp = true then break;
или извращения через Goto Label?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.02.2016, 21:38   #3
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
вспомогательная переменная Boolean? например в начале первого цикла bHelp:=False
Код:
b:=c;
bHelp := true;
break;\\ bla bla bla
end;
if bHelp = true then break;
Да, как вариант, спасибо.
dimon_snake вне форума Ответить с цитированием
Старый 03.02.2016, 21:40   #4
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
или извращения через Goto Label?
Сразу пробовал, бред получился
dimon_snake вне форума Ответить с цитированием
Старый 03.02.2016, 21:42   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Ещё можно оформить два вложенных цикла функцией и сделать exit.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 03.02.2016, 21:45   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от dimon_snake Посмотреть сообщение
Сразу пробовал, бред получился
Код:
Program HelloWorld(output);
label l;
var i,j,z:byte;
begin
  for i:=1 to 10 do
    begin
        for j:=1 to 5 do
            begin
                for z:=1 to 5 do
                    begin
                            writeln('3');
                            if z = 3 then goto l;
                    end;
                writeln('2')
            end;
l:  
        writeln('1');
    end;
end.
Вроде перескакивает 2 цикл
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.02.2016, 22:06   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Ещё можно оформить два вложенных цикла функцией и сделать exit.
ИМХО, exit завершит работу всей программы/подпрограммы.
Вадим Мошев вне форума Ответить с цитированием
Старый 03.02.2016, 23:06   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
ИМХО, exit завершит работу всей программы/подпрограммы.
так в это и прикол. 2 цикла в проще дуре которая вызывается в 3 цикле при определенном условии в процедуре вызывается Exitж

Код:
prosedure iterDab(param);
.............
begin
for i:=1 to n do
 begin 
  ............
  for j:=1 to m do 
   begin
    ..............
    if true then Exit 
   end;
  .............
 end;
end;
............
begin 
.........
for g:=1 to d do
 begin
  ..........
  iterDab(param);
  ..........
 end;
........
end;
мне нравиться такая идея.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 03.02.2016, 23:32   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Всё понял. Спасибо.
Вадим Мошев вне форума Ответить с цитированием
Старый 04.02.2016, 10:48   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А на delphi можно? Я примерно вот так делал:
Код:
try
  for idx1:= 0 to 100499 do
  begin
    idx2:= 0;
    
    while idx2 <> 100500 do
      begin
        idx3:= 100500;
        repeat
          if not Ping('63.246.128.64', 1000, 1)
            then raise EPingFailed.Create('Server is unreachable.');
          
          if Terminated
            then raise ETerminatedByUser.Create();
              
          dec(idx3);
        until idx3 = 0;
        inc(idx2);
      end;
  end;  
except
  on EPingFailed do ... ;
  on ETerminatedByUser do...;
  else ... ;
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из цикла vandrouny Общие вопросы Delphi 5 27.05.2010 20:23
Выход из цикла Сергей089 Помощь студентам 6 17.03.2010 16:44
выход из цикла varelik Общие вопросы Delphi 13 24.12.2009 20:42
Выход из цикла RIO Помощь студентам 1 21.04.2008 22:55