Palindróm je slovo, veta, číslo (všeobecne akákoľvek postupnosť symbolov), ktorá má tú vlastnosť, že ju možno čítať v ľubovoľnom smere (sprava doľava alebo zľava doprava) a má vždy rovnaký význam. Pojem vznikol začiatkom 17 storočia z gréckeho slova palindromos, ktoré doslova znamená bežať znovu späť. [WIKIPEDIA]. Napr. RADAR, KAJAK,1221...Ak si zvolíte ľubovoľné číslo a k nemu pripočítate toto číslo odzadu a zopakujtete to niekoľkokrát vznikne číslo palindrom Prvé (60) palindromické čísla:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505Samozrejme, napísať nejaké palindromické číslo nie je problém. Dokážeme to hneď. Ale napr. napísať všetky palindromické čísla v určitom intervale prirodzených čísel, napr. medzi 10 a 1000 by nám trvalo asi dlho. Uvádzam tu program na výpis palindromických čísel v Exceli. Najprv uvádzam program pre zápis zadaného čísla a čísla obráteného. Využijeme tu textove funkcie LEN a MID.
Public Sub obrat()
Dim n As Integer, k As Integer, mm As String
Dim kk(30)
sem:
l = 2
i = i + 1
cc = Cells(i, 1)
k = Len(Cells(i, 1))
mm = Mid(Cells(i, 1), k, 1)
Cells(i, 2) = mm
If (k = 1) Then GoTo nav3
n = 0
m = 1
nav1:
n = n + 1
m = m + 1
mm = Mid(Cells(i, 1), k - n, 1)
Cells(i, m + 1) = mm
If (n < k - 1) Then GoTo nav1
nav2:
l = l + 1
Cells(i, 2) = Cells(i, 2) & Cells(i, l)
If (l - 1 ≤ n) Then GoTo nav2
nav3:
Columns("C:T").Select
Selection.Delete Shift:=xlToLeft
'v nasledujúcom riadku môžete zmeniť číslo 9999
'ak chcete použiť väčšie číslo ako 32767 musíte
'zmeniť deklaráciu typu z integer na long
'obrátiť čísla na PC s procesorom AMD Sempron(tm) 2300+,
'256MB RAM, trvalo asi 150 s pre interval od 1 do 10000!
If (i ≤ 9999) Then GoTo sem
End Sub
Ako vidíte z programu, čísla zadáte do stĺpca A a obrátené číslo dostávame v stĺpci B. Nasledujúci program zistí počet palindromických čísel v danom intervale aj ich zvýrazní červenou farbou.
Sub zisti()
Dim i As Integer, k As Integer
Application.ScreenUpdating = False
For i = 1 To 10000
If (Cells(i, 1).Value = Cells(i, 2).Value) Then
k = k + 1
Cells(i, 2).Select
With Selection.Font
.FontStyle = "Tučné"
.Size = 10
.ColorIndex = 3
End With
End If
Next i
Cells(1, 3) = _
"V intervale [1,10000] je " & k & " palindromických čísel"
Columns("C:C").EntireColumn.AutoFit
'Columns("A:B").Select
'Selection.Delete Shift:=xlToLeft
End Sub
V apríli roku 1984 populárno-vedecký časopis Scientific American v rubrike rekreačná matematika priniesol článok, v ktorom sa popisuje zaujímavý matematický postup, ktorým sa dá vraj dopracovať z ľubovoľného čísla k palindromickému (v desiatkovej sústave):
Môžeme zo všetkých čísiel zostrojiť palindromické číslo týmto postupom? Doteraz neexistuje dôkaz, že by bolo možné z každého čísla zostrojiť palindromické číslo. Sú známe niektoré čísla, z ktorých vraj (tiež neexistuje exaktný dôkaz) sa nedá uvedeným postupom získať palindromické číslo. Také je napr. číslo 196. Tieto čísla sa nazývajú Lychrelove čísla. Lychrelovo číslo je prirodzené číslo, z ktorého (predpokladá sa) nie je možné vytvoriť palindróm, pomocou iterácií opakovaným obrátením a spočítaním. Pod iteráciou vo výpočtovej technike sa rozumie opakovanie procesu v programe. Z čísla 196 sa opakovane mnohí snažili získať palindróm už pred viacerými rokmi. Známy pokus o vytvorenie palindrómu z tohoto čísla, skončil neúspešne po 200 iteráciách a číslo malo 89 číslic. Neskôr sa viacerí snažili získať z tohoto čísla palindróm na sálových počítačoch, ale tiež aj na osobnom počítači ale v programe napísanom v assembleri. Výpočty trvali niekoľko dní a bolo dosiahnuté číslo s niekoľko miliónmi znakov. V Exceli nie je možné narábať s tak obrovskými prirodzenými číslami: celé číslo (typ long) môže dosiahnúť číslo < 2147483648. Môžeme však použiť typ variant a tiež konverziu CDec. Ak nedeklarujeme pre premennú žiadny typ, Excel ho považuje za variant. Ak si to chcete skúsiť, vedomí si tohoto obmedzenia, napísala som program VBA na základe popísaných krokov 1 až 4. Skúsila som ako zvládne EXCEL číslo 196 - a dopadlo to tak, že po 60 - tich sčítaniach hlásilo owerflow pri čísle: 17786453745152322604573635887 , ktoré ešte obrátilo (78853637540622325154735468771) . To sa dosiahlo jedine pomocou už zmienených "trikov" - použitie variant a konverzie CDec.
Public Sub pas(cc, aa) Dim n As Integer, k As Integer, i As Integer Dim dd(30) k = Len(cc) n = 0 dd(n) = Mid(cc, k - n, 1) nav1: n = n + 1 dd(n) = Mid(cc, k - n, 1) If (n < k - 1) Then GoTo nav1 aa = dd(0) & dd(1) i = 1 nav2: i = i + 1 aa = aa & dd(i) If (i ≤ k - 1) Then GoTo nav2 'aa je obrátené číslo cc End Sub Sub vo() Dim ii As Integer Debug.Print "zadané číslo"; Tab(36); "číslo obrátené"; ' zápisujeme do tzv. immediate window ii = 0 nav1: l = 0 ii = ii + 1 cc = Cells(ii, 1) cc = CDec(cc) nav2: l = l + 1 pas cc, aa aa = CDec(aa) Debug.Print cc; Tab(36); aa; Tab(72); l If (cc <> aa) Then bb = aa + cc bb = CDec(bb) cc = bb GoTo nav2 End If Debug.Print cc, Tab(36); aa; " počet sčítaní "; l - 1 'If ii < 3 Then GoTo nav1 End Sub