Ce vei învăța astăzi?
După această lecție vei integra toate prelucrările numerice învățate în modul: cifre, divizori, factori primi, CMMDC/CMMMC și conversii.
Tabel rezumativ: prelucrări numerice
| Prelucrare | Idee cheie | Operație principală |
|---|---|---|
| Ultima cifră | Restul împărțirii la 10 | n % 10 |
| Eliminarea ultimei cifre | Câtul împărțirii la 10 | n // 10 |
| Oglinditul | Adăugăm cifrele la dreapta | og = og * 10 + n % 10 |
| Divizorii | Restul împărțirii la d este 0 | n % d == 0 |
| Factorii primi | Împărțiri repetate de la 2 | n // d cât timp se poate |
| CMMDC | Algoritmul lui Euclid | a, b = b, a % b |
| CMMMC | a * b / CMMDC | a * b // cmmdc |
| Baza 2 | Resturile împărțirilor la 2 | n % 2 și n // 2 |
Problemă combinată
Problemă: Să se citească un număr n și să se afișeze suma cifrelor sale și numărul de cifre pare.
Combinăm parcurgerea cifrelor (while cu % și //) cu un acumulator (variabilă în care adunăm valori, pornind de la 0) de sumă și un contor (variabilă care numără evenimente, crescând cu 1).
Exemplu: sumă de cifre + cifre pare
n = int(input())
s = 0
cnt = 0
while n > 0:
c = n % 10
s = s + c
if c % 2 == 0:
cnt = cnt + 1
n = n // 10
print(s)
print(cnt)
Observă: folosim un singur pasaj prin cifre pentru a calcula două rezultate, ceea ce face programul eficient.
Exercițiu de completare
Completează operațiile de bază cu cifrele unui număr:
Pentru a extrage ultima cifră folosim n ______ 10. Pentru a elimina ultima cifră folosim n ______ 10. Repetăm aceste operații într-o buclă ______ cât timp n > ______.
Bancă de cuvinte:
Test de înțelegere
Test rapid - recapitulare:
1. Oglinditul numărului 123 este:
2. Numărul 6 este perfect pentru că:
3. CMMDC(8, 12) este:
Test de înțelegere - suplimentar
Test rapid suplimentar - recapitulare:
1. Numărul de cifre al lui 2024 este:
2. Descompunerea lui 72 în factori primi este:
3. Numărul total de divizori ai lui 12 este:
Aprofundare
Un singur pasaj, mai multe rezultate: atunci când o problemă cere mai multe prelucrări asupra acelorași cifre (sumă, produs, număr de cifre pare, maximul cifrelor), le calculăm pe toate într-o singură buclă while n > 0. Astfel programul face un singur pasaj prin cifre, iar eficiența este maximă: numărul de pași este proporțional cu numărul de cifre, nu cu numărul de prelucrări înmulțit.
Combinarea cu divizorii și CMMDC: o problemă integrată poate cere, de exemplu, să verificăm dacă suma cifrelor divide numărul: if n % suma == 0. Aici trebuie să salvăm n înainte de bucla care îi distruge valoarea. La fel, putem combina CMMDC cu descompunerea în factori primi sau cu conversia în baza 2, folosind funcțiile pentru fiecare etapă.
Structura unei soluții complete: orice problemă rezolvată corect urmează trei module: citirea datelor (int(input())), prelucrarea (algoritmul specific) și afișarea rezultatelor (print()). La evaluare, se punctează atât corectitudinea logică, cât și tratarea cazurilor particulare (n = 0, n = 1, valori extreme).
Testarea cu cazuri limită: înainte de a preda un program, testează-l cu: cea mai mică valoare (n = 0 sau 1), valori cu cifre identice (111), pătrate perfecte (144), numere prime (97) și valori maxime permise de restricții. Un program corect trebuie să răspundă corect pentru toate.
Reutilizarea algoritmilor: oglinditul, suma cifrelor, divizorii, Euclid și conversiile sunt instrumente de bază pe care le combini ca pe niște piese de Lego. După acest modul, la orice problemă numerică știi deja ce algoritm să alegi și cum să-l integrezi.
PbInfo - Câte cifre pare are n
Enunț:
Cerință: Se citește un număr natural n. Să se afișeze câte cifre pare are n.
Date de intrare:
Programul citește de la tastatură numărul n.
Date de ieșire:
Programul va afișa pe ecran numărul de cifre pare ale lui n.
Restricții și precizări:
Numerele citite sunt numere naturale, cu valori mai mici decât 10^9.
Exemplu:
Intrare:
2468
Ieșire:
4
Cum gândim soluția:
- Parcurgem cifrele lui n cu o buclă while
- Pentru fiecare cifră c, verificăm dacă c % 2 == 0
- Dacă da, creștem contorul
- Afișăm contorul
Scrie soluția în Python:
Soluție corectă:
n = int(input())
cnt = 0
while n > 0:
if n % 10 % 2 == 0:
cnt = cnt + 1
n = n // 10
print(cnt)
Ce învățăm: combinăm extragerea cifrei n % 10 cu testul de paritate (proprietatea unei cifre de a fi pară sau impară) % 2 == 0.
PbInfo - Suma divizorilor proprii
Enunț:
Cerință: Se citește un număr natural n. Să se afișeze suma divizorilor proprii ai lui n (divizorii mai mici decât n).
Date de intrare:
Programul citește de la tastatură numărul n.
Date de ieșire:
Programul va afișa pe ecran suma divizorilor proprii ai lui n.
Restricții și precizări:
Numerele citite sunt numere naturale, cu valori mai mici decât 10^9.
Exemplu:
Intrare:
6
Ieșire:
6
Cum gândim soluția:
- Parcurgem cu for numerele de la 1 la n // 2
- Dacă d este divizor (n % d == 0), îl adunăm la sumă
- Afișăm suma
Scrie soluția în Python:
Soluție corectă:
n = int(input())
s = 0
for d in range(1, n // 2 + 1):
if n % d == 0:
s = s + d
print(s)
Ce învățăm: suma divizorilor proprii este baza pentru verificarea numerelor perfecte din Ora 3.
Exercițiul Practic: Recapitulare și test
Sarcini de lucru
Completează următoarele sarcini pentru a verifica tot ce ai învățat în acest modul
Sarcina 1: Descompunere și numărul de divizori
Cerință: Scrie un program complet care citește un număr n, afișează descompunerea în factori primi și apoi numărul total de divizori ai lui n.
Soluție pentru Sarcina 1:
n = int(input())
d = 2
nr_divizori = 1
while n > 1:
p = 0
while n % d == 0:
n = n // d
p = p + 1
if p > 0:
print(d, "^", p)
nr_divizori = nr_divizori * (p + 1)
d = d + 1
print("Numar de divizori:", nr_divizori)
Verifică: pentru n = 72 = 2^3 * 3^2, numărul de divizori este (3+1)*(2+1) = 12.
Sarcina 2: CMMDC și CMMMC
Cerință: Scrie un program care citește două numere și afișează CMMDC și CMMMC al lor, folosind algoritmul lui Euclid.
Soluție pentru Sarcina 2:
a, b = map(int, input().split())
ca, cb = a, b
while b:
a, b = b, a % b
cmmdc = a
cmmmc = ca * cb // cmmdc
print("CMMDC:", cmmdc)
print("CMMMC:", cmmmc)
Verifică: pentru 24 36 se afișează CMMDC: 12 și CMMMC: 72.
Scrie pe caiet - De reținut
Titlul lecției
Recapitulare și test.
Definiția lecției
Lecția este o recapitulare a întregului modul: revedem extragerea cifrelor cu % și //, suma cifrelor cu un acumulator, numărarea cifrelor pare cu un contor, divizorii, factorii primi, CMMDC și conversiile între baze. Scopul este să învățăm să combinăm algoritmii în aceeași problemă și să alegem instrumentul potrivit: pentru cifre folosim while, pentru divizori for, iar pentru CMMDC algoritmul lui Euclid. Un exemplu de problemă combinată este să citim un număr n și să afișăm suma cifrelor sale și numărul de cifre pare, într-un singur pasaj prin cifre. În viața reală, aceste tehnici apar la verificarea numerelor de cont, în criptografie și la organizarea datelor. Testul din această oră verifică exact aceste abilități.
Definiții esențiale
- Ultima cifră:
n % 10; eliminarea ei:n // 10. - Oglinditul:
og = og * 10 + n % 10; palindrom = număr egal cu oglinditul său. - Divizor al lui n: d cu
n % d == 0; număr prim = exact 2 divizori; număr perfect = suma divizorilor proprii. - Factorii primi: împărțiri repetate de la 2; CMMDC = Euclid, CMMMC =
a * b // CMMDC. - Baza 2: resturile împărțirilor la 2, citite invers; înapoi:
z = z * 2 + cifra.
Algoritmul cheie - pseudocod
Algoritmul cheie - cod Python
n = int(input())
s = 0
cnt = 0
while n > 0:
c = n % 10
s = s + c
if c % 2 == 0:
cnt = cnt + 1
n = n // 10
print(s)
print(cnt)Greșeli comune de evitat
- Modificarea lui n într-o buclă și folosirea lui ulterior fără a fi salvat.
- Confuzia între acumulator (sumă) și contor (numărătoare): suma se inițializează cu 0, contorul tot cu 0, dar rolurile diferă.
- Verificarea parității cifrei cu
c == 2în loc dec % 2 == 0. - Lipsa tratării cazului n = 0 la numărarea cifrelor sau la conversii.
Sfaturi practice și trucuri
- Rezolvă orice problemă în trei pași: citire, prelucrare, afișare.
- Testează cu valori mici pe hârtie (ex: n = 123) înainte de rulare.
- Alege algoritmul potrivit: cifre → while cu % și //; divizori → for; CMMDC → Euclid; baze → resturi la 2.
- Combina mai multe prelucrări într-un singur pasaj prin cifre pentru eficiență.
Exemplu practic
Problema combinată a orei: citim n și afișăm suma cifrelor și numărul de cifre pare, într-un singur pasaj prin cifre:
n = 2025
s = 0
cnt = 0
while n > 0:
c = n % 10
s = s + c
if c % 2 == 0:
cnt = cnt + 1
n = n // 10
print(s)
print(cnt)Pentru 2025 programul afișează: suma 9 și numărul 2, pentru cele două cifre pare (2 și 0).