Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 27 zadanie domowe - błędny wynik

Ostatnio zmodyfikowano 2015-12-09 15:46
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Rozdział 27 zadanie domowe - błędny wynik
» 2015-12-08 20:01:28
Witam.
Mam niewielki problem przy zadaniu domowym z rozdziały pt. "Wyszukiwanie frazy w tekście". Jego treść brzmi: "Uzupełnij funkcję poniższego programu tak, aby zwróciła wartość true tylko wtedy gdy oba wyrazy występują w zadanym łańcuchu tekstowym:".
Mój program wygląda następująco:
C/C++
#include <iostream>
#include <string>

using namespace std;

bool szukaj( string & tekst, string wyraz1, string wyraz2 )
{
    size_t znalezionaPozycja = tekst.find( wyraz1 );
    size_t znalezionaPozycja1 = tekst.find( wyraz2 );
    if( znalezionaPozycja1 && znalezionaPozycja == true )
    {
        cout << "Znaleziono" << endl;
    } else cout << "Nie znaleziono" << endl;
   
    return false;
}

void wypiszWynik( bool czyZnaleziono )
{
    if( czyZnaleziono )
         cout << "Znaleziono" << endl;
    else
         cout << "Nie znaleziono" << endl;
   
}


int main()
{
    string napis = "Zadanie domowe z kursu C++ (http://cpp0x.pl) - najlepszy kurs C++ w Internecie!";
    wypiszWynik( szukaj( napis, "ada", "kurs" ) );
    wypiszWynik( szukaj( napis, "ada", "taki" ) );
    wypiszWynik( szukaj( napis, "C++", "cpp0x" ) );
    wypiszWynik( szukaj( napis, "C#", "cpp0x" ) );
    return 0;
}
Wynik tego programu jest następujący:
Znaleziono
Nie znaleziono
Znaleziono
Nie znaleziono
Nie znaleziono
Nie znaleziono
Nie znaleziono
Nie znaleziono

Jak widać początkowe 4 odpowiedzi są poprawne, ale czemu dalej mi wyskakują kolejne 4 zbędne odpowiedzi "Nie znaleziono"?
Wynik powinien być taki:
Znaleziono
Nie znaleziono
Znaleziono
Nie znaleziono
P-141627
BezPrzewodowy
» 2015-12-08 20:10:55
Funkcja szukaj zawsze zwraca wartość
false
.
Do tego zarówno funkcja szukaj jak i wpisz wyniki wyświetlają komunikat, czy znaleziono frazę. Dlatego na ekranie pojawia się 8 odpowiedzi do 4 wywołań funkcji szukaj.
P-141628
carlosmay
» 2015-12-08 20:25:39
C/C++
if( znalezionaPozycja1 && znalezionaPozycja == true )
 ten warunek też jest źle sformułowany.
P-141630
Lich555
Temat założony przez niniejszego użytkownika
» 2015-12-08 22:58:46
Ok, mam taki zapis, który działa.
C/C++
bool szukaj( string & tekst, string wyraz1, string wyraz2 )
{
    size_t z = tekst.find( wyraz1 );
    size_t z1 = tekst.find( wyraz2 );
    if(( z != string::npos ) &&( z1 != string::npos ) )
    {
        return true;
    } else return false;
   
    return false; //<-- To jest zbędne?
}
Niech mi ktoś teraz wytłumaczy działanie tego.
npos
 oznacza w tym przypadku, że czegoś nie ma w tekście, nie znaleziono szukanej frazy lub znaku o ile się nie mylę. Więc tutaj można wyczytać "jeśli z i z1 jest różne od npos, czyli szukana treść została znaleziona, to zwróć true. Na końcu return false oznacza zaś, że zwróć false tylko i wyłącznie wtedy, kiedy z i z1 będą różne od npos. Więc jaka jest różnica, czy na końcu wstawimy return false czy return true?

@Edit Ok, chyba rozumiem, po prostu ostatnie return false jest zbędne... Mój mózg już nie pracuje tyle godzin i takie głupie problemy mam :P
P-141646
carlosmay
» 2015-12-09 00:58:31
C/C++
return false; //<-- To jest zbędne?
 
 
  Więc jaka jest różnica, czy na końcu wstawimy return false czy return true?
 Tak jak napisałeś. Jest zbędne.

Jeśli funkcja zwraca wartości, to należy obstawić return 'ami wszystkie miejsca wyjścia z funkcji.
W tym przypadku są tylko dwa
C/C++
if()
return wartosc; // funkcja konczy dzialanie tutaj
else
return wartosc; // lub tutaj i dalej jakiekolwiek instrukcje są zbędne, nigdy nie będą wykonane
 
P-141647
Lich555
Temat założony przez niniejszego użytkownika
» 2015-12-09 15:46:36
Ok, dzięki wielkie. Dopiero teraz pojąłem do końca return.
P-141666
« 1 »
  Strona 1 z 1