Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
7 / 7 / 1
Регистрация: 12.01.2015
Сообщений: 87
1

Как выйти из оператора if

21.07.2015, 17:32. Показов 4605. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу ИИ для крестиков-ноликов и вопрос в том, если исполниться одино условие как сделать так что бы другие не проверялись? break чето в if'ие не пашет, есть какие-то другие варианты?

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 //первый щаг, заканчивание игры с одного хода
    for(int i=0; i<3; i++)
    {
        if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
            {cells[i*3+2]='O'; break;}
        if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            {cells[i*3]='O'; break;}
        if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3+1]=='-')
            {cells[i*3+1]='O'; break;}
        if (cells[i+3]==cells[i+6] && cells[i+6]=='O' && cells[i]=='-')
            {cells[i]='O'; break;}
        if (cells[i]==cells[i+3] && cells[i+3]=='O' && cells[i+6]=='-')
            {cells[i+6]='O'; break;}
        if (cells[i]==cells[i+6] && cells[i+6]=='O' && cells[i+3]=='-')
            {cells[i+3]=='O'; break;}
        if (cells[4]==cells[8] && cells[8]=='O' && cells[0]=='-')
            {cells[0]='O'; break;}
        if (cells[0]==cells[4] && cells[4]=='O' && cells[8]=='-')
            {cells[8]='O'; break;}
        if (cells[0]==cells[8] && cells[8]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
        if (cells[6]==cells[4] && cells[4]=='O' && cells[2]=='-')
            {cells[2]='O'; break;}
        if (cells[4]==cells[2] && cells[2]=='O' &&  cells[6]=='-')
            {cells[6]='O'; break;}
        if (cells[2]==cells[6] && cells[6]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
//конец первого шага
   }
//зашита, противнику один ход до конца
    for(int i=0; i<3; i++)
    {
        if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='X' && cells[i*3+2]=='-')
            {cells[i*3+2]='O';break;}
        if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3]=='-')
            {cells[i*3]='O';break;}
        if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3+1]=='-')
            {cells[i*3+1]='O';break;}
        if (cells[i+3]==cells[i+6] && cells[i+6]=='X' && cells[i]=='-')
            {cells[i]='O';break;}
        if (cells[i]==cells[i+3] && cells[i+3]=='X' && cells[i+6]=='-')
            {cells[i+6]='O';break;}
        if (cells[i]==cells[i+6] && cells[i+6]=='X' && cells[i+3]=='-')
            {cells[i+3]=='O';break;}
    }
        if (cells[4]==cells[8] && cells[8]=='X' && cells[0]=='-')
            cells[0]='O';
        if (cells[0]==cells[4] && cells[4]=='X' && cells[8]=='-')
            cells[8]='O';
        if (cells[0]==cells[8] && cells[8]=='X' && cells[4]=='-')
            cells[4]='O';
        if (cells[6]==cells[4] && cells[4]=='X' && cells[2]=='-')
            cells[2]='O';
        if (cells[4]==cells[2] && cells[2]=='X' &&  cells[6]=='-')
            cells[6]='O';
        if (cells[2]==cells[6] && cells[6]=='X' && cells[4]=='-')
            cells[4]='O';
//конец второго щага
 
//третий щаг, выставление рандомно
    if (cells[4]=='-')
        cells[4]='O';
    if (cells[0]=='-')
        cells[0]='O';
    if (cells[1]=='-')
        cells[1]='O';
    if (cells[2]=='-')
        cells[2]='O';
    if (cells[5]=='-')
        cells[5]='O';
    if (cells[8]=='-')
        cells[8]='O';
    if (cells[7]=='-')
        cells[7]='O';
    if (cells[6]=='-')
        cells[6]='O';
    if (cells[3]=='-')
        cells[3]='O';
//конец третьего шага
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2015, 17:32
Ответы с готовыми решениями:

Как правильно выйти из оператора if
Добрый день! Суть задания следующая: при нажатии большой буквы &quot;А&quot; на клавиатуре,должно...

Как выйти?
Как можно выйти из АГС, ссылок в индексе было 400 стало 17 http://unionclub.ru/

Как обратиться с сервера на клиент (или как выйти из безнадежной ситуации)
Здравствуйте.Проблема стоит в том что набор записей регистра сведений проверяет наличие изменений...

