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

Tak jsem si zkoušel naprogramovat seznam, ale blbne mi funkce Find, netuším proč, při node = node->next se do node přiřadí 0. Netušíte proč?
Tady je kód: http://www.sourcepod.com/mafpzl35-18993
Moc díky za veškeré rady, Katsu
Offline
Zdravím,
prvně pochválím, je to vcelku dobře napsané.
Co se týče problému, ono se nepřiřadí jak píšeš k node = node->next nula, ale pokud si všimneme, tak funkce bool List::Find(int data) správně vrací true nebo false.
To znamená, že v našem případě máme ve spojovém seznamu pouze jeden prvek, s číslem 8. Následně pak hledáme 7, což v seznamu není a vyhodí to zmiňovanou 0.
Zkusme si schválně namátkou dát:
cout << a.Find(8) << endl;
To nám určitě vyhodí jedničku.
Jinak samozřejmě budeme Find testovat:
if (a.Find(8)) {
cout << Nalezeno. << endl;
}Jo a ještě doporučím takovou zvyklost - pokud chceš být dobrý programátor, nauč se to. Tam, kde máme návratový typ funkce (return) a jeden příkaz if, tak se to snažme dávat do tzv. ternárního operátoru, pro příklad jak máme ve zdrojovém kódu:
bool List::IsEmpty() {
if (first == NULL) {
return true;
}
return false;
}Tak je z hlediska efektivity dobrá jednořádková konstrukce:
bool List::IsEmpty() {
return (first == null ? true : false);
}Nicméně netvrdím, že je první volba špatně.
Offline
↑ Stýv:
Jojo, jde.
Je to nejefektivnější a nejkratší způsob - díky za dodatek. Je to zkrácení ternárního operátoru.
Ještě dodám, že funkce na test prázdného zásobníku je nejsprávněji takto:
bool List::IsEmpty() const {
return (first == null);
}Offline