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