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

C++ struktury - UsuwanieCIagów

Ostatnio zmodyfikowano 2019-08-23 18:55
Autor Wiadomość
bill22
Temat założony przez niniejszego użytkownika
C++ struktury - UsuwanieCIagów
» 2019-08-23 17:26:47
Cześć mam taka funkcje do rozwiazania:
funkcję usunCiagi usuwającą ze sznura ciągi sąsiednich elementów sznura w następujący
sposób: omijamy K elementów sznura (lub tyle ile jest, gdy jest mniej), następnie usuwamy
najdłuższy możliwy ciągły fragment zawierający same wartości nieparzyste (być może pusty),
omijamy kolejnych K elementów, usuwamy najdłuższy możliwy ciągły fragment złożony z liczb
nieparzystych, itd. (K jest liczbą całkowitą dodatnią będącą parametrem funkcji). Pamięć
zajmowana przez usuwane elementy ma zostać zwolniona. Funkcja nie może używać tablic,
pomocniczych sznurów ani struktur danych dostępnych w bibliotece standardowej (wektorów, list,
kolejek, itp);

poniżej moj Kod

C/C++
void sznur::usunCiagi( int K )
{
    Node * szuk = pocz;
    Node * zaszuk = nullptr;
    Node * koniec = szuk;
    Node * zaszuk_koniec = nullptr;
    bool czy_nieparzy = false;
    while( true )
    {
        for( int i = 0; i < K; i++ )
        {
            if( szuk == nullptr )
            {
                return;
            }
            zaszuk = szuk;
            szuk = szuk->nast;
        }
        while( szuk != nullptr )
        {
            Node * koniec2 = szuk->nast;
            Node * zaszuk2 = szuk;
            for( int j = 1; j < ileJest; j++ )
            {
                int wartosc = szuk->dane;
                Node * szuk2 = szuk;
                if( wartosc % 2 == 1 && czy_nieparzy == true )
                {
                    while( szuk2 != koniec2 )
                    {
                        wartosc = szuk2->dane;
                        szuk2 = szuk2->nast;
                    }
                }
                koniec2 = koniec2->nast;
                zaszuk2 = zaszuk2->nast;
            }
            if( zaszuk == nullptr )
            {
                while( pocz != koniec )
                {
                    Node * tmp = pocz->nast;
                    delete pocz;
                    pocz = tmp;
                }
                szuk = pocz;
            }
            else if( zaszuk != nullptr )
            {
                zaszuk->nast = koniec;
                while( szuk != koniec )
                {
                    Node * tmp = szuk->nast;
                    delete szuk;
                    ileJest--;
                    szuk = tmp;
                }
            }
        }
    }
}
moze mi ktos wytłumaczyć jak mam usunać same wartosci nieparzyste bo sobie nie moge poradzić z tą funkcja

PS sorry że tak wstawiam ale to moj pierwszy raz na tym forum
P-175100
pekfos
» 2019-08-23 17:40:50
A masz problem z..?
P-175101
bill22
Temat założony przez niniejszego użytkownika
forum
» 2019-08-23 18:32:37
problem jest w tym nie wiem jak mam usunąć same wartosci nieparzyste?
i nie wiem dlaczego wywala w tym miejscu blad jak wezme debbuer w codeblocks

else if( zaszuk != nullptr )
            {
                zaszuk->nast = koniec;
                while( szuk != koniec )
                {
                    Node * tmp = szuk->nast;
                    delete szuk;
                    ileJest--;
                    szuk = tmp;
                }
            }
P-175102
pekfos
» 2019-08-23 18:55:53
problem jest w tym nie wiem jak mam usunąć same wartosci nieparzyste?
To nie jest problem, jaki można mieć z tym zadaniem. Pomijając na razie te całe "omijanie K":
usuwamy najdłuższy możliwy ciągły fragment zawierający same wartości nieparzyste
Usuwanie nie ma tu nic wspólnego z liczbami nieparzystymi. Najpierw masz znaleźć najdłuższy ciąg zawierający tylko liczby nieparzyste, potem masz ten ciąg usunąć. Jeśli już, masz problem z tym pierwszym. Znaleźć ten ciąg możesz jedną pętlą, analogicznie do typowego wyszukiwania maksimum. Kod, który masz, jest co najmniej przekombinowany, o ile w ogóle jest na temat.
P-175103
« 1 »
  Strona 1 z 1