Cześć,
Po pierwsze formatowanie kodu - jak widzisz nikomu nie chce się babrać w tym co zamieściłeś, bo można dostać oczopląsu :P Zamieść kod w znacznikach kodu, sformatuj wcięcia i najlepiej pododawaj komentarze w miejscach, o których wspominasz w poście.
Mówisz, że gdzieś dodajesz drugi warunek? Jaki warunek? Gdzie ten warunek? Który to?
Program zaczyna wariować? Jak? Wykonują się dwa warunki... jednocześnie?? o.O
Polityka forum jest taka, że chcemy pomagać, ale precyzuj pytanie i swój problem - nikt nie będzie zgadywał ani się domyślał :(
Okej, masz rację, już postaram się poprawić swój błąd.
Zadanie polega na tym aby uzupełnić program zawierający gotowe funkcję o 4 dodatkowe polecenia, tak aby możliwe było rozwiązanie za jego pomocą sudoku. W początkowej fazie program z pliku tekstowego pobiera w połowie rozwiązane sudoku, gdzie puste pola zastępione są zerami. Naszym zadaniem jest dodanie wspomnianych 4 opcji
-ustaw ( w miejscu pustego pola, które wskazuje użytkownik ustawia liczbę wskazaną przez użytkownika - gdy jest to możliwe program umieszcza we wskazanym miejscu wpisaną przez użytkownika liczbe, jeśli nie jest - wyrzuca komunikat zwrotny). Polecenie ustaw przyjmuje dwa parametry: komórkę, w której ma zostać wpisana wartość oraz liczbę do wpisania, np. ustaw A1 8
-podpowiedz (użytkownik wskazuje numer pola, a program dla tego pola wypisuje liczby, które można w nie wstawić). Przyjmuje jeden parametr – komórkę, dla której mają być wyświetlone informacje, np. podpowiedz A1
-wymaż (wymazuje liczbę ze wskazanego pola, ale tylko i wyłącznie te , które zostały wczesniej wpisane przez użytkownika). Polecenie wymaz przyjmuje jeden parametr: komórkę, z której należy usunąć wartość, np. wymaz A1
-koniec (kończy pracę programu)
Mój problem polega na tym, że dla niektórych pól spełniane są dwa warunki jednocześnie - nie wiem dlaczeg, nie mogę dosuzkać się błędu. Dzieję się tak dla przypadku, gdy pole jest zerem i nie da się w nie wpisać chcianej wartości np A1 1. Czy ktoś jest w stanie mi pomóc w znalezieniu błędu, ewentualnie pokazać łatwiejszą drogę do wykonania tego zadania?
Zadanie dla większości z Was prawdopoodbnie wyda się trywialne, niestety - dla mnie - początkującego nie jest to takie oczywiste. Poniżej zamieszczam już poprawnie sformatowany fragment kodu pisamy edytowany przeze mnie wraz z komentarzami. Mam nadzieję, że tym razem wszystko wytłumaczyłem w należyty sposób.
bool koniec = false;
do {
printf( "Polecenie: " );
char polecenie[100];
fflush(stdout);
fgets( polecenie, 100, stdin );
if (strstr( polecenie, "ustaw") == polecenie) { //rozpartrujemy przypadek polecenia ustaw
int y = polecenie[6]; //zapisuje w zmiennej y 6 znak polecenia ustaw - symbol kolumny np A
int x = polecenie[7]; //zapisuje w zmiennej x 7 znak polecenia ustaw - numer wiersza np 3
int nowa_wartosc = polecenie[9]; // zapisuje w zmiennej wartość, która uzytkownik chce wstawic we wskazanym polu np 3
for (int k = 0; k<9; ++k) { // pętla umożliwiająca sprawdzenie warunku po wszystkich kolumnach i wierszach
if (sudoku[y-65][k] == nowa_wartosc-48 || sudoku[k][x-49] == nowa_wartosc-48 || sudoku[y-65][x-49] != 0) { // warunek sprawdzający czy wartość wystepuje w kolumnie/wierszu bądź czy dane pole jest 'puste' tzn czy jest zerem. Jeśli którykolwiek warunek zostanie spełniony wypluje komunikat o tym że nie może ustawić danej wartosci w tym miejscu. Od kolumny y odejmujemy 65 - czyli wartość A z tabliscy ASCII (tak aby zamienic na liczbe np A na 0 ) w przypadku x odejmujemy 49 czyli 1. Od nowej wartości odejmujemy 0.
cout<<"Nie mozna ustawic takiej wartosci ("<<polecenie;
for (int y=0;y<9;y++) for (int x=0;x<9;x++) printf( "%s%d%s", ((x>0)?" ":""), sudoku[y][x], ((x==8)?"\n":"") ); // przepisuje tablice sudoku bez zmian
break; //(?) kończy pętle w momencie spełnienia warunku jednokrotnie (?)
}
}
for (int p = 0; p<9; ++p) { //druga pętla lecąca po wszystkich kolumnach i wierszach - gdy umieszczałem w jednej - pomija pierwszy warunek (?)
if (sudoku[y-65][p] != nowa_wartosc-48 && sudoku[p][x-49] != nowa_wartosc-48 && sudoku[y-65][x-49] == 0) { // jeśli wartość nie występuje w kolumnie ani w wierszu i do tego pole jest zerem ustawi wskazaną przez użytkownika wartość.
sudoku[y-65][x-49] = nowa_wartosc-48; // nadpisuje we wskazanym miejscu daną wartość, jeśli warunek zostanie spełniony
for (int y=0;y<9;y++) for (int x=0;x<9;x++) printf( "%s%d%s", ((x>0)?" ":""), sudoku[y][x], ((x==8)?"\n":"") ); //wyrzuca tablice ze zmienioną wartością
}
}
}
} while (!koniec);
return EXIT_SUCCESS;
}