Sprawdzanie czy wyraz jest palindromem
Ostatnio zmodyfikowano 2015-10-22 21:57
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 ? #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; }
|
|
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. |
|
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. |
|
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. |
|
ast44 Temat założony przez niniejszego użytkownika |
» 2015-10-22 20:10:39 Poprawiłem odpowiednio : for( i = 0; i <( wyraz.length() / 2 ); i++ )
oraz : for( i = 0; i <(( wyraz.length() - 1 ) / 2 ); i++ )
Ale nadal to źle działa. |
|
carlosmay |
» 2015-10-22 20:37:39 Pierwszy warunek jest ok, resztę powinny załatwić instrukcje warunkowe. Palindrom tekstowy może cię zainteresować. |
|
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. |
|
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. |
|
« 1 » |