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

C++ Wyszukanie słowa w tablicy dwuwymiarowej.

Ostatnio zmodyfikowano 2014-12-01 22:43
Autor Wiadomość
Beast667
Temat założony przez niniejszego użytkownika
C++ Wyszukanie słowa w tablicy dwuwymiarowej.
» 2014-11-27 20:13:18
Witam,

Próbuję napisać pseudo grę - wykreślanie słów z tablicy dwuwymiarowej .
Tablica  jest wprowadzana na sztywno (tylko małe litery) z ukrytym słowem, po czym użytkownik wprowadza słowa. Jeśli zostanie znalezione litery w tab zamieniają się na wielkie .

I mam problem z przeszukaniem  tej tab. 2-wymiarowej.  Dodam, że słowo wprowadzone przez użytkownika przechowywane jest  w jednowymiarowej tablicy znaków.
 
Proszę o jakąś podpowiedź.
P-121566
Tomek_z_W11
» 2014-11-27 23:04:39
Domyślam się, że słowo przechowywane w tablicy dwuwymiarowej (to które ma się zamienić na wielkie litery) jest w jednym z wierszy? Jeżeli tak, to robisz dwie pętle, jedna w drugiej, i sprawdzasz kolejne komórki każdego wierszu, mniej więcej wyglądałoby to tak:

C/C++
int i, j; //do petli

for( i = 0; i < rozmiar_tablicy_dwuwymiarowej( pierwszy wymiar ); i++ )
{
    for( j = 0; j < rozmiar_tablicy_dwuwymiarowej( drugi wymiar ); j++ )
    {
        if( tablica_dwuwymiarowa[ i ][ j ] == tablica_jednowymiarowa[ j ] ) //jezeli literki sie zgadzaja, to:
        {
            licznik++; /*w momencie w którym licznik osiągnie wartość rozmiaru tablicy jednowymiarowej(czyli wszystkie literki się zgodzą, to oznacza, że znaleźliśmy szukane słowo*/
        }
        if( licznik == rozmiar_tablicy_jednowymiarowej ) //sprawdzenie wartości licznika
        {
            //zamień literki, do orientacji ile literek wstecz masz zamienić możesz użyć licznika, czyli
            while( licznik > 0 )
            {
                tablica_dwuwymiarowa[ i ][ j ] -= 32; //przesunięcie małych literek o odpowiednią wartość tak, żeby zamieniły się na duże
                j--; //edit. trzeba sie przesuwać wstecz, do poprzednich komórek tablicy dwuwymiarowej
            }
        }
    }
    licznik = 0; //zerowanie licznika, gdyby okazało się, że pare literek się zgadza, ale to za mało
}

w tym poście mogą być drobne nieścisłości, chociażby w petli
while( licznik > 0 )
Może się okazać, że potrzeba zamienić na
while( licznik >= 0 )
 musisz to przemyśleć, przetestować...
P-121591
Beast667
Temat założony przez niniejszego użytkownika
» 2014-12-01 21:21:58
ma przeszukiwac w pionie, poziomie i na ukos
P-121881
Tomek_z_W11
» 2014-12-01 22:43:54
Mam pomysł na pewien algorytm, który będzie STRASZNIE niezoptymalizowany, tzn, zrobić 3 pętle, jedna do wyszukiwania słów w poziomie - kod już napisałem w poprzednim poście, druga do słów w pionie, trzecia do słów na ukos.



Druga pętla wyglądała by mniej więcej tak:

C/C++
for( i = 0; i < rozmiar_tablicy_dwuwymiarowej( pierwszy wymiar ); i++ )
{
    for( j = 0; j < rozmiar_tablicy_dwuwymiarowej( drugi wymiar ); j++ )
    {
        if( tablica_dwuwymiarowa[ j ][ i ] == tablica_jednowymiarowa[ j ] ) //jezeli literki sie zgadzaja, to:
        { //W TYM IFIE WYŻEJ DOKONAŁEM ZMIANY INDEKSÓW
            licznik++; /*w momencie w którym licznik osiągnie wartość rozmiaru tablicy jednowymiarowej(czyli wszystkie literki się zgodzą, to oznacza, że znaleźliśmy szukane słowo*/
        }
        if( licznik == rozmiar_tablicy_jednowymiarowej ) //sprawdzenie wartości licznika
        {
            //zamień literki, do orientacji ile literek wstecz masz zamienić możesz użyć licznika, czyli
            while( licznik > 0 )
            {
                tablica_dwuwymiarowa[ i ][ j ] -= 32; //przesunięcie małych literek o odpowiednią wartość tak, żeby zamieniły się na duże
                j--; //edit. trzeba sie przesuwać wstecz, do poprzednich komórek tablicy dwuwymiarowej
            }
        }
    }
    licznik = 0; //zerowanie licznika, gdyby okazało się, że pare literek się zgadza, ale to za mało
}


Trzecia pętla:

C/C++
for( i = 0; i < rozmiar_tablicy_dwuwymiarowej( pierwszy wymiar ); i++ )
{
    for( j = i; j < rozmiar_tablicy_dwuwymiarowej( drugi wymiar ); j++ ) //W TYM FORZE ZMIENILEM PRZYPISANIE POD j
    {
        if( tablica_dwuwymiarowa[ j ][ j ] == tablica_jednowymiarowa[ j ] ) //jezeli literki sie zgadzaja, to:
        { //W TYM IFIE WYŻEJ DOKONAŁEM ZMIANY INDEKSÓW
            licznik++; /*w momencie w którym licznik osiągnie wartość rozmiaru tablicy jednowymiarowej(czyli wszystkie literki się zgodzą, to oznacza, że znaleźliśmy szukane słowo*/
        }
        if( licznik == rozmiar_tablicy_jednowymiarowej ) //sprawdzenie wartości licznika
        {
            //zamień literki, do orientacji ile literek wstecz masz zamienić możesz użyć licznika, czyli
            while( licznik > 0 )
            {
                tablica_dwuwymiarowa[ i ][ j ] -= 32; //przesunięcie małych literek o odpowiednią wartość tak, żeby zamieniły się na duże
                j--; //edit. trzeba sie przesuwać wstecz, do poprzednich komórek tablicy dwuwymiarowej
            }
        }
    }
    licznik = 0; //zerowanie licznika, gdyby okazało się, że pare literek się zgadza, ale to za mało
}

Uprzedzam, że tego nie sprawdzałem, oraz, że pętla trzecia sprawdzi tylko "górną połowę", innymi słowy sprawdzi na ukos, ale tylko te słowa z prawego górnego rogu.
P-121904
« 1 »
  Strona 1 z 1