Mam problem z zadaniem potrzebuje pomocy oto treść mojego zadania
funkcja usun rozpatrującą rozłączne trójki elementów sznura i usuwającą: drugi element trójki jeśli średnia trójki jest większa od G (gdzie G jest liczbą całkowitą będącą parametrem funkcji), a w przeciwnym przypadku - całą trójkę oraz dwa, znajdujące się najbliżej za trójką (czyli pierwszy i drugi odpowiedni, idąc w kierunku końca sznura), elementy przechowujące liczby występujące w tej trójce (o ile takie elementy istnieją; przy czym jeśli jest tylko jeden taki element, to też jest usuwany). Usunięte elementy za trójkami" nie wchodzą skład kolejnych sprawdzanych trójek. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona. Funkcja nie może używać tablic, pomocniczych sznurów ani struktur danych dostępnych w bibliotece standardowej (wektorów, list, kolejek, itp.). Przykład: dla G-100 sznur 7,2,6,4,8,9,3,2,5,6,500,2,2,1,1,1,7 zostanie przekształcony do postaci 3,500,7 (pierwsza trójka to 7,2,6; jej średnia nie jest większa niż G, więc usuwamy całą trójkę i do tego 2 i 6 znajdujące się w dalszej części sznura (pierwsze znalezione w dalszej części sznura liczby z trójki); kolejna trójka to 4,8,9, jej średnia nie jest większa niż G, ale usuwamy tylko tę trójkę, bo w dalszej części sznura nie ma 4, 8 ani 9; kolejna trójka to 3,5,500 (2 i 6 zostały wcześniej usunięte), ma ona średnią większą od G, więc usuwamy z niej 5, kolejna trójka to 2,2,1, jej średnia nie jest większa od G, więc usuwamy całą trójkę i do tego 1,1 stojące za nią)
Oto mój kod:
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;
}
}
}
problem polega na tym iż nie rozumiem jak usunąć dalsze elementy sznura chodzi mi o to zdanie "pierwsza trójka to 7,2,6; jej średnia nie jest większa niż G, więc usuwamy całą trójkę i do tego 2 i 6 znajdujące się w dalszej części sznura (pierwsze znalezione w dalszej części sznura liczby z trójki);" Moje pytanie brzmi jak usunąć dalsze elementy czyli 2 i 6 bo usunięciem trójki nie mam problemu ale mam problem z usunięciem 2 i 6 proszę o pomoc w rozwiązaniu zadania z góry dziękuje