Как выйти из положения?
Добрый день!!! Пытаюсь научиться кодить на данном языке.Нашел книгу в которой говориться что как...

22
47 / 47 / 23
Регистрация: 14.04.2013
Сообщений: 188
21.07.2015, 17:44 2
C++
1
2
3
if(cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
else if(cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
else if()
и так далее...
2
26 / 15 / 17
Регистрация: 09.07.2015
Сообщений: 47
21.07.2015, 17:45 3
C++
1
2
3
4
 if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
            cells[i*3+2]='O';
        else if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            cells[i*3]='O';
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
21.07.2015, 18:00 4
1) Храните двухмерный массив
2) Используйте цикл
3) храните в массиве числа -1, 0, 1. Отсюда победа это если сумма ряда или -3 или 3, где кто выигрывает думаю понятно, так же про диагональ и про вертикаль.
4) Используйте цикл
5) Используйте константную char переменную для хранения символа вывода на экран "фишки игрока"
6) используйте уже наконечно циклы!
2
7 / 7 / 1
Регистрация: 12.01.2015
Сообщений: 87
21.07.2015, 18:19  [ТС] 5
Ребят сейчас сделал как говорите и все равно же не помогает, потому что есть цикл if, что тогда сейчас ?

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//первый щаг, заканчивание игры с одного хода
    for(int i=0; i<3; i++)
    {
        if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
            {cells[i*3+2]='O'; break;}
       else if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            {cells[i*3]='O'; break;}
       else if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3+1]=='-')
            {cells[i*3+1]='O'; break;}
       else if (cells[i+3]==cells[i+6] && cells[i+6]=='O' && cells[i]=='-')
            {cells[i]='O'; break;}
       else if (cells[i]==cells[i+3] && cells[i+3]=='O' && cells[i+6]=='-')
            {cells[i+6]='O'; break;}
       else if (cells[i]==cells[i+6] && cells[i+6]=='O' && cells[i+3]=='-')
            {cells[i+3]=='O'; break;}
       else if (cells[4]==cells[8] && cells[8]=='O' && cells[0]=='-')
            {cells[0]='O'; break;}
       else if (cells[0]==cells[4] && cells[4]=='O' && cells[8]=='-')
            {cells[8]='O'; break;}
       else if (cells[0]==cells[8] && cells[8]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
       else if (cells[6]==cells[4] && cells[4]=='O' && cells[2]=='-')
            {cells[2]='O'; break;}
       else if (cells[4]==cells[2] && cells[2]=='O' &&  cells[6]=='-')
            {cells[6]='O'; break;}
       else if (cells[2]==cells[6] && cells[6]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
//конец первого шага
 
//зашита, противнику один ход до конца
       else if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='X' && cells[i*3+2]=='-')
            {cells[i*3+2]='O';break;}
       else if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3]=='-')
            {cells[i*3]='O';break;}
       else if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3+1]=='-')
            {cells[i*3+1]='O';break;}
       else if (cells[i+3]==cells[i+6] && cells[i+6]=='X' && cells[i]=='-')
            {cells[i]='O';break;}
       else if (cells[i]==cells[i+3] && cells[i+3]=='X' && cells[i+6]=='-')
            {cells[i+6]='O';break;}
       else if (cells[i]==cells[i+6] && cells[i+6]=='X' && cells[i+3]=='-')
            {cells[i+3]=='O';break;}
       else if (cells[4]==cells[8] && cells[8]=='X' && cells[0]=='-')
            {cells[0]='O';break;}
       else if (cells[0]==cells[4] && cells[4]=='X' && cells[8]=='-')
            {cells[8]='O';break;}
       else if (cells[0]==cells[8] && cells[8]=='X' && cells[4]=='-')
            {cells[4]='O';break;}
       else if (cells[6]==cells[4] && cells[4]=='X' && cells[2]=='-')
            {cells[2]='O';break;}
       else if (cells[4]==cells[2] && cells[2]=='X' &&  cells[6]=='-')
            {cells[6]='O';break;}
       else if (cells[2]==cells[6] && cells[6]=='X' && cells[4]=='-')
            {cells[4]='O';break;}
    }
