Se poate trece la capitolul următor cu tasta ► și se poate reveni la un capitol precedent cu tasta ◄

Cum determinăm dacă un număr este un palindrom


<

C
a
p
i
t
o
l
u
l

a
n
t
e
r
i
o
r

<

1. Algoritm

Un palindrom este un cuvânt care indiferent că este citit de la stânga la dreapta sau de la dreapta la stânga nu se schimbă. Cuvântul rar este un palindrom. La fel ca potop sau topor. Glumesc cu al doilea.

Un număr este un palindrom dacă respectă aceeași regulă, doar că e mai ușor de generat. 11311 este un palindrom. Și de aici multe exemple pot fi create.

Algoritmul e simplu:

- citește număr

- pentru i de la 1 până la lungime număr împărțit la 2 execută

 - dacă cifra de pe poziția i este diferită de cifra de pe poziția lungime număr - i + 1 atunci numărul nu este palindrom, ieșire program

- sfârșit pentru

- dacă am ajuns aici, numărul este palindrom

2. Executare

Cum putem afla dacă un număr este palindrom

Acuma să discutăm un pic despre programul în sine.

Pentru a determina dacă un număr este un palindrom construim o funcție în care presupunem că numărul este. Ca apoi să demonstrăm că nu este așa.

Algoritmul e destul de evident. Dacă avem numărul 223322, pur și simplu comparînd prima cu ultima cifră, apoi a doua cifră cu penultima și tot așa până la epuizăm pe toate (sau ne rămâne una in mijloc), putem afla cu ce număr avem de a face.

Problema constă în faptul că nu putem afla ușor câte cifre are un număr. Ar trebui să-l împărțim la 10 până când câtul va fi 0. Muncă în plus. Iar apoi va trebui să extragem prima cifră și ultima. Eventual le eliminăm pe cele două ca să repetăm algoritmul până când nu mai rămâne nimic din număr. Multă muncă și multă distrugere.

Dar dacă îl transformăm într-un șir? E mult mai bine. Dintr-un șir putem accesa instant orice poziție și putem ușor afla lungimea lui. Să-l convertim într-un șir standard este o soluție bună dar dacă îl transformăm într-un cuvânt (șir de litere) e și mai eficient.

Pascal oferă o... procedură (și nu funcție, cum ar fi fost de asteptat) pentru a face o așa conversie: str. Ea primește doi parametrii: primul este numărul ce urmează a fi convertit, iar al doilea este șirul de caractere.

Din moment ce numărul nostru este un șir de caractere ne este foarte ușor să aflăm lungimea lui folosind funcția length și putem accesa orice poziție.

De aici trebuie doar să-l parcurgem până la jumătatea sa și să comparăm cifrele de pe poziția i cu cea de pe poziția lungime - i + 1. De ce se adaugă un 1? Dacă numărul are lungimea 5, în primă fază trebuie să comparăm poziția 1 cu 5. În acest caz i este 1, iar lungime - i ar fi 4...

Alte cazuri

  • Cum determinăm dacă un vector este palindrom?

Modul de rezolvare rămâne neschimbat, doar datele de intrare se modifică. În loc să avem un număr pe care îl transformăm într-un șir de caractere, avem direct vectorul.

Și în acest caz se va parcurge șirul de la început până la jumătatea sa și primul element se va compara cu ultimul, al doilea cu penultimul și tot așa până se vor compara cele două jumătăți ale sale.

Pentru sugestii de probleme pe care aţi vrea să le vedeţi rezolvate, daţi un mesaj cu sugestii aici.


>

C
a
p
i
t
o
l
u
l

u
r
m
ă
t
o
r

>

Ți-a fost de ajutor ce am scris aici?
Hei, mersi de răspuns.