tablica z wartościami bool i oznaczanie bitych przez hetmana pól na szachownicy jako wartość true
Ostatnio zmodyfikowano 2015-01-29 02:11
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 ) 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; }
|
|
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];
|
|
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 #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; }
|
|
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 )) |
|
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 :) |
|
« 1 » |