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

problem z usunTrojki

0 głosów
491 wizyt
pytanie zadane 14 maja 2023 w C i C++ przez martinez369 Użytkownik (520 p.)

Cześc mam problem z zadaniem i potrzebuje pomocy oto treść

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

O to mój kod:

void sznur::usun()
{
//    Node*tmp=pocz;
//    int ilosc=1;
//    float srd=0;
//    int war=0;
//    while(tmp!=nullptr)
//    {
//        if((tmp->dane+tmp->nast->nast->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;
        float srd=(jeden->dane+trzy->dane)/2.0;
        if(dwa->dane==srd)
        {
            jeden->nast = trzy->nast;
            delete dwa;
            ileJest--;
            zaszuk=jeden;
            a=zaszuk->nast;
        }
        else
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy->nast;
            }
            else
            {
                pocz=trzy->nast;
            }
            jeden->nast=trzy->nast;
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest=ileJest-3;
            zaszuk=trzy;
            a=zaszuk->nast;
        }
    }
}
//7 6 6 3 3 3 2 1 1 1 1 odp 3 3 1 1 
//9 7 5 5 4 4 3 2 1 1 odp 9 5 3 1 1 

problem polega na tym że nie wyświetla mi przy 1 przykładzie 3 1 1 a przy drugim 9 , 3 , 1 ,nie wiem już gdzie jest błąd czy problem jest ze średnią jeżeli tak to jak wyliczyć średnie z pierwszego i trzeciego elementu

1
komentarz 14 maja 2023 przez TOWaD Mądrala (6,480 p.)
edycja 17 maja 2023 przez TOWaD

edit 2 :: Ten mój komentarz, to bzdura.

Na mój gust brakuje jednego else if (ostatni - obecny < 3)

edit:: a właściwie:


    Node*jeden=a;
        if(jeden!=null)Node*dwa=a->nast;
else{//.... przypadek szczególny}
       if(dwa!=null) Node*trzy=a->nast->nast;
else {//...przypadek szczególny; }

bo to nie ładnie wskazywać poza listę.

 

 

1 odpowiedź

0 głosów
odpowiedź 17 maja 2023 przez TOWaD Mądrala (6,480 p.)

Może ta odpowiedź jest bardziej poprawna : (;

online

#include "sznur.h"

sznur::sznur() {
    //ctor
}

sznur::~sznur() {
    //dtor
}

void sznur::dodaj() {
    int data;
    do {
        std::cin>>data;
        if(std::cin.fail())
            break;
        l.push(data);
    } while(std::cin.peek()!='\n');
}
void sznur::usun() {
    using Node = element;
    // using Node->nast=Node->next;
///    Node*zaszuk=nullptr;
    Node*a=l.getFirst();
    Node* last = a;
    int stop=10;
    while(a!=nullptr && a->next!=nullptr && a->next->next!=nullptr&&stop--) {
        Node*jeden=a;
        Node*dwa=a->next;
        Node*trzy=a->next->next;
        std::cout<<"jeden dwa trzy "<<jeden->data<<' '<<dwa->data<<' '<<trzy->data<<std::endl;
        float srd=(jeden->data+trzy->data)/2.0;
        float wartosc=dwa->data-srd;
        wartosc=wartosc<0?wartosc*(-1):wartosc;
        bool flaga = wartosc<0.000000001;
        std::cout<<"\n wartosc="<<wartosc<<", flaga="<<flaga<<std::endl;
        if(flaga /**dwa->date==srd*/) {
///         jeden->next = trzy->next;
            jeden->next=trzy;
            delete dwa;
///         zaszuk=jeden;
///         a=zaszuk->next;
            if(trzy->next!=nullptr) {
                last=trzy;
                a=last->next;

            } else {
                last=trzy;
                a=last->next=nullptr;
            }
        } else {
///            if(zaszuk!=nullptr) {
///                zaszuk->next=trzy->next;
///            } else {
///                pocz=trzy->next;
///            }
///            jeden->next=trzy->next;
            if(last==l.getFirst()) {
                for(int i=0; i<3; i++)
                    l.pop();
                last=a=l.getFirst();


            } else if(trzy->next!=nullptr) {
                delete jeden;
                delete dwa;
                last->next=trzy->next;
                a=last->next;
                delete trzy;

            } else {
                delete jeden;
                delete dwa;
                delete trzy;
                a=last->next=nullptr;

                break;
            }
///            ileJest=ileJest-3;
///            zaszuk=trzy;
///            a=zaszuk->next;
        }
    }
}

 

Podobne pytania

0 głosów
1 odpowiedź 393 wizyt
0 głosów
2 odpowiedzi 192 wizyt
pytanie zadane 3 sierpnia 2023 w C i C++ przez martinez369 Użytkownik (520 p.)
0 głosów
3 odpowiedzi 559 wizyt
pytanie zadane 11 czerwca 2023 w C i C++ przez martinez369 Użytkownik (520 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,786 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...