• 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++

Object Storage Arubacloud
0 głosów
265 wizyt
pytanie zadane 11 czerwca 2023 w C i C++ przez martinez369 Początkujący (460 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 (5,700 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 Początkujący (460 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
2 odpowiedzi 167 wizyt
pytanie zadane 5 czerwca 2023 w C i C++ przez p4wix Obywatel (1,040 p.)
0 głosów
0 odpowiedzi 357 wizyt
pytanie zadane 12 listopada 2023 w C i C++ przez whiteman808 Obywatel (1,820 p.)
+1 głos
0 odpowiedzi 262 wizyt
pytanie zadane 9 marca 2021 w C i C++ przez ifuknowme555 Początkujący (410 p.)

92,558 zapytań

141,407 odpowiedzi

319,569 komentarzy

61,945 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!

...