Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
#1

Прерывание цикла по условию - C++

04.05.2014, 16:52. Просмотров 672. Ответов 12
Метки нет (Все метки)

Ребят,помогите пожалуйста,мне нужно,например если сработал первый if, то следующие не срабатывали в цикле,помогите пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void proverka(string name, char p)
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                if (((Get(i, j) == p && Get(i, j + 1) == p && Get(i, j + 2) == p)) || ((Get(i, j) == p && Get(i, j - 1) == p && Get(i, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i, j + 1) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
                if ((Get(i, j) == p && Get(i - 1, j) == p && Get(i - 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i + 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i - 1, j) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
                if ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i - 2, j + 2) == p)) || ((Get(i, j) == p && Get(i + 1, j - 1) == p && Get(i + 2, j - 2) == p)) || ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i + 1, j - 1) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
                if ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i - 2, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j + 1) == p && Get(i + 2, j + 2) == p)) || ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i + 1, j + 1) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
    
            }
        }
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 16:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прерывание цикла по условию (C++):

Прерывание цикла! - C++
каким образом можно прервать while путем ввода какого нибудь символа, чтобы не нужно было при каждом проходе тела цикла вводить этот...

Прерывание цикла, через клавишу Esc - C++
Мне нужно в прервать цикл при нажатии клавиши Esc. Делаю через getch(). Все работает, но есть одна проблема, в каждом прогоне цикла...

Прерывание цикла и выполнение его вручную - C++
Доброго времени суток! Есть следующий код { cout &lt;&lt; &quot;start&quot; &lt;&lt; endl; cout &lt;&lt; &quot;enter signalWaitTime&quot; &lt;&lt; endl; ...

Прерывание бесконечного цикла с возвратом значения нажатой клавиши в main() - C++
Вкратце, в функции main() есть некий объект класса - scene, также есть бесконечно работающий цикл while(1), в котором вызывается...

Вывести на консоль заданный символ согласно условию (найти ошибки в работе цикла for) - C++
У меня есть два цикла for Один внешний, другой внутренний. for (int j = 1; j &lt;= 10; j++) { for (int i = 1; i &lt;= j;...

Применение цикла if для определения простых чисел. If внутри цикла for - C++
Доброго времени суток, подскажите пожалуйста, в чем тут дело. С кодом все хорошо, все работает, просто я пытаюсь докопаться до сути и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16698 / 6624 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
04.05.2014, 16:54 #2
flag + break ?
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
04.05.2014, 16:56  [ТС] #3
у меня получается что if пересекаются,и 3 раза печатается cout

Добавлено через 35 секунд
если не сложно напишите в коде как должно быть)
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16698 / 6624 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
04.05.2014, 17:02 #4
В принципе, если лишние итерации не влияют, то можно и без break
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void proverka(string name, char p)
    {
      bool flag = false;
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                if (((Get(i, j) == p && Get(i, j + 1) == p && Get(i, j + 2) == p)) || ((Get(i, j) == p && Get(i, j - 1) == p && Get(i, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i, j + 1) == p)))
                    flag = true;
                if ((Get(i, j) == p && Get(i - 1, j) == p && Get(i - 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i + 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i - 1, j) == p)))
                    flag = true;
                if ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i - 2, j + 2) == p)) || ((Get(i, j) == p && Get(i + 1, j - 1) == p && Get(i + 2, j - 2) == p)) || ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i + 1, j - 1) == p)))
                    flag = true;
                if ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i - 2, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j + 1) == p && Get(i + 2, j + 2) == p)) || ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i + 1, j + 1) == p)))
                    flag = true;
    
            }
        }
      if(flag)
        cout << "Congratulations! " << name << " " << "Win" << endl;
    }
1
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
04.05.2014, 17:13 #5
Вот ответ на Ваш вопрос. Кроме того, я считаю очень важным для Вас как для программиста научиться явно изъяснять свои мысли в коде, для того чтобы и Вы и другие программисты могли читать Ваш код как "Хорошо написанную прозу" © Uncle Bob.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
bool IsFirstConditionalWin(int i, int j, char p) {
  return ((Get(i, j) == p && Get(i, j + 1) == p && Get(i, j + 2) == p)) ||
      ((Get(i, j) == p && Get(i, j - 1) == p && Get(i, j - 2) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j) == p && Get(i, j + 1) == p));
}
 
