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

Problem z biblioteką usuń

Object Storage Arubacloud
0 głosów
112 wizyt
pytanie zadane 3 sierpnia 2023 w C i C++ przez martinez369 Początkujący (460 p.)

Cześć mam problem z funkcją usuń oto treść zadania

Kod mojej funkcji wygląda tak

void sznur::usun(int K)
{
    Node*zaszuk=nullptr;
    Node*szuk=pocz;
    while(szuk!=nullptr)
    {
        Node*koniec=szuk;
        Node*poprzedni=szuk->nast;
        int c=1;
        while(poprzedni!=nullptr && koniec->dane%K==0)
        {
            c++;
            koniec=poprzedni;
            poprzedni = poprzedni->nast;
        }
        if(c>K)
        {
            Node*killer=szuk;
            szuk=poprzedni;
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=poprzedni;
            }
            else
            {
                pocz=poprzedni;
            }
            delete killer;
            ileJest--;
        }
        else
        {
            zaszuk = koniec;
            szuk = poprzedni;
        }
    }
}
//10 10 10 9 9 9 8 8 6 5 4 3 2 2 1 1 K=2 -> 9 9 4 3 1
//6 6 6 3 2 1 1 K=3 -> 1 1
//10 10 9 8 8 8 7 6 6 5 4 4 K=2 -> pusty

problem pojawia się przy ostatnim sznurze który powinien być pusty a wg, mojego rozwiązania wyświetla ostatnie dwie liczby sznura 4 , 4 pytanie gdzie źle zrobiłem rozwiązanie kodu gdzie należy poprawić kod proszę o pomoc z góry dziękuje za pomoc

 

2 odpowiedzi

0 głosów
odpowiedź 4 sierpnia 2023 przez Eriss69 Gaduła (4,470 p.)

Lap poprawki:

void sznur::usun(int K)
{
    Node *zaszuk = nullptr;
    Node *szuk = pocz;
    while (szuk != nullptr)
    {
        Node *koniec = szuk;
        Node *poprzedni = nullptr; // Poprawka 1:
        int c = 0; // Poprawka 2: 
        while (koniec != nullptr && koniec->dane % K == 0)
        {
            c++;
            poprzedni = koniec; // Poprawka 3:
            koniec = koniec->nast;
        }
        if (c >= K) // Poprawka 4: 
        {
            Node *killer = szuk;
            if (zaszuk != nullptr)
            {
                zaszuk->nast = koniec;
            }
            else
            {
                pocz = koniec;
            }
            while (szuk != koniec)
            {
                Node *temp = szuk;
                szuk = szuk->nast;
                delete temp;
                ileJest--;
            }
        }
        else
        {
            zaszuk = poprzedni; // Poprawka 5:
            szuk = koniec;
        }
    }
}

 

0 głosów
odpowiedź 4 sierpnia 2023 przez j23 Mędrzec (194,920 p.)

W sumie mogłeś dać taką ilość kodu, by można było sobie potestować tę twoją funkcję.

Ale jest AI i można sobie wygenerować to, czego nie ma ;)

Nie chciało mi się przerabiać twojej funkcji, napisałem własną:

#include <iostream>


struct Node {
    int dane;
    Node* nast;
};

Node* createLinkedList(int arr[], int n) {
    if (n == 0) {
        return nullptr;
    }
    
    Node* head = new Node{arr[0], nullptr};
    Node* curr = head;
    
    for (int i = 1; i < n; i++) {
        curr->nast = new Node{arr[i], nullptr};
        curr = curr->nast;
    }
    
    return head;
}

void destroyLinkedList(Node* head) {
    while (head != nullptr) {
        Node* next = head->nast;
        delete head;
        head = next;
    }
}

void printLinkedList(Node* head) {
    while (head != nullptr) {
        std::cout << head->dane << " ";
        head = head->nast;
    }
    std::cout << std::endl;
}


Node* usun(Node* pocz, int K)
{
    Node* n0 = nullptr;
    Node* n1 = pocz;

    while (n1) {
        
        Node* n3 = n1;
        Node* n2 = nullptr;
        int c = 0;
        
        while(n3 && n3->dane % K == 0) { 
            n2 = n3; 
            n3 = n3->nast; 
            ++c; 
        }

        if(c == 0) {
            n2 = n3; 
            n3 = n3->nast; 
        }

        
        if(c > 1) {
            Node* tmp = n3 ? n3->nast : n3;
            if(n0) n0->nast = tmp;
            if (n1 == pocz) pocz = tmp;
            
            while (c--) {
                n3 = n1->nast;
                delete n1;
                n1 = n3;
            }
            
            n1 = tmp;
        } else { 
            n0 = n2;
            n1 = n3;
        }
    }
    
    return pocz;
}



int main(void)
{
    //int tab[] = { 10, 10, 10, 9, 9, 9, 8, 8, 6, 5, 4, 3, 2, 2, 1, 1 }; int K = 2; // -> 9 9 4 3 1
    //int tab[] = { 6, 6, 6, 3, 2, 1, 1 }; int K = 3; // -> 1 1
    int tab[] = { 10, 10, 9, 8, 8, 8, 7, 6, 6, 5, 4, 4 }; int K = 2; // -> pusty
    
    Node* list = createLinkedList(tab, sizeof(tab) / sizeof(int));
    
    list = usun(list, K);
    printLinkedList(list);
    destroyLinkedList(list);
}

 

Podobne pytania

0 głosów
1 odpowiedź 254 wizyt
0 głosów
1 odpowiedź 150 wizyt
pytanie zadane 6 marca 2023 w C i C++ przez martinez369 Początkujący (460 p.)
0 głosów
1 odpowiedź 274 wizyt
pytanie zadane 27 lutego 2023 w C i C++ przez martinez369 Początkujący (460 p.)

92,694 zapytań

141,606 odpowiedzi

320,106 komentarzy

62,051 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...