//конец второго щага
 
//третий щаг, выставление рандомно
    if (cells[4]=='-')
        cells[4]='O';
   else if (cells[0]=='-')
        cells[0]='O';
   else if (cells[1]=='-')
        cells[1]='O';
   else if (cells[2]=='-')
        cells[2]='O';
   else if (cells[5]=='-')
        cells[5]='O';
   else if (cells[8]=='-')
        cells[8]='O';
   else if (cells[7]=='-')
        cells[7]='O';
   else if (cells[6]=='-')
        cells[6]='O';
   else if (cells[3]=='-')
        cells[3]='O';
//конец третьего шага
       }
Последний if всегда будет исполняться

Добавлено через 16 минут
Ребят, кто-то может помочь ?
0
26 / 15 / 17
Регистрация: 09.07.2015
Сообщений: 47
21.07.2015, 18:21 6
нет не всегда
0
7 / 7 / 1
Регистрация: 12.01.2015
Сообщений: 87
21.07.2015, 18:24  [ТС] 7
Цитата Сообщение от D_Gon Посмотреть сообщение
нет не всегда
Ну даже если не всегда это же не играет роли.... Должно же исполняться только раз и все... Пробую разные штуки и пока что глухо
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
21.07.2015, 18:43 8
Цитата Сообщение от David_Ok Посмотреть сообщение
Пробую разные штуки и пока что глухо
попробуйте цикл ...................................
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
21.07.2015, 20:10 9
Как много If.Гляньте еще Switch Case.
0
Avazart
21.07.2015, 20:17
  #10

Не по теме:

C++
1
2
3
4
5
6
7
     if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
            {cells[i*3+2]='O'; break;}
        if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            {cells[i*3]='O'; break;}
        if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3+1]=='-')
            {cells[i*3+1]='O'; break;}
        if (cells[i+3]==cells[i+6] && cells[i+6]=='O' && cells[i]=='-')
cut
Используйте функции, классы, перечисления, switch/case ... да и вообще язык С++ наконец .... :D
cut

0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
21.07.2015, 20:22 11
Цитата Сообщение от David_Ok Посмотреть сообщение
Пробую разные штуки и пока что глухо
Как много у вас условий сразу. Никогда не начинайте сразу чистовой сложный код. Нужно писать постепенно усложняя программу с записью версий где нить например в MS Word и номер версии кода. Используйте вывод отладочной инфы чтобы проверять как на самом деле работают ваши условия.
Или например выводить вам типа:
Найдено возможных ходов 4.
Возможная победа на ходов:2
Просчитано ходов вперед:2.
Также можно например рисовать букву или символ или цветную точку на экране где комп предполагает ход игрока. Также есть куча примеров в инете на С++ вы погуглили вопрос?
Хорошие программисты стараются максимально изучить вопрос а затем пробовать самому. Или вам интересно вообще самому с нуля сделать?
1
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
21.07.2015, 21:03 12
Цитата Сообщение от David_Ok Посмотреть сообщение
Должно же исполняться только раз и все
Если запутались в if'ах, сделайте это в виде функции и делайте return в нужном Вам месте выхода.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
21.07.2015, 21:28 13
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Если запутались в if'ах, сделайте это в виде функции и делайте return в нужном Вам месте выхода.
А как вам моя рекомендация, что множественный return плох в плане отлова ошибки, чтения вашего кода и оптимизации компилятором ?
0
7 / 7 / 1
Регистрация: 12.01.2015
Сообщений: 87
21.07.2015, 23:02  [ТС] 14
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
попробуйте цикл ...................................
какой и как, подскажите по-конкретнее
0
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
21.07.2015, 23:12 15
Лучший ответ Сообщение было отмечено David_Ok как решение

Решение

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
множественный return плох
Т.е. правильнее писать так:
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
bool func1(int a){
 
    if(a==1){
        a++;
        if(a==2){
            a++;
            if(a==3){
                a++;
                if(a==4){
                    a++;
                    if(a==5){
                        a++;
                        if(a==6){
                            a++;
                            if(a==7){
                                a++;
                                if(a==8){
                                    a++;
                                    if(a==9){
                                        a++;
                                        if(a==10){
                                            return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
 
    return false;
}
Чем так:
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
bool func2(int a){
 
    if(a!=1) return false;
    a++;
    if(a!=2) return false;
    a++;
    if(a!=3) return false;
    a++;
    if(a!=4) return false;
    a++;
    if(a!=5) return false;
    a++;
    if(a!=6) return false;
    a++;
    if(a!=7) return false;
    a++;
    if(a!=8) return false;
    a++;
    if(a!=9) return false;
    a++;
    if(a!=10) return false;
 
    return true;
}
Не знаю за какими алгоритмами работает оптимизация компилятора, но как по мне, то читать проще второй вариант. А как большое количество return'ов будет усложнять поиск ошибок?
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
21.07.2015, 23:31 16
Что это было?))))
Это даже кодом тяжело назвать)

Добавлено через 1 минуту
C++
1
2
3
4
5
// 2 вариант
bool func2(int a)
{
    return a != 1; 
}
Добавлено через 1 минуту
C++
1
2
3
4
5
// 1 вариант
bool func1(int a)
{
     return a == 1;
}
Добавлено через 1 минуту
Цитата Сообщение от David_Ok Посмотреть сообщение
какой и как, подскажите по-конкретнее
Сделайте все пункты, что здесь написаны / покажите сюда код, а с пунктами 2, 4, 6 - я вам помогу сам на месте же ж!
0
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
22.07.2015, 01:38 17
rikimaru2013, очень странно, что Вы не поняли, что это был просто пример, чтоб показать 2 варианта записи.

Да, я его сделал очень простым, но если вместо a++ будут другие преобразования, а вместо таких простых условий, будут более сложные, тогда как правильнее записывать? И самое главное, почему?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
22.07.2015, 07:05 18
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Т.е. правильнее писать так:
Лично я считаю что да, так правильнее.
Цитата Сообщение от Krasiosoft Посмотреть сообщение
но как по мне, то читать проще второй вариант. А как большое количество return'ов будет усложнять поиск ошибок?
До поры до времени. Пример слишком прост. Функции могут быть намного больше и запутаннее. Когда знаешь, что выход из функции только один, становится намного проще её изучать.

Добавлено через 12 минут
Дополню ответ.
Встречал и подобную конструкцию:
C++
1
2
3
4
5
6
7
8
9
int foo() {
    int result = 0;
 
    ...
    много кода, который может изменять переменную result в зависимости от появления ошибок и т.п.
    ...
 
    return result;
}
Такой подход мне тоже сильно импонирует.
2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
22.07.2015, 10:35 19
Цитата Сообщение от castaway Посмотреть сообщение
Лично я считаю что да, так правильнее.
В том варианте 2 return, что уже неправильно. Как так, castaway, ? У вас есть доводы, что опревергают моё
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А как вам моя рекомендация, что множественный return плох в плане отлова ошибки, чтения вашего кода и оптимизации компилятором ?
Моя рекомендация один и только один. Бывает и сам пишу 2 return, но противно в душе до ужаса, но в тех случаях более читабельно через два. А так только 1.

Цитата Сообщение от castaway Посмотреть сообщение
Такой подход мне тоже сильно импонирует.
Он и является для меня главным <3
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
22.07.2015, 10:54 20
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В том варианте 2 return, что уже неправильно. Как так, castaway, ? У вас есть доводы, что опревергают моё
"Я извиняюсь за свой английский", немного неправильно выразился. Слово "правильнее" было неправильным с моей стороны, просто отталкивался от вопроса ТС, содержащего его. Мне следовало бы заменить выражение "так правильнее" на "по-хорошему так, я считаю".
Моё мнение - 1 return для "сложных" функций, максимум - два оператора для простых, где оба видны с первого взгляда.
1
22.07.2015, 10:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2015, 10:54
Помогаю со студенческими работами здесь

как выйти из циклов
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include...

Как выйти из man?
Ввела man list, у меня остановиолсь на строке END , энтер, esc не помогают , приходится...

Как выйти из цикла?
Здрасьте!Я новичок, и у меня достаточно глупый вопрос. Как тут реализовать выход из цикла? ...

Как выйти из рекурсии?
Подскажите пожалуйста, как можно выйти из рекурсии? static double raschet(int r, int r1, int...


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

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