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

Ora 7: Recapitulare și test

Ce vei învăța astăzi: Integrarea cunoștințelor și evaluare

Rezultat practic: Recapitulezi prelucrările numerice și rezolvi probleme integrate cu cifre și divizori.

Săptămâna 16

Înainte de a începe

De ce contează? Astăzi vezi că toți algoritmii învățați (cifre, divizori, factori primi, CMMDC, baze) se combină între ei în aceeași problemă, iar integrarea lor este exact ceea ce se cere la test.

Ce știi deja?

Recapitulare rapidă: ce rezultat dă oglinditul lui 1234, câți divizori are 12 și care este CMMDC(24, 36)? Dacă ai răspuns corect, ești pregătit pentru problemele combinate de astăzi.

Ideea-cheie: O problemă combinată se rezolvă descompunând-o în prelucrări separate: un pasaj cu while pentru cifre, o buclă pentru divizori și algoritmul potrivit pentru fiecare cerință.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

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.

Recapitularea prelucrărilor numerice
Combinarea algoritmilor într-o problemă
Evaluarea cunoștințelor prin test
Rezolvarea de probleme complete

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

ALGORITMUL Problema combinată: suma cifrelor și numărul de cifre pare citește n s <- 0 cnt <- 0 cât timp n > 0 execută c <- n % 10 s <- s + c dacă c % 2 = 0 atunci cnt <- cnt + 1 n <- n // 10 sfârșit cât timp scrie s scrie cnt
Python - problemă combinată
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:
% // while 0

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:

Ai grijă la: nu modifica numărul original înainte de a termina toate prelucrările: dacă bucla cu n = n // 10 rulează înaintea celei de divizori, aceasta din urmă va prelucra valoarea greșită. Salvează o copie x = n la început.

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.

APLICARE ȘI REZOLVARE DE PROBLEME

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:
  1. Parcurgem cifrele lui n cu o buclă while
  2. Pentru fiecare cifră c, verificăm dacă c % 2 == 0
  3. Dacă da, creștem contorul
  4. 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:
  1. Parcurgem cu for numerele de la 1 la n // 2
  2. Dacă d este divizor (n % d == 0), îl adunăm la sumă
  3. 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ȚII PRACTICE

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

Algoritmul cheie - pseudocod

ALGORITMUL Prelucrarea cifrelor unui număr (sumă și cifre pare) citește n s <- 0 cnt <- 0 cât timp n > 0 execută c <- n % 10 s <- s + c dacă c % 2 = 0 atunci cnt <- cnt + 1 n <- n // 10 sfârșit cât timp scrie s scrie cnt

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

Sfaturi practice și trucuri

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).