0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
1

комманда break в двойном цикле

15.07.2009, 21:31. Показов 45017. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как сделать так, чтобы при выполнении условия происходил выход из двойного цикла?
Я пробую

C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<imageLabel.GetSize1(); ++i)
    {
         for(int j=0; j<imageLabel.GetSize2(); ++j)
            {
              if(imageLabel(i,j)!=0)
          {
          labelCell.push_back(imageLabel(i,j));
          break;
          }
           }
       }
Мне нужно, чтобы цикл заканчивался, как только я попадаю на первое ненулевое значение imageLabel, но break относится только и if. Если поставить break перед каждой закрывающей скобкой, то if просто не проверяется. Может, для таких ситуаций есть какое-то другое стандартное решение?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2009, 21:31
Ответы с готовыми решениями:

Почему в цикле не срабатывает break
Привет всем! Объясните почему в этом цикле при i=2 не срабатывает break? #include &lt;iostream&gt; ...

В двойном цикле вычислить сумму.
Даны натуральное число n, действительное число x. ВычисЛить n n ∑ ∑ (x+k)/m I=1 m=k

Вычислить сумму в двойном цикле.
помогите решить вот такую задачку! заранее СПАСИБО БОЛЬШОЕ!

Правильное использование оператора Break в цикле
В общем есть у меня вот такой цикл, связанный с двумерным массивом. for (int i = 0; i &lt; Y;...

28
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
15.07.2009, 21:36 2
Введи например какой-нибудь флажок,например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool flag=false;
for(int i=0; i<imageLabel.GetSize1(); ++i)
        {
             for(int j=0; j<imageLabel.GetSize2(); ++j)
            {
              if(imageLabel(i,j)!=0)
              {
                  flag=true;
                  labelCell.push_back(imageLabel(i,j));
                  break;
              }
           }
if(flag==true)
break;
       }
0
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
15.07.2009, 21:38 3
Путь "в лоб". Возможно есть и элегантнее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int flag=0;
for(int i=0; i<imageLabel.GetSize1(); ++i)
        {
             for(int j=0; j<imageLabel.GetSize2(); ++j)
            {
              if(imageLabel(i,j)!=0)
              {
                  labelCell.push_back(imageLabel(i,j));
                  flag=1;
                  break;
              }
           }
           if (flag == 1) break;
       }
1
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
15.07.2009, 21:43 4
Используй goto

C++
1
2
3
4
5
.....
goto metka;
.....
metka:
.....
0
Эксперт С++
3189 / 870 / 39
Регистрация: 29.12.2008
Сообщений: 952
15.07.2009, 21:44 5
Используй оператор goto. Это один из классических случаев, когда его использование элегантно решает проблему.
0
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
15.07.2009, 21:46 6
Способ, предложенный HIMen, более быстрый и существенно экономит ассемблерные операции (особенно когда много итераций цикла), но многие преподаватели за goto убить готовы Потому если для препода прога - то лучше флажки.
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
15.07.2009, 22:04 7
Etudiante,
C++
1
2
3
4
5
6
7
8
9
10
try
{
    for...
    for...
       if (...)
           throw std::exception();
}
catch(std::exception&)
{
}
но лучше goto

многие преподаватели за goto убить готовы
объясни преподу что он ламер, и не понимает, когда целесообразно использовать goto, а когда - нет. :gigi:
1
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
15.07.2009, 22:08 8
Цитата Сообщение от Rififi Посмотреть сообщение
объясни преподу что он ламер, и не понимает, когда целесообразно использовать goto, а когда - нет. :gigi:
Не все преподы могут адекватно это воспринять. По своему опыту. У нас был препод (по Паскалю) который утверждал что тип byte может принимать значения от -128 до +127. За программку
Pascal
1
2
3
4
var i:byte;
begin
i:=-1;
end.
мне оценку на 1 балл снизили (после того, как препод увидел мат компилятора на третью строку).
Хорошо хоть -5 не додумался присваивать переменной, а то б на пересдачу потом
З.Ы.Препод по Делфи оказался более адекватным, а по С++ был вообще - "свой человек".
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
15.07.2009, 22:14 9
Жирный +1 к тому, чтобы использовать goto
0
Phantom
15.07.2009, 22:19
  #10

Не по теме:

Жирный +1 к тому, чтобы объяснить такому преподу что он ламер:)

0
Evg
15.07.2009, 22:21
  #11

Не по теме:

Цитата Сообщение от Phantom Посмотреть сообщение
Жирный +1 к тому, чтобы объяснить такому преподу что он ламер:)
Как показывает практика, если препод ламер, то ему этого не объяснить

0
Phantom
15.07.2009, 22:27
  #12

Не по теме:

Evg, тоже верно:(

0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.07.2009, 22:28 13
Ну да, меня тоже учили не использовать goto, но если у человека с адекватным мышлением забрать его, то это все равно, что писать на асме без джампов(может немного преувеличено и грубо, но близко к правде)
0
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
16.07.2009, 00:01  [ТС] 14
Значит, таки goto?
спасибо...
0
Заказ софта
343 / 188 / 21
Регистрация: 26.05.2009
Сообщений: 863
16.07.2009, 00:28 15
Как говорил мой препод: "Если ты на 101% уверен, что goto только облегчает обстановку, при этом не делая код запутанным, его можно использовать.". Как-то так он говорил, по-моему. Эх...))
1
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
16.07.2009, 00:40 16
я б запретил бы только одной категории людей использовать goto - извращенцам
0
4 / 4 / 0
Регистрация: 12.07.2009
Сообщений: 18
16.07.2009, 04:19 17
Пользуясь случаем хотел бы узнать для чего создан оператор?

C++
1
goto
Всмысли каким образом его можно использовать в наших программах?
1
paladin
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
16.07.2009, 07:41 18
Цитата Сообщение от Alex M Посмотреть сообщение
Пользуясь случаем хотел бы узнать для чего создан оператор?

C++
1
goto
Безусловный переход к метке. Нецелесообразное массовое использование сильно усложняет понимание всего кода.
0
Эксперт С++
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
16.07.2009, 08:00 19
Альтернатива goto в этом случае - присвоить переменной i значение imageLabel.GetSize1(); и после этого сделать break. Тогда произойдет выход из двух циклов,что позволит обойтись без goto,если припекло.

Очень прошу участников не устраивать холивар про гоуту, у нас уже как то был один ))
1
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
16.07.2009, 08:03 20
извините я только второй день изучаю с++, но у меня вот какой вопрос а нельзя ли было использовать просто цикл while
0
16.07.2009, 08:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2009, 08:03
Помогаю со студенческими работами здесь

Оператор break в цикле и нарушение пошаговости
День добрый, уважаемые форумчане! Находимся с дочерью на начальном уровне изучения Паскаля :))...

Как сделать два условия в цикле без break
Нужно, чтобы как только sum стало 10 он выходил из цикла, но чтобы был шаг i, который меняется на...

Цифра после break во вложенном цикле что означает?
Если у меня двумерно вложенный цикл то break 2 это обращение к внешнему циклу? если он будет...

В цикле разбора результата поставить условие и break при $num > 100 ?
Здравствуйте! Подскажите пожалуйста, как в цикле разбора результата поставить условие и break при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru