Palindromy obecnie funkcjonują chyba jedynie jako forma zabawy słowem. Nigdy nie wiadomo jednak kiedy umiejętność sprawdzenia, czy wyrażenie jest palindromem, nam się przyda. Być może nigdy, a być może ułatwi nam napisanie matury z informatyki. Będziemy mieli też możliwość popisania się przed znajomymi znajomością nietypowych palindromów. Kto wie 🙂
Czym są palindromy i jak je rozpoznawać?
Palindromy są to zarówno słowa, jak i całe wyrażenia, które czytając normalnie (tzn. od lewej do prawej) i wspak brzmią tak samo. Często bywa tak, że wyrażenia palindromiczne pozbawione są sensu.
Przykładami palindromów są:
- „Ala”,
- „Kajak”,
- „Kobyła ma mały bok”,
- „Może jutro ta dama da tortu jeżom”,
- „Wódy żal dla Żydów”,
- „Wół utył i ma miły tułów”,
- „malajalam” – to taki język 🙂 jednocześnie jest to najdłuższe słowo palindrom w języku polskim,
- „687454786” – liczba też może być palindromem.
Można by jeszcze wymieniać i wymieniać, ale regułę już znacie. Każdy z tych przykładów czytany od tyłu brzmi tak samo jak czytany normalnie.
Program sprawdzający, czy słowo jest palindromem.
Poniższe programy umożliwiają sprawdzenie, czy wpisane przez użytkownika słowo/zdanie jest palindromem. Przyjąłem następującą taktykę: najpierw pozbywamy się spacji i zamieniamy wszystko na małe litery. Jeśli wyraz jest palindromem to jego pierwsza litera będzie taka sama jak ostatnia, druga będzie taka sama jak przedostatnia, trzecia będzie taka sama jak trzecia od końca […] itd. dopóki nie znajdę się w połowie wyrazu. Przy czym warto zauważyć, że dla słowa o parzystej liczbie liter N wykonamy tyle samo porównań, ile dla wyrazu o nieparzystej liczbie liter N+1.
Pokażę to na przykładzie liczb:
Dla liczby o parzystej liczbie cyfr 456654 porównujemy pierwszą cyfrę z ostatnią, drugą z drugą od końca itd. Łącznie trzy porównania. Natomiast dla liczby o nieparzystej liczbie cyfr 4569654 wykonujemy tyle samo porównań, gdyż idąc od początku i od tyłu, koniec końców wylądujemy na środkowej cyfrze, której nie ma potrzeby porównywać.
Tutaj programy:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//program sprawdzający, czy słowo jest palindromem //Kosiński Łukasz #include <iostream> #include <string> #include <algorithm> using namespace std; bool czy_palindrom(const string napis) { bool jest=true; for(int i=0, j=napis.length()-1; i<j; i++, j--)//idziemy równocześnie od początku i od końca napisu if(napis[i]!=napis[j]) { jest=false; break; } return (jest==true) ? true : false;//tutaj skorzystałem z operatora warunkowego, warto się z nim zapoznać } string male_literki_bezspacji(string s){ string final = ""; for(auto c : s){ if(c == ' ') continue; final += tolower(c); } return final; } int main() { string a; cout << "Podaj napis: "; getline(cin, a); //funckja pobierajaca całe zdanie a = male_literki_bezspacji(a); //pozbywamy sie spacji i zamieniamy na male litery cout << czy_palindrom(a);//funkcja zwraca 1 jeśli słowo jest palindromem //0 jeżeli nie jest system("pause"); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Palindrom { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Ave\\Desktop\\Dane_PR2\\palindrom.txt")); //Przykładowa ścieżka pliku UWAGA: ZAWSZE STAWIAĆ 2x \\ String line; boolean pali; while((line=br.readLine())!=null){ String palindro = new String(line); String palindrom = palindro.replace(" ", ""); pali = true; for(int i=0;i<(int)Math.floor(palindrom.length()/2);i++){ if(Character.toLowerCase(palindrom.charAt(i))!=Character.toLowerCase(palindrom.charAt(palindrom.length()-(i+1)))){ pali=false; } } if(pali){ System.out.println("Słowo: "+ palindrom + " - jest palindronem"); }else{ System.out.println("Słowo: "+ palindrom + " - nie jest palindronem"); } } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 |
def czyPalindrom(x): x = x.lower().replace(" ", "") #zmieniamy wszystkie literki na male i pozbywamy sie spacji n = len(x) #zmienna pomocnicza przechowujaca dlugosc slowa for i in range(n-1): if x[i] != x[n-1-i]: #jezeli znak po przeciwnej stronie (w tej samej kolejnosci od konca) nie bedzie taki sam return False #zwroc false return True; #jezeli nie napotkano problemow, zwroc true print("Program sprawdzajacy czy slowo jest palindromem") print("Podaj slowo") s1 = input() #pobieramy slowo print("Podane slowo " + ("jest " if(czyPalindrom(s1)) else "nie jest ") + "palindromem") |
Myślę, że warto sobie powyższy kod przyswoić szczególnie w kontekście matury z informatyki.
Przemek Wiczołek
says:Krótsza implementacja :
// reverse z biblioteki algorithm
bool palin(string word){
string word1=word;
reverse(word1);
return word1==word;
}
Łukasz Kosiński
says:Mhmm wyśmienita 😉 jak dobrze znać biblioteki 🙂