pal1 (2K)
pal2 (2K)
pal1 (2K)
pal2 (2K)
pal3 (4K)

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, 505

Samozrejme, 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):

  1. zvoľte si ľubovoľné číslo
  2. napíšte toto číslo obrátene (sprava do ľava)
  3. toto číslo pripočítajte k pôvodnému číslu
  4. ak súčet nie je palindromické číslo, vráťte sa k bodu 2 a pre súčet postup opakujte.

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

Nasledujúci obrázok zobrazuje výpočet palindromu z východzieho čísla 89.

pal6 (39K)



Zdroje:

Palindrome Quest

Palindromické čísla

Posledne uvedený zdroj má chybný JAVASCRIPT, lebo napr. ak zadáte číslo 18, objaví sa, že k číslu 18 je palindróm číslo 18. Nefunguje im to pre dvojciferné čísla. Začína fungovať až od 101, ktoré je už samo o sebe palindróm. Napísala som tam, ale zatiaľ si to neopravili. Tiež nikomu neradím aby tam zadali číslo 196, lebo môže vám zamrznúť počítač.

Kontakty

Stránka je v súlade s aktuálnymi normami.


Valid HTML 4.01 Transitional

Domov

©  Klára Mrázová