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 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
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
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
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:
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ă:
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.
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:
- Inițializăm oglinditul cu 0:
og = 0 - Cât timp n > 0, construim oglinditul:
og = og * 10 + n % 10 - Eliminăm ultima cifră:
n = n // 10 - 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:
- Salvăm numărul inițial într-o altă variabilă (ex. original)
- Construim oglinditul lui n într-o buclă while
- Comparăm numărul original cu oglinditul
- 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ț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
- Oglinditul unui număr se obține citind cifrele de la dreapta la stânga: oglinditul lui 1234 este 4321.
- Palindrom = număr egal cu oglinditul său: 1221, 121, 5 sunt palindromuri.
- Numărul de cifre se obține cu un contor
cnt = cnt + 1în buclawhile n > 0. - Bucla de parcurgere a cifrelor:
while n > 0cun % 10(extragere) șin // 10(eliminare).
Algoritmul cheie - pseudocod
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
- Să compari oglinditul cu n după buclă, când n a devenit 0: salvezi valoarea înainte,
x = n. - Confuzia între oglindit și palindrom: oglinditul este numărul inversat, palindromul este proprietatea ca numărul să fie egal cu oglinditul său.
- Construirea oglinditului cu
og = og + n % 10în loc deog = og * 10 + n % 10. - Numărarea cifrelor cu bucla pe n original și pierderea valorii pentru calcule ulterioare.
Sfaturi practice și trucuri
- Salvează numărul inițial în altă variabilă înainte de orice buclă care îl modifică.
- Pentru numerele cu o singură cifră răspunsul este întotdeauna „palindrom".
- Verifică pe hârtie cu 1234: og devine 4, 43, 432, 4321.
- Numerele de forma abba (ex: 1221) sunt palindromuri; testează și cu un număr de 5 cifre, ex: 12321.
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.