Școala Româno-Britanică
Modulul 3 Clasa a IX-a | Python

Ora 2: Parcurgerea cifrelor - oglinditul și palindromul

Ce vei învăța astăzi: Construirea oglinditului (numărul citit cu cifrele în ordine inversă), verificarea palindromului (numărul care se citește la fel în ambele sensuri)

Rezultat practic: Construiești oglinditul unui număr și verifici proprietatea de palindrom (Competența 1.2).

Competența 1.2 Săptămâna 13

Înainte de a începe

De ce contează? Verificarea unui palindrom este una dintre cele mai întâlnite cerințe la concursuri și la evaluări, iar construirea oglinditului este tiparul pe care se bazează și conversiile între baze de la Ora 6.

Ce știi deja?

La ora trecută ai învățat să extragi și să elimini cifrele cu % și //. Rezolvă rapid: care este ultima cifră a lui 4096 și ce număr rămâne după două eliminări succesive cu // 10?

Ideea-cheie: Oglinditul se construiește luând cifrele pe rând cu n % 10 și lipind fiecare cifră la dreapta cu og = og * 10 + c, până când n devine 0.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei ști să parcurgi cifrele unui număr, să construiești oglinditul și să verifici dacă un număr este palindrom.

Parcurgerea cifrelor cu while n > 0
Construirea oglinditului pas cu pas
Verificarea unui palindrom
Numărul de cifre al lui n (contor: variabilă care numără pașii buclei)

Parcurgerea cifrelor unui număr

Definiție: Pentru a parcurge toate cifrele unui număr n folosim o buclă while n > 0. La fiecare pas extragem ultima cifră cu n % 10 și o eliminăm cu n = n // 10.

Bucla se oprește când n devine 0, adică după ce am trecut prin toate cifrele.

Analogie

Este ca și cum ai lua bilele dintr-un turn, una câte una, începând de la parter. După fiecare bilă scoasă, turnul devine mai mic, până rămâne gol (n = 0).

Exemplu: parcurgem cifrele lui 1234

Python - parcurgerea cifrelor
n = 1234
while n > 0:
    print("cifra:", n % 10)
    n = n // 10

Observă: cifrele apar în ordine inversă: 4, 3, 2, 1. Acest tipar stă la baza oglinditului.

Construirea oglinditului

Definiție: Oglinditul unui număr se obține citind cifrele sale de la dreapta la stânga. Îl construim adăugând la fiecare pas ultima cifră la dreapta numărului nou:

og = og * 10 + n % 10, apoi n = n // 10.

Exemplu: oglinditul lui 1234 este 4321

ALGORITMUL Oglinditul unui număr og <- 0 cât timp n > 0 execută og <- og * 10 + n % 10 // punem ultima cifră la dreapta n <- n // 10 // eliminăm ultima cifră sfârșit cât timp // la final, og conține oglinditul
Python - oglinditul lui 1234
n = 1234
og = 0
while n > 0:
    og = og * 10 + n % 10
    n = n // 10
print(og)

Observă: la final variabila og conține 4321. Atenție: după buclă, n a devenit 0, deci dacă mai avem nevoie de el trebuie să-l salvăm înainte.

Analogie

Construirea oglinditului este ca și cum ai muta bilele dintr-un turn într-un alt turn, dar de data aceasta fiecare bilă nouă este pusă la bază: prin og * 10 urci toate bilele existente cu un etaj, apoi așezi cifra nouă jos.

Palindromul

Definiție: Un număr este palindrom dacă este egal cu oglinditul său, adică se citește la fel de la stânga la dreapta și de la dreapta la stânga.

Exemple: 1221, 5, 121 sunt palindromuri, iar 1234 nu este.

Număr Oglinditul Este palindrom?
1221 1221 DA
121 121 DA
1234 4321 NU

Numărul de cifre al lui n

Definiție: Numărăm cifrele lui n folosind un contor: pornim de la 0 și îl creștem cu 1 la fiecare pas al buclei while n > 0.

De exemplu, n = 1234 are 4 cifre: parcurgem bucla de 4 ori.

Exemplu în Python

Python - numărul de cifre
n = 1234
cnt = 0
while n > 0:
    cnt = cnt + 1
    n = n // 10
print(cnt)

Observă: variabila cnt este un contor clasic, folosit foarte des în prelucrările de cifre.

Exercițiu de completare

Completează codul pentru construirea oglinditului:

Pentru a parcurge cifrele lui n folosim bucla ______ n > 0. Oglinditul se construiește în variabila ______ = og * ______ + n ______ 10. La fiecare pas eliminăm ultima cifră cu n = n // 10.

Bancă de cuvinte:
while og 10 %

Test de înțelegere

Test rapid - oglindit și palindrom:

1. Oglinditul numărului 1234 este:

2. Numărul 1221 este:

3. Pentru a construi oglinditul unui număr folosim instrucțiunea:

Test de înțelegere - suplimentar

Test rapid suplimentar - oglindit și palindrom:

1. Oglinditul numărului 456 este:

2. După construirea oglinditului, îl comparăm cu:

3. Numărul 121 este palindrom pentru că:

Ai grijă la: dacă nu salvezi numărul inițial (x = n) înainte de buclă, pierzi valoarea originală și nu mai poți compara n cu oglinditul său pentru a verifica palindromul.

Aprofundare

Cazul n = 0: oglinditul lui 0 este 0, iar 0 este palindrom. Atenție la programele care numără cifrele: pentru n = 0, bucla while n > 0 nu se execută, iar un contor rămas la 0 este greșit, pentru că 0 are o singură cifră.

Numere care se termină în zero: oglinditul lui 120 este 21, nu 021. Construcția cu og = og * 10 + n % 10 elimină automat zerourile de la capăt, pentru că un număr nu poate începe cu cifra 0. Dacă problema cere exact inversarea cifrelor ca șir, folosim str(n)[::-1].

Palindrom cu o singură cifră: orice număr cu o singură cifră (0, 1, 2, ..., 9) este palindrom, pentru că se citește identic din ambele direcții. De asemenea, orice număr de forma aa, aba sau abba este palindrom.

Eficiență: construirea oglinditului face exact un pasaj prin cifre, deci numărul de pași este egal cu numărul de cifre ale lui n. Pentru n cu până la 10 cifre (sub 10^10), bucla rulează de cel mult 10 ori, indiferent cât de mare este valoarea numerică.

Verificarea palindromului fără oglindit: putem compara prima cifră cu ultima, apoi le eliminăm pe amândouă; numărul de cifre par versus impar se tratează uniform, pentru că la mijloc rămâne fie o cifră, fie nimic, iar în ambele cazuri numărul este palindrom dacă toate comparațiile au reușit.

APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Oglinditul unui număr

Enunț:

Cerință: Se citește un număr natural n. Să se afișeze oglinditul lui n.

Date de intrare:

Programul citește de la tastatură numărul n.

Date de ieșire:

Programul va afișa pe ecran oglinditul lui n.

Restricții și precizări:

Numerele citite sunt numere naturale, cu valori mai mici decât 10^9.

Exemplu:

Intrare:

1234

Ieșire:

4321
Cum gândim soluția:
  1. Inițializăm oglinditul cu 0: og = 0
  2. Cât timp n > 0, construim oglinditul: og = og * 10 + n % 10
  3. Eliminăm ultima cifră: n = n // 10
  4. Afișăm oglinditul cu print()
Scrie soluția în Python:
Soluție corectă:
n = int(input())
og = 0

while n > 0:
    og = og * 10 + n % 10
    n = n // 10

print(og)

Ce învățăm: oglinditul se construiește adăugând fiecare cifră la dreapta numărului rezultat, printr-o buclă while.

PbInfo - Palindrom

Enunț:

Cerință: Se citește un număr natural n. Să se afișeze mesajul "DA" dacă n este palindrom, altfel mesajul "NU".

Date de intrare:

