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

tablica z wartościami bool i oznaczanie bitych przez hetmana pól na szachownicy jako wartość true

Ostatnio zmodyfikowano 2015-01-29 02:11
Autor Wiadomość
Angie
Temat założony przez niniejszego użytkownika
tablica z wartościami bool i oznaczanie bitych przez hetmana pól na szachownicy jako wartość true
» 2015-01-27 23:48:48
Witam :)
Mam problem z zadaniem w C++ o treści:

Szachownicę można opisać jako macierz 8x8 o wartościach typu bool. Pusta szachownica (macierz) ma zadane wartości początkowe - false. Niech dane będą 2 zbiory x i y (5-elementowe) wyrażające położenie 5 hetmanów na szachownicy. Napisać program, który zaznacza pole na ktorym stoi hetman oraz bite przez niego pola jako wartości true w macierzy opisującej szachownicę.

Konkretnie chodzi o pętle zmieniające wartości bitych przez hetmany pól z false na true. Udało mi się doprowadzić tego, że zbite zostały wiersze i kolumny, w których znajdują się pionki, jednak nie mogę poradzić sobie z przekątnymi. Program się kompiluje, ale przerywa działanie i pojawia się informacja o błędzie. Byłabym wdzięczna za wszelkie sugestie :)

(program pisany przez totalną amatorkę, proszę wybaczyć długi zapis :D )


C/C++
for( int i = 1; i <= 5; i++ )
{
    szachownica[ x[ i ] ][ y[ i ] ] = true;
}

for( int i = 1; i <= 5; i++ )
{
    while( x[ i ] + krok <= 8 )
    {
        szachownica[ x[ i ] + krok ][ y[ i ] ] = true;
        krok++;
    }
    krok = 1;
   
    while( y[ i ] + krok <= 8 )
    {
        szachownica[ x[ i ] ][ y[ i ] + krok ] = true;
        krok++;
    }
    krok = 1;
}

for( int i = 1; i <= 5; i++ )
{
    while( x[ i ] - krok >= 1 )
    {
        szachownica[ x[ i ] - krok ][ y[ i ] ] = true;
        krok++;
    }
    krok = 1;
   
    while( y[ i ] - krok >= 1 )
    {
        szachownica[ x[ i ] ][ y[ i ] - krok ] = true;
        krok++;
    }
    krok = 1;
}

