Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Element tablicy jako warunek w if

Ostatnio zmodyfikowano 2015-12-02 16:07
Autor Wiadomość
vancarek
Temat założony przez niniejszego użytkownika
[C++] Element tablicy jako warunek w if
» 2015-12-02 12:49:03
Mam taki warunek. Chcę aby po zamianie znaków i indexów (03-09 oraz 15-25) następowało sprawdzenie czy znak (w tym przypadku  x) znajduje się na końcu/w ostatnim wierszu tablicy [8][8]. Jeżeli znak po przemieszczeniu albo biciu znajduje się w wierszu, gdzie i==7, ma on się zamienić na duży znak, który będzie miał większe możliwości w poruszaniu się (patrz linia 01). Próbowałem w warunku if (linie 10 oraz 26) wstawiać P.tab[8][0], P.tab[8], P.tab[8][], jednak kompilator zawsze wskazywał jakiś błąd.

Czy istnieje jakieś rozwiązanie tego problemu ?
C/C++
01 if( P.tab[ i ][ j ].index != P.tab[ i + 1 ][ j + 1 ].index &&( P.tab[ i ][ j ].znak == "x" || P.tab[ i ][ j ].znak == "X" ) ) {
    02 if( P.tab[ i + 1 ][ j + 1 ].index == "wolne" ) {
        03 buf = P.tab[ i ][ j ].znak;
        04 P.tab[ i ][ j ].znak = P.tab[ i + 1 ][ j + 1 ].znak;
        05 P.tab[ i + 1 ][ j + 1 ].znak = buf;
        06
        07 bufin = P.tab[ i ][ j ].index;
        08 P.tab[ i ][ j ].index = P.tab[ i + 1 ][ j + 1 ].index;
        09 P.tab[ i + 1 ][ j + 1 ].index = bufin;
        10 if( i == 7 ) {
            11 P.tab[ i + 1 ][ j + 1 ].znak = "X";
            12 P.tab[ i + 1 ][ j + 1 ].index = "KRZYZYK";
            13 }
        14 return 1;
        15 } else if( P.tab[ i + 1 ][ j + 1 ].index == "kolko" || P.tab[ i + 1 ][ j + 1 ].index == "KOLKO" ) {
        16 P.tab[ i + 1 ][ j + 1 ].znak = " ";
        17 P.tab[ i + 1 ][ j + 1 ].index = "wolne";
        18
        19 buf = P.tab[ i ][ j ].znak;
        20 P.tab[ i ][ j ].znak = P.tab[ i + 2 ][ j + 2 ].znak;
        21 P.tab[ i + 2 ][ j + 2 ].znak = buf;
        22
        23 bufin = P.tab[ i ][ j ].index;
        24 P.tab[ i ][ j ].index = P.tab[ i + 2 ][ j + 2 ].index;
        25 P.tab[ i + 2 ][ j + 2 ].index = bufin;
        26 if( P.tab[ i + 2 ][ j + 2 ].index == "wolne" && i + 2 == 7 ) {
            27 P.tab[ i + 2 ][ j + 2 ].znak = "X";
            28 P.tab[ i + 2 ][ j + 2 ].index = "KRZYZYK";
            29 }
        30 return 1;
        31 }
    32 } else {
    33 cout << "ZLY RUCH. SPROBUJ PONOWNIE." << endl;
    34 return 0;
    35 }
36

P-141276
carlosmay
» 2015-12-02 14:30:47
Jaki błąd?

Jeśli tablica jest 8x8 to dla i > 5 , oraz j > 5 warunek z linii 26
wychodzi poza tablicę.
P-141284
vancarek
Temat założony przez niniejszego użytkownika
» 2015-12-02 15:31:34
Dla :
1. if( P.tab[ i  ][ j ].index == "wolne" && P.tab[8][0]==P.tab[ i  ][ j ] )
2. if( P.tab[ i  ][ j ].index == "wolne" && P.tab[8][0]==P.tab[ i  ][ j ] ) 
Występuje błąd - error: no match for 'operator==' in P->poleGry::tab[8][0] == P->poleGry::tab[j].

poleGry to struktura zawierająca tablicę ze znakami i indexami.

Jak w takim razie powinno być to poprawnie zapisane ?
P-141297
carlosmay
» 2015-12-02 16:07:33
C/C++
P.tab[ 8 ][ 0 ] == P.tab[ i ][ j ] // to jest problem
 W porównaniu nie uwzględniasz składowych 'indeks' i 'znak'.
Nie można porównać tych obiektów

Jeśli bardzo pragniesz tak porównać te obiekty musisz napisać metodę, która prawidłowo porówna te obiekty, np.
C/C++
#include <iostream>
using namespace std;

struct A {
    int a;
    int b;
};

struct B {
    A tab[ 2 ][ 2 ];
    bool porownaj( A tab, A tab2 ) {
        return tab.a == tab2.b;
    }
};

int main()
{
    B bb;
    if( bb.porownaj( bb.tab[ 0 ][ 1 ], bb.tab[ 1 ][ 0 ] ) )
         cout << "rowne" << endl;
   
    system( "pause" );
}
 
edit: Inicjalizacja tablicy usunięta, wprowadzała w błąd.
P-141298
« 1 »
  Strona 1 z 1