• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z funckją usun(czworki)

Cloud VPS
0 głosów
331 wizyt
pytanie zadane 6 marca 2023 w C i C++ przez martinez369 Użytkownik (520 p.)
zamknięte 23 kwietnia 2023 przez martinez369

Cześć mam problem z funkcją poniżej

Oto treść:

"funkcję usun rozpatrującą rozłączne czwórki elementów sznura i usuwającą całą czwórkę jeśli jej
trzeci element jest podzielny przez pierwsze dwa, albo tylko ostatni element czwórki w
przeciwnym przypadku. W przypadku sznura o długości nie podzielnej przez 4 końcowe elementy
(nie wchodzące w skład żadnej czwórki – czwórki wybierane są tak, że pierwszy element sznura
jest początkowym elementem pierwszej czwórki) nie są modyfikowane. Funkcja nie może używać
tablic, pomocniczych sznurów ani struktur danych dostępnych w bibliotece standardowej
(wektorów, list, kolejek, itp);"

Mój kod:

void sznur::usun()
{
    Node*zaszuk=nullptr;
    Node*a=pocz;
    while(a!=nullptr && a->nast!=nullptr && a->nast->nast!=nullptr && a->nast->nast->nast->nast!=nullptr)
    {
        Node*jeden=a;
        Node*dwa=a->nast;
        Node*trzy=a->nast->nast;
        Node*cztery=a->nast->nast->nast;
        if(trzy->dane%jeden->dane==0 && trzy->dane%dwa->dane==0)
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=cztery->nast;
            }
            else
            {
                pocz=cztery->nast;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            delete cztery;
            ileJest=ileJest-4;
            if(zaszuk==nullptr)
            {
               a=pocz;
            }
            else
            {
               a=zaszuk->nast;
            }
        }
        else
        {
            trzy->nast=cztery->nast;
            delete cztery;
            ileJest--;
            zaszuk=dwa;
            a=zaszuk->nast;
        }
    }
}

Problem polega na tym iż "w sznurze 2,3,6,7,8,8,8,9,9,10,90,100 stanie się pusty" nie dokońca jest pusty zostaną wyrzucone 9,10,90,100 te wartości końcowe sprawdzając debuggerem funkcja działa ok ale po jakim czasie jak wskaże na "if(zaszuk==nullptr)" odrazu przeskakuje do main do wypisywania wartości a przecież 90 dzieli się nie 9 i 90 dzieli się na 10 proszę o podpowiedź gdzie robię błąd

komentarz zamknięcia: najlepsza

1 odpowiedź

0 głosów
odpowiedź 6 marca 2023 przez tangarr Mędrzec (155,180 p.)
wybrane 23 kwietnia 2023 przez martinez369
 
Najlepsza

Spójrz jeszcze raz na warunek pętli

a!=nullptr && // pierwszy element
a->nast!=nullptr &&  // drugi element
a->nast->nast!=nullptr && // trzeci element
a->nast->nast->nast->nast!=nullptr // piąty element !!!

Ostatnia czwórka nie jest przetwarzana

komentarz 6 marca 2023 przez martinez369 Użytkownik (520 p.)
Jak to zrobić żeby ostatnia czwórka powinna być przetwarzana??bo nie mam na to pomysłu
1
komentarz 6 marca 2023 przez tangarr Mędrzec (155,180 p.)
Dlaczego sprawdzasz piąty element?
komentarz 7 marca 2023 przez martinez369 Użytkownik (520 p.)
dzięki za wyjasnienie problemu nie zauważyłem w pętli while że sprawdzam o jeden element za dużo

Podobne pytania

0 głosów
1 odpowiedź 512 wizyt
pytanie zadane 27 lutego 2023 w C i C++ przez martinez369 Użytkownik (520 p.)
0 głosów
0 odpowiedzi 184 wizyt
0 głosów
0 odpowiedzi 390 wizyt

93,463 zapytań

142,459 odpowiedzi

322,728 komentarzy

62,842 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...