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

Sprawdzanie czy wyraz jest palindromem

Ostatnio zmodyfikowano 2015-10-22 21:57
Autor Wiadomość
ast44
Temat założony przez niniejszego użytkownika
Sprawdzanie czy wyraz jest palindromem
» 2015-10-22 18:24:38
Program po pobraniu zmiennej kończy działanie, nic nie wypisuje. Widzi ktoś gdzie jest błąd ?

C/C++
#include <iostream>

using namespace std;

void sprawdz()
{
    string wyraz;
    int i;
   
    cout << "Podaj wyraz" << endl;
    cin >> wyraz;
   
    if( wyraz.length() % 2 == 0 )
    {
        for( i = 0; i ==( wyraz.length() / 2 ) - 1; i++ )
        {
            if( wyraz[ i ] == wyraz[ wyraz.length() - i ] )
            {
                cout << "Wyraz jest palindromem" << endl;
            }
            else
            {
                cout << "Wyraz nie jest palindromem" << endl;
            }
           
        }
    }
   
    else
    {
        for( i = 0; i ==(( wyraz.length() - 1 ) / 2 ) - 1; i++ )
        {
            if( wyraz[ i ] == wyraz[ wyraz.length() - i ] )
            {
                cout << "Wyraz jest palindromem" << endl;
            }
            else
            {
                cout << "Wyraz nie jest palindromem" << endl;
            }
        }
    }
}
int main()
{
    sprawdz();
   
    return 0;
}
P-139050
carlosmay
» 2015-10-22 18:37:25
Brakuje pliku nagłówkowego.

for( i = 0; i ==( wyraz.length() / 2 ) - 1; i++ )
 i to też jest źle.
P-139051
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-22 19:09:49
Dlaczego ? Jeśli długość wyrazu jest parzysta, to jak ją podzielę przez 2 to mam ile operacji porównania muszę wykonać.Ale zmienna "1" jest iterowana od 0 a nie od 1,więc muszę to jeszcze przesunąć o 1 w lewo, czyli odjąć 1.
P-139052
carlosmay
» 2015-10-22 19:20:29
Przykład: długość wyrazu wynosi 12, a po wykonaniu obliczeń warunek ma wartość 5.
Zmienna 'i' wynosi 0.
0 == 5; wniosek: pętla nie wykona żadnego obrotu.
P-139053
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-22 20:10:39
Poprawiłem odpowiednio :
C/C++
for( i = 0; i <( wyraz.length() / 2 ); i++ )

oraz :

C/C++
for( i = 0; i <(( wyraz.length() - 1 ) / 2 ); i++ )

Ale nadal to źle działa.
P-139056
carlosmay
» 2015-10-22 20:37:39
Pierwszy warunek jest ok, resztę powinny załatwić instrukcje warunkowe.

Palindrom tekstowy może cię zainteresować.
P-139058
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-22 21:01:12
Pierwszy czyli który ? Chodzi o te dwa warunki z mojego ostatniego posta ?
Ja tam mam przecież if-a ,który jest instrukcją warunkową.Napisałem program wg. własnego pomysłu i zależy mi na tym by się dowiedzieć czemu nie działa.
P-139059
carlosmay
» 2015-10-22 21:57:17
for( i = 0; i <( wyraz.length() / 2 ); i++ )
 
 pierwszy czyli ten.

Ja tam mam przecież if-a ,który jest instrukcją warunkową.
 tak, masz, ale działają błędnie.
Nie mówiłem, ze ich nie masz, tylko
resztę powinny załatwić instrukcje warunkowe.
 czyli, że mają działać poprawnie.

Podział dla wyrazów o długości parzystej i nieparzystej nie ma sensu,
bo dla obu przypadków instrukcje całego if oraz else powinny być takie same.

Wypisanie informacji czy palindrom, czy nie powinno nastąpić po sprawdzeniu wszystkich znaków po opuszczeniu pętli for()
natomias, gdy nie palindrom można opuścić dalsze sprawdzanie.

wyraz[ wyraz.length() - i ]
 
 to wyrażenie jest w pierwszej pętli poza zakresem tablicy.
P-139061
« 1 »
  Strona 1 z 1