Programul citește de la tastatură numărul n.

Date de ieșire:

Programul va afișa pe ecran "DA" sau "NU".

Restricții și precizări:

Numerele citite sunt numere naturale, cu valori mai mici decât 10^9.

Exemplu:

Intrare:

1221

Ieșire:

DA
Cum gândim soluția:
  1. Salvăm numărul inițial într-o altă variabilă (ex. original)
  2. Construim oglinditul lui n într-o buclă while
  3. Comparăm numărul original cu oglinditul
  4. Afișăm "DA" dacă sunt egale, altfel "NU"
Scrie soluția în Python:
Soluție corectă:
n = int(input())
original = n
og = 0

while n > 0:
    og = og * 10 + n % 10
    n = n // 10

if original == og:
    print("DA")
else:
    print("NU")

Ce învățăm: la verificarea palindromului trebuie să păstrăm numărul inițial, pentru că bucla modifică variabila n până la 0.

EXERCIȚII PRACTICE

Exercițiul Practic: Oglindit și palindrom

Sarcini de lucru

Completează următoarele sarcini pentru a-ți consolida cunoștințele despre oglindit și palindrom

Sarcina 1: Numărul de cifre

Cerință: Scrie un program care citește un număr n și afișează numărul de cifre ale lui n, folosind un contor într-o buclă while.

Soluție pentru Sarcina 1:
n = int(input())
cnt = 0

while n > 0:
    cnt = cnt + 1
    n = n // 10

print(cnt)

Verifică: pentru n = 1234 se afișează 4.

Sarcina 2: Verifică palindromul și afișează oglinditul

Cerință: Scrie un program care citește un număr n, afișează oglinditul lui n și apoi mesajul "DA" dacă n este palindrom, altfel "NU".

Soluție pentru Sarcina 2:
n = int(input())
original = n
og = 0

while n > 0:
    og = og * 10 + n % 10
    n = n // 10

print(og)

if original == og:
    print("DA")
else:
    print("NU")

Verifică: pentru n = 1221 se afișează 1221 apoi DA; pentru n = 1234 se afișează 4321 apoi NU.

Scrie pe caiet - De reținut

Titlul lecției

Parcurgerea cifrelor unui număr - oglinditul și palindromul.

Definiția lecției

Lecția continuă parcurgerea cifrelor și ne învață să construim oglinditul unui număr: luăm cifrele una câte una cu n % 10 și le lipim la dreapta cu og = og * 10 + c, până când numărul devine 0. Apoi comparăm oglinditul cu numărul inițial: dacă sunt egale, numărul este palindrom, adică se citește la fel în ambele sensuri. Învățăm totodată să numărăm cifrele cu ajutorul unui contor. În viața reală, palindroamele apar la verificarea unor numere de înmatriculare sau a codurilor promoționale, iar oglinditul este tiparul folosit mai departe și la conversiile între baze. De exemplu, 1221 este palindrom, pentru că oglinditul său este tot 1221.

Definiții esențiale

Algoritmul cheie - pseudocod

ALGORITMUL Oglinditul și verificarea palindromului citește n x <- n // salvăm numărul inițial og <- 0 cât timp n > 0 execută og <- og * 10 + n % 10 n <- n // 10 sfârșit cât timp dacă x = og atunci scrie "palindrom" altfel scrie "nu este palindrom"

Algoritmul cheie - cod Python

n = int(input())
x = n
og = 0

while n > 0:
    og = og * 10 + n % 10
    n = n // 10

if x == og:
    print("palindrom")
else:
    print("nu este palindrom")

Greșeli comune de evitat

Sfaturi practice și trucuri

Exemplu practic

Verificăm dacă 2025 este palindrom, construind oglinditul și comparându-l cu numărul inițial:

n = 2025
x = n
og = 0
while n > 0:
    og = og * 10 + n % 10
    n = n // 10
if x == og:
    print("palindrom")
else:
    print("nu este palindrom")

Programul afișează „nu este palindrom", pentru că oglinditul lui 2025 este 5202.