for( int i = 1; i <= 5; i++ )
{
    while( x[ i ] + krok <= 8 && y[ i ] + krok <= 8 )
    {
        szachownica[ x[ i ] + krok ][ y[ i ] + krok ] = true;
        krok++;
    }
    krok = 1;
}
for( int i = 1; i <= 5; i++ )
{
    while( x[ i ] + krok <= 8 && y[ i ] - krok >= 1 )
    {
        szachownica[ x[ i ] + krok ][ y[ i ] - krok ] = true;
        krok++;
    }
    krok = 1;
}
for( int i = 1; i <= 5; i++ )
{
    while( x[ i ] - krok >= 1 && y[ i ] - krok >= 1 )
    {
        szachownica[ x[ i ] - krok ][ y[ i ] - krok ] = true;
        krok++;
    }
    krok = 1;
}
for( int i = 1; i <= 5; i++ )
{
    while( x[ i ] - krok >= 1 && y[ i ] + krok <= 8 )
    {
        szachownica[ x[ i ] - krok ][ y[ i ] + krok ] = true;
        krok++;
    }
    krok = 1;
}
P-125645
darko202
» 2015-01-28 11:40:27
1.
przekątne różnią się od  (kolumny,wiersz) o pewna stałą i,j od {-1,1}
do {-7,7} (jeśli stoimy w rogu np. (kolumny+i,wiersz+j)
ale abs(i)=abs(j)
jeśli  np. [3,5] to działaj tak samo tylko po każdej zmianie  
wartość wiersza i kolumny musi być {0,..7}

2.

nie załączyłeś swojego kodu dlatego trudno się odnieść do powodu występowania błędu, ale prawdopodobnie próbujesz pisać poza zakres tablicy
a to muszą być komórki z przedziału {0,..7} dla obu kierunków

3.
zastosuj debuging
* włącz tryb debug kompilatora i uruchom w trybie krokowym (oglądaj wartości zmiennych)

* jeśli nie tryb to (oglądaj wartości zmiennych) np.
cout << i << " " << j << " " <<  tab[j];


 
P-125661
Angie
Temat założony przez niniejszego użytkownika
» 2015-01-28 12:40:02
do "przemieszczania się" po przekątnych używam zmiennej krok,(pole bite ma wtedy współrzędne np. (x+krok, y+krok) która ma wartość początkową 1 i którą zwiększam po każdym wykonaniu się pętli while o 1, po jej zakończeniu zmienna krok wraca do początkowej wartości. Jeśli chodzi o pisanie poza zakresem tablicy, to myślałam, że zabezpieczyłam się przed tym warunkami wewnątrz while'ów, ale zapewne jestem w błędzie :D

C/C++
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstdlib>

using namespace std;

bool szachownica[ 8 ][ 8 ];
int x[ 5 ], y[ 5 ], krok = 1;

int main()
{
    for( int i = 1; i <= 8; i++ )
    {
        for( int j = 1; j <= 8; j++ )
        {
            szachownica[ i ][ j ] = false;
        }
    }
   
    for( int i = 1; i <= 8; i++ )
    {
        for( int j = 1; j <= 8; j++ )
        {
            if( szachownica[ i ][ j ] == true )
            {
                cout << i << j << endl;
            }
        }
    }
   
   
    for( int i = 1; i <= 5; i++ )
    {
        do
        {
            cout << endl << "Podaj wspolrzedna x " << i << ". hetmana: ";
            cin >> x[ i ];
            cout << "Podaj wspolrzedna y " << i << ". hetmana: ";
            cin >> y[ i ];
        }
        while( x[ i ] > 8 || y[ i ] > 8 );
       
    }
   
    for( int i = 1; i <= 5; i++ )
    {
        szachownica[ x[ i ] ][ y[ i ] ] = true;
    }
   
    for( int i = 1; i <= 5; i++ )
    {
        while( x[ i ] + krok <= 8 )
        {
            szachownica[ x[ i ] + krok ][ y[ i ] ] = true;
            krok++;
        }
        krok = 1;
    }
    for( int i = 1; i <= 5; i++ )
    {
        while( y[ i ] + krok <= 8 )
        {
            szachownica[ x[ i ] ][ y[ i ] + krok ] = true;
            krok++;
        }
        krok = 1;
    }
   
    for( int i = 1; i <= 5; i++ )
    {
        while( x[ i ] - krok >= 1 )
        {
            szachownica[ x[ i ] - krok ][ y[ i ] ] = true;
            krok++;
        }
        krok = 1;
    }
    for( int i = 1; i <= 5; i++ )
    {
        while( y[ i ] - krok >= 1 )
        {
            szachownica[ x[ i ] ][ y[ i ] - krok ] = true;
            krok++;
        }
        krok = 1;
    }
   
    for( int i = 1; i <= 5; i++ )
    {
        while( x[ i ] + krok <= 8 && y[ i ] + krok <= 8 )
        {
            szachownica[ x[ i ] + krok ][ y[ i ] + krok ] = true;
            krok++;
        }
        krok = 1;
    }
    for( int i = 1; i <= 5; i++ )
    {
        while( x[ i ] + krok <= 8 && y[ i ] - krok >= 1 )
        {
            szachownica[ x[ i ] + krok ][ y[ i ] - krok ] = true;
            krok++;
        }
        krok = 1;
    }
    for( int i = 1; i <= 5; i++ )
    {
        while( x[ i ] - krok >= 1 && y[ i ] - krok >= 1 )
        {
            szachownica[ x[ i ] - krok ][ y[ i ] - krok ] = true;
            krok++;
        }
        krok = 1;
    }
    for( int i = 1; i <= 5; i++ )
    {
        while( x[ i ] - krok >= 1 && y[ i ] + krok <= 8 )
        {
            szachownica[ x[ i ] - krok ][ y[ i ] + krok ] = true;
            krok++;
        }
        krok = 1;
    }
   
   
    for( int i = 1; i <= 8; i++ )
    {
        for( int j = 1; j <= 8; j++ )
        {
            if( szachownica[ i ][ j ] == true )
            {
                cout << endl << i << j << endl;
            }
        }
       
    }
   
    return 0;
}
P-125662
darko202
» 2015-01-28 16:06:56
tak na szybko
w tablicach piszemy od 0 do (wymiar-1)
czyli piszesz poza zakres tablicy  (while( x[ i ] + krok <= 8 && y[ i ] + krok <= 8 ))
P-125674
Angie
Temat założony przez niniejszego użytkownika
» 2015-01-29 02:11:02
Dziękuję pięknie :) Po zmodyfikowaniu program działa jak trzeba :)
P-125708
« 1 »
  Strona 1 z 1