bool IsSecondConditionalWin(i, j, char p) {
  return ((Get(i, j) == p && Get(i - 1, j) == p && Get(i - 2, j) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j) == p && Get(i + 2, j) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j) == p && Get(i - 1, j) == p));
}
 
bool IsThirdConditionalWin(int i, int j, char p) {
  return ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i - 2, j + 2) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j - 1) == p && Get(i + 2, j - 2) == p)) ||
      ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i + 1, j - 1) == p));
}
 
bool IsFourthConditionalWin(int i, int j, char p) {
  return ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i - 2, j - 2) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j + 1) == p && Get(i + 2, j + 2) == p)) ||
      ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i + 1, j + 1) == p));
}
 
bool IsWin(int i, int j, char p) {
  return IsFirstConditionalWin(i, j, p) ||
      IsSecondConditionalWin(i, j, p) ||
      IsThirdConditionalWin(i, j, p) ||
      IsFourthConditionalWin(i, j, p);
}
 
bool IsWin(char p) {
  for (int i = 0; i < Width; i++) {
      for (int j = 0; j < Height; j++) {
          if (IsWin(i, j, p)) {
              return true;
            }
        }
    }
  return false;
}
 
void ShowCongratulationsForPlayer(string player_name) {
  cout << "Congratulations! " << name << " " << "Win" << endl;
}
 
void ShowCongratulationsIfPlayerIsWin(string name, char p) {
  if (IsWin(p)) {
      ShowCongratulationsForPlayer(name);
    }
}
1
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
04.05.2014, 17:54  [ТС] #6
спасибо большое за помощь

Добавлено через 4 минуты
KOPOJI, можешь пожалуйста объяснить как это работает,я начинающий программист, не сразу все доходит)
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16698 / 6624 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
04.05.2014, 19:52 #7
Цитата Сообщение от kamish77777 Посмотреть сообщение
объяснить как это работает
как работает что именно "это" ?
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
04.05.2014, 20:37  [ТС] #8
ну этот flag,почему цикл по if дальше не скачет?как он так прерывает?
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16698 / 6624 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
04.05.2014, 20:38 #9
Цитата Сообщение от kamish77777 Посмотреть сообщение
почему цикл по if дальше не скачет?
а с чего вы взяли, что он дальше "не скачет" ? Скачет, стрекозел..
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
04.05.2014, 20:40  [ТС] #10
тогда я совсем ничего не понимаю))

Добавлено через 1 минуту
как тогда все заработало?)
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16698 / 6624 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
04.05.2014, 20:42 #11
А если так?

"Нашли" - Ложь
Если условие1 выполнилось, то "Нашли" = Истина
Если условие2 выполнилось, то "Нашли" также = Истина
Если условие3 выполнилось, то "Нашли" также = Истина
....
Если условия выше не выполнилось, "Нашли" - Ложь (исходное значение). Если любое из условий (или все сразу, или какая-то часть) выполнилось, то "Нашли" - Истина
...
Если "Нашли" - Истина, то выводим текст сообщения
0
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,850
04.05.2014, 20:47 #12
Цитата Сообщение от kamish77777 Посмотреть сообщение
ебят,помогите пожалуйста,мне нужно,например если сработал первый if, то следующие не срабатывали в цикле,помогите пожалуйста
я не совсем понял что нужно?
если сработало условие не продолжать цикл?
тогда break или return сразу вышли из функции
а если чтобы продолжался цикл contine забросить последующий код и перейти к следующей итерации
а есть еще такая конструкция
C++
1
2
3
if()
else
 if()
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
04.05.2014, 22:19  [ТС] #13
Все,понял что к чему,спасибо огромное за помощь)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 22:19
Привет! Вот еще темы с ответами:

Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла. - C++
Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла.

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла - C++
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле...

Нахождение отрицательного цикла в графе и вывод цикла - C++
Вот программа по нахождению отрицательного цикла в графе и вывод цикла void Floyd(int GR, int parents , int V) { int checking; int...

Прерывание - C++
При вызове прерывание компилятор пишет ошибка доступа. #include &lt;iostream&gt; using namespace std; char a = &quot;hello&quot;; int main() ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.05.2014, 22:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru