Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Zastanówmy się w jaki sposób działa oraz jak wygląda algorytm, który jednoznacznie określi, czy podane słowo jest palindromempalindrompalindromem, czy też nie?

Przeanalizujemy dwa rozwiązania.

Metoda pierwsza

Aby sprawdzić, czy podane słowo jest palindromem, możemy porównywać pary liter. Pierwsza para to pierwsza i ostatnia litera w słowie. Jeżeli dwie litery są takie same, zwiększymy licznik oznaczający liczbę poprawnych par liter o 1. Następną parą będzie druga i przedostatnia litera w słowie. Jeżeli litery są sobie równe, znów zwiększamy licznik o 1. I tak będziemy wykonywać sprawdzanie, aż dojdziemy do środka wyrazu, czyli aż wykonamy: (długośćSłowa) divdiv 2 sprawdzeń.

Zwróć uwagę, że korzystając z polecenia div, nie ma znaczenia, czy słowo ma parzystą, czy nieparzystą liczbę znaków.

Oto schemat blokowy realizujący pierwszą metodę sprawdzania.

R1VHkFIbbQgZs
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Zwróć uwagę na wyrażenie logiczne: słowo[indeks] == słowo[długośćSłowa - indeks - 1].

Pierwszym ważnym aspektem jest sposób odwoływania się do konkretnych liter w słowie. W tym przypadku używamy nawiasów kwadratowych. Przykładowo: słowo[0] oznacza pierwszą literę w słowie.

Jak wcześniej wspomnieliśmy będziemy porównywać pary znaków. Tę operację najłatwiej wykonać wewnątrz pętli. Będzie się ona wykonywać dopóki indeks jest mniejszy od połowy długości słowa. Wewnątrz pętli sprawdzamy czy znak pobrany z pierwszej połowy słowa (slowo[indeks]) jest taki sam jak jego odpowiednik z drugiej połowy (słowo[długośćSłowa - indeks - 1]). Zwróćmy uwagę w jaki sposób wyznaczamy indeks drugiego znaku. Od długośćSłowa odejmujemy indeks, a także wartość -1. Operacja ta wynika z faktu, że znaki w słowo numerujemy od zera.

Przeanalizuj, jak działa schemat blokowy. Zapisuj ulegające zmianie wartości zmiennych. Jeżeli masz problem, w następnej sekcji dokonamy wspólnej analizy algorytmu.

Metoda druga

Bardziej optymalna metoda na sprawdzenie, czy podane słowo jest palindromem, wykorzystuje to, że odnalezienie jednej pary liter, które nie są sobie równe (a powinny być), automatycznie powoduje, że podane słowo na pewno nie jest palidromem.

Na początku możemy założyć, że mamy do czynienia ze słowem, które jest palindromem, a gdy natrafimy na wykluczającą się parę, zakończymy algorytm z informacją, że słowo nie jest palindromem.

Zbadajmy, czy słowo „ABCDEEDXBA” jest palidromem. Najpierw sprawdzone zostaną dwie litery 'A': pierwsza i ostatnia w słowie. Kolejną sprawdzaną parą będą litery 'B' (druga i przeostatnia w słowie). Następnie sprawdzone zostaną litery: 'C' oraz 'X' (trzecia od początku i trzecia od końca litera). Już wiemy, że nie ma potrzeby dalszego sprawdzania liter. Słowo na pewno nie jest palindromem, skoro zawiera co najmniej jedną parę liter, które powinny być takie same, a nie są. I właśnie w tym momencie algorytm zakończy porównywanie z informacją, że podane słowo nie jest palindromem.

Gdyby podane słowo było równe „ABCCBA”, program dokonałby trzech sprawdzeń i zakończył działanie z informacją, że podane słowo jest palindromem (program nie natrafił na parę różnych liter).

Poniżej przedstawiony został schemat blokowy realizujący drugą metodę sprawdzania:

RZlBtyWo8CIlD
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

W przedstawionej metodzie wykorzystaliśmy zmienną czyPalindrom, która na początku inicjowana jest wartością prawda. Jeżeli natrafimy na parę znaków, które nie są takie same (a powinny być), zmieniamy wartość czyPalindrom na fałsz. Następnie algorytm kończy się z informacją, że podane słowo nie jest palindromem.

Słownik

div
div

polecenie często używane jako symbol dzielenia całkowitego, np. 7 div 2 = 3.

palindrom
palindrom

wyrażenie brzmiące tak samo czytane od lewej do prawej i od prawej do lewej