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

Почему не срабатывает if, если истина? - C++

Восстановить пароль Регистрация
 
jastic7
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 14
19.11.2013, 23:35     Почему не срабатывает if, если истина? #1
Вообщем задание на двумерную динамику.
Есть 2 кучки камней.
Входной файл содержит 3 строчки
в первых двух - команды которые можно выполнять, в 3ей-число камней, по достижении которого(или "переваливании" за него) игрок выигрывает.
Весь код
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
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
 
int fnIteratorCommand(int fniterator, char fnc, int fnd)
{
    if(fnc=='+')
    {
        fniterator+=fnd;
    }
    else
    {
        fniterator*=fnd;
    }
 
    return (fniterator);
}
 
int main()
{
    ifstream in("INPUT.TXT");
    ofstream out("OUTPUT.TXT");
    char c1, c2;
    int d1, d2, N;
    in >> c1 >> d1 >> c2 >> d2 >> N;
    int Mass[30][30]={};
    for(int i=N; i>0; i--)
    {
        for (int k=N; k>0; k--)
        {
            if( (fnIteratorCommand(i,c1,d1)>=N) || (fnIteratorCommand(i,c2,d2)>=N) || (fnIteratorCommand(k,c1,d1)>=N) || (fnIteratorCommand(k,c2,d2)>=N )) 
            {
                Mass[i][k]=1;
                goto label;
            }
 
            
            if( (Mass[fnIteratorCommand(i,c1,d1)][k]==1) && (Mass[i][fnIteratorCommand(k,c1,d1)]==1) && (Mass[fnIteratorCommand(i,c2,d2)][k]==1) && (Mass[i][fnIteratorCommand(k,c2,d2)]==1) )
            {
                Mass[i][k]==0;
            }
 
            if( (Mass[fnIteratorCommand(i,c1,d1)][k]==0) || (Mass[i][fnIteratorCommand(k,c1,d1)]==0) || (Mass[fnIteratorCommand(i,c2,d2)][k]==0) || (Mass[i][fnIteratorCommand(k,c2,d2)]==0) )
            {
                Mass[i][k]==1;
            }
            label:;
        }
    }
 
    for(int i=0; i<N; i++)
    {
        for(int k=0;k<N; k++)
        {
            if(Mass[i][k]==0)
            {
                out << i << k << "\n";
            }
        }
    }
}

Нужно вывести в файл все кучки, при которых второй игрок выиграет при правильной стратегии.
ПРОБЛЕМА ВСЯ В ТОМ, ЧТО НА 47 СТРОЧКЕ НИКОГДА НЕ СРАБАТЫВАЕТ if
Т.е. делая пошаговую отладку, у меня получилась примерно следующее:
C++
1
2
3
4
if ( (1==1) && (1==1) && (1==1) && (1==1) )
{
...
}
т.е. все условия как бы true, а во внутрь if`a компилятор всё равно не заглядывает.
В чем может быть проблема, господа??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 23:35     Почему не срабатывает if, если истина?
Посмотрите здесь:

C++ Не срабатывает условие. Почему?
C++ Составить программу, которая выводит на экран слово «ИСТИНА», если условие выполнено или слово «ЛОЖЬ», если условие не выполнено.
Почему срабатывает rtl C++
do while - почему выполняется цикл, даже если условие истина? C++
Программа, выводящая значение "истина", если выполняется заданное условие: все из чисел x, y, z являются положительными C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
19.11.2013, 23:44     Почему не срабатывает if, если истина? #2
jastic7, значить не все условия true
а блин про пошаговую не заметил=( тогда хз
Alexxandr
143 / 52 / 7
Регистрация: 12.11.2013
Сообщений: 162
19.11.2013, 23:48     Почему не срабатывает if, если истина? #3
Цитата Сообщение от jastic7 Посмотреть сообщение
Вообщем задание на двумерную динамику.
Есть 2 кучки камней.
Входной файл содержит 3 строчки
в первых двух - команды которые можно выполнять, в 3ей-число камней, по достижении которого(или "переваливании" за него) игрок выигрывает.
Весь код
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
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
 
int fnIteratorCommand(int fniterator, char fnc, int fnd)
{
    if(fnc=='+')
    {
        fniterator+=fnd;
    }
    else
    {
        fniterator*=fnd;
    }
 
    return (fniterator);
}
 
int main()
{
    ifstream in("INPUT.TXT");
    ofstream out("OUTPUT.TXT");
    char c1, c2;
    int d1, d2, N;
    in >> c1 >> d1 >> c2 >> d2 >> N;
    int Mass[30][30]={};
    for(int i=N; i>0; i--)
    {
        for (int k=N; k>0; k--)
        {
            if( (fnIteratorCommand(i,c1,d1)>=N) || (fnIteratorCommand(i,c2,d2)>=N) || (fnIteratorCommand(k,c1,d1)>=N) || (fnIteratorCommand(k,c2,d2)>=N )) 
            {
                Mass[i][k]=1;
                goto label;
            }
 
            
            if( (Mass[fnIteratorCommand(i,c1,d1)][k]==1) && (Mass[i][fnIteratorCommand(k,c1,d1)]==1) && (Mass[fnIteratorCommand(i,c2,d2)][k]==1) && (Mass[i][fnIteratorCommand(k,c2,d2)]==1) )
            {
                Mass[i][k]==0;
            }
 
            if( (Mass[fnIteratorCommand(i,c1,d1)][k]==0) || (Mass[i][fnIteratorCommand(k,c1,d1)]==0) || (Mass[fnIteratorCommand(i,c2,d2)][k]==0) || (Mass[i][fnIteratorCommand(k,c2,d2)]==0) )
            {
                Mass[i][k]==1;
            }
            label:;
        }
    }
 
    for(int i=0; i<N; i++)
    {
        for(int k=0;k<N; k++)
        {
            if(Mass[i][k]==0)
            {
                out << i << k << "\n";
            }
        }
    }
}

Нужно вывести в файл все кучки, при которых второй игрок выиграет при правильной стратегии.
ПРОБЛЕМА ВСЯ В ТОМ, ЧТО НА 47 СТРОЧКЕ НИКОГДА НЕ СРАБАТЫВАЕТ if
Т.е. делая пошаговую отладку, у меня получилась примерно следующее:
C++
1
2
3
4
if ( (1==1) && (1==1) && (1==1) && (1==1) )
{
...
}
т.е. все условия как бы true, а во внутрь if`a компилятор всё равно не заглядывает.
В чем может быть проблема, господа??
Всяческие оптимизации компиляторов не любят подобного кода. Попробуй отключить их.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
19.11.2013, 23:49     Почему не срабатывает if, если истина? #4
41 и 46 строки - не присваивание, а сравнение
C++
1
Mass[i][k]==0;
jastic7
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 14
20.11.2013, 12:32  [ТС]     Почему не срабатывает if, если истина? #5
Вот глазастый !! Спасибо, а то видать ночью уже совсем не соображал. Тыкался - тыкался, но так и не заметил.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.11.2013, 12:42     Почему не срабатывает if, если истина? #6
Цитата Сообщение от jastic7 Посмотреть сообщение
Тыкался - тыкался, но так и не заметил.
Но это же никак не связано со срабатыванием if'а.
Yandex
Объявления
20.11.2013, 12:42     Почему не срабатывает if, если истина?
Ответ Создать тему
Опции темы

Текущее время: 13:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru