• 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
105 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ź 235 wizyt
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 6 marca 2023 w C i C++ przez martinez369 Początkujący (460 p.)
0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 27 lutego 2023 w C i C++ przez martinez369 Początkujący (460 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...