Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1

Ahoj,
mohl by mi někdo pomoci s touto fcí?
potřebovala bych ji předělat tak, aby neodstraňovala jen první výskyt, ale všechny výskyty hledaného prvku (v tomto případě všechny sudé prvky).
Děkuji
Bag* Bag::odstranSude(Bag* Elem)
{
Bag::Elem *pom;
Bag::Elem *pr=0; //pr-predchozi
Bag::Elem *c=celo; //c-aktualni
while(c!=0) // dokud se nedojde k poslednímu prvku
{
if(c->prvek%2==0)//když je aktuální číslo sudé vymaže se
{
if(pr)
{
pom=c->dalsi;
delete c;
pr->dalsi=pom;
if(!pom)
volny=0;
return this;
}
else
{
pom=celo->dalsi;
delete celo;
celo=pom;
if(!pom)
volny=0;
return this;
}
}
else //jinak
{
pr=c; //predchozí=aktuální
c=c->dalsi; //aktuální=dalsi
}
}
}Offline

Dříve se to ukončí, protože po odstranění prvního prvku se provede return. Myslím že by mohlo stačit return this přesunout až úplně nakonec.
A do *pr by asi bylo lepší na začátku ukládat NULL než 0, ikdyž to možná dělá to samé, je to s NULLem transparentnější.
Offline

Když dám return this na konec tak se to zasekne.
Offline

V c totiž zůstane uloženo to, co se smazalo a tak je stále splněno c!=0. Takže místo prvního return this dát c=pom;
možná to bude chtít i jiné úpravy, ale return se určitě musí provést, až se dojde na konec seznamu.
Offline

Díky
Offline
Stránky: 1