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

Problem z usuwaniem trójek w sznure w c++

Cloud VPS
0 głosów
560 wizyt
pytanie zadane 11 czerwca 2023 w C i C++ przez martinez369 Użytkownik (520 p.)

Mam problem z zadaniem potrzebuje pomocy

Mój kod wygląda następująco

void sznur::usun(int G)
{
    Node*tmp=pocz;
    int ilosc=1;
    int war=0;
    float srd=0;
    while(tmp!=nullptr)
    {
        if(tmp->dane%2==0)
        {
            srd+=tmp->dane;
            ilosc++;
        }
        tmp=tmp->nast;
        war++;
    }
    srd=srd/ilosc;
    Node*zaszuk=nullptr;
    Node*a=pocz;
    while(a!=nullptr && a->nast!=nullptr && a->nast->nast!=nullptr)
    {
        Node*jeden=a;
        Node*dwa=a->nast;
        Node*trzy=a->nast->nast;
        if(srd>G)
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy->nast;
            }
            else
            {
                pocz=trzy->nast;
            }
            delete dwa;
            ileJest--;
            zaszuk=trzy;
            a=zaszuk->nast;
        }
        else
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy->nast;
            }
            else
            {
                pocz=trzy->nast;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest=ileJest-3;
            zaszuk=trzy;
            a=zaszuk->nast;
        }
    }
}
//7 2 6 4 8 9 3 2 5 6 500 2 2 1 1 1 7

Pytanie brzmi jak usunąć wartość np przy wartośći 7,2,6 którą usuwa mój kod ale jak usunąć 2 i 6 znajdujących się w dalszej części sznura?? z góry dzięki za pomoc

3 odpowiedzi

+1 głos
odpowiedź 12 czerwca 2023 przez infinityhost Użytkownik (780 p.)
edycja 12 czerwca 2023 przez infinityhost
To jest mega fajny temat, pozwala dopasować pamięć idealnie. Jedna z najprzyjemniejszych rzeczy w C/C++. To jest parę metod do operowania na liście łączonej i dosłownie kilka miejsc kluczowych które modyfikujesz, żeby uzyskać określony rezultat. Fachowo , te miejsca kluczowe obudowujesz systemem zabezpieczeń programowania obiektowego lub dopasowanymi funkcjami strukturalnego. Po pierwsze, poznaj te metody operowania na liście - 1) utwórz pustą listę (zwykle początek jest tam jakiś a koniec to null) 2) dodaj funkcję dodającą elementy 3) dodaj funkcję usuwającą określone elementy z listy 4) dodaj funkcję wyświetlającą elementy 5) dodaj funkcję czyszczącą listę. Potem siadaj do tego zadania.
0 głosów
odpowiedź 11 czerwca 2023 przez TOWaD Mądrala (6,480 p.)

pewnie coś w tym stylu (to niekoniecznie poprawnie):

void del (Node* jedenZtrzech){
	Node* obecny=trzy->next;
	Node* poprzedni=trzy;
	while (obecny->data!=jedenZtrzech->data){
		if(obecny==nullptr)return; // wyjście jeśli koniec kolejki;
		poprzedni=obecny;
		obecny=obecny->next;
}
	// jeśli znaleziono;
	poprzedni->next=obecny->next;
	delete obecny;
	return;
}

 

0 głosów
odpowiedź 11 sierpnia 2023 przez martinez369 Użytkownik (520 p.)
void sznur::usun(int G)
{
    Node*tmp=pocz;
    int ilosc=1;
    int war=0;
    float srd=0;
    while(tmp!=nullptr)
    {
        if(tmp->dane%2==0)
        {
            srd+=tmp->dane;
            ilosc++;
        }
        tmp=tmp->nast;
        war++;
    }
    srd=srd/ilosc;
    Node*zaszuk=nullptr;
    Node*a=pocz;
    while(a!=nullptr && a->nast!=nullptr && a->nast->nast!=nullptr)
    {
        Node*jeden=a;
        Node*dwa=a->nast;
        Node*trzy=a->nast->nast;
        Node* szukaj = trzy->nast;
        Node* poprzedni = trzy;
        int licznik = 2;
        if(srd>G)
        {
            if (zaszuk != nullptr) {
                zaszuk->nast = jeden;
            } else {
                pocz = jeden;
            }
            delete dwa;
            ileJest--;
            zaszuk = trzy;
            a = zaszuk->nast;
        } else {
            if (zaszuk != nullptr) {
                zaszuk->nast = szukaj->nast->nast;
            } else {
                pocz = poprzedni->nast->nast->nast->nast;
            }

            delete jeden;
            delete dwa;
            delete trzy;
            ileJest -= 3;
        while (szukaj != nullptr && licznik > 0) {
                if (szukaj->dane == jeden->dane || szukaj->dane == dwa->dane || szukaj->dane == trzy->dane) {
                    poprzedni->nast = szukaj->nast;
                    delete szukaj;
                    ileJest--;
                    szukaj = poprzedni->nast;
                    licznik--;
                } else {
                    poprzedni = szukaj;
                    szukaj = szukaj->nast;
                }
            }
            zaszuk = trzy;
            a = zaszuk->nast;
        }
    }
}
//7 2 6 4 8 9 3 2 5 6 500 2 2 1 1 1 7

wynik mojego kodu jest 3 , 5 , 500 , 7 ,a powinien być 3,500 , 7 , zacząłem poprawiać kod i teraz pytanie bo nadal nie rozumiem jak usunąć dalsze elementy 2 i  6 coś próbowałem ale mam wątpliwośći co do else i ponim nie podoba mi się moje rozwiązanie czy ktoś mógłby mi pomóc jak to by miało wyglądać i troszeczke naprowadzić??

Podobne pytania

0 głosów
0 odpowiedzi 94 wizyt
0 głosów
2 odpowiedzi 418 wizyt
pytanie zadane 5 czerwca 2023 w C i C++ przez p4wix Obywatel (1,040 p.)
0 głosów
0 odpowiedzi 1,155 wizyt
pytanie zadane 12 listopada 2023 w C i C++ przez whiteman808 Gaduła (4,820 p.)

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

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