Matematické Fórum

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

#1 04. 06. 2013 10:22

Katsushiro
Místo: Rožnov pod Radhoštěm
Příspěvky: 144
Škola: VŠB TUO - FEI
Pozice: student
Reputace:   
 

C++ - spojový seznam - problém ve fci Find()

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

 

#2 06. 06. 2013 01:33 — Editoval RePRO (06. 06. 2013 01:50)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ - spojový seznam - problém ve fci Find()

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:

Code:

cout << a.Find(8) << endl;

To nám určitě vyhodí jedničku.

Jinak samozřejmě budeme Find testovat:

Code:

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:

Code:

bool List::IsEmpty() {
    if (first == NULL) {
        return true;
    }
    return false;
}

Tak je z hlediska efektivity dobrá jednořádková konstrukce:

Code:

bool List::IsEmpty() {
    return (first == null ? true : false);
}

Nicméně netvrdím, že je první volba špatně.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 06. 06. 2013 02:30

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: C++ - spojový seznam - problém ve fci Find()

↑ RePRO: jde v C++ taky

Code:

return (first==NULL);

?

Offline

 

#4 06. 06. 2013 08:52 — Editoval RePRO (06. 06. 2013 08:54)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ - spojový seznam - problém ve fci Find()

↑ 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:

Code:

bool List::IsEmpty() const {
    return (first == null);
}

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson