Ce vei învăța astăzi?
După această lecție, vei stăpâni operațiile de bază cu cifrele unui număr și vei putea rezolva probleme complexe.
Suma Cifrelor - Conceptul Fundamental
Definiție: Suma cifrelor unui număr se obține adunând toate cifrele care îl compun.
Exemplu: Pentru numărul 1234, suma cifrelor = 1 + 2 + 3 + 4 = 10.
Algoritm: Extragem fiecare cifră și o adăugăm la o sumă inițializată cu 0
Analogie: Pușculița cu monede
Gândește-te la suma cifrelor ca la strângerea de monede într-o pușculiță:
suma = 0
InițializareExtragi cifra 4 → suma = 4
1234 % 10 = 4Extragi cifra 3 → suma = 7
123 % 10 = 3Aduni toate cifrele
Final: suma = 10Produsul Cifrelor - Explicație Detaliată
Definiție: Produsul cifrelor se obține înmulțind toate cifrele care compun numărul.
ATENȚIE CRITICĂ: Se inițializează cu 1 (nu cu 0), pentru că 1 este elementul neutru la înmulțire.
🎯 Exemplu pentru n=1234:
Algoritm: Inițializăm produsul cu 1, extragem fiecare cifră și o înmulțim
CE SE ÎNTÂMPLĂ DACĂ NUMĂRUL CONȚINE 0?
produs = 1 × 5 = 5
produs = 5 × 0 = 0
produs = 0 × 2 = 0
Dacă există o cifră 0, produsul devine 0 pentru totdeauna!
| Caracteristică | Suma Cifrelor | Produsul Cifrelor | De ce este diferit? |
|---|---|---|---|
| Inițializare | suma = 0 | produs = 1 | 0 este neutru la adunare, 1 la înmulțire |
| Operație în buclă | suma += cifra | produs *= cifra | += pentru adunare, *= pentru înmulțire |
| Efectul lui 0 | 0 se adaugă, suma crește puțin | 0 distruge produsul → devine 0 | Orice × 0 = 0 |
| Exemplu: n=203 | 0+2+0+3 = 5 | 1×0×2×0×3 = 0 | Suma e 5, produsul e 0 |
Test rapid de înțelegere:
Care este produsul cifrelor pentru numărul 500?
Truc mnemonic pentru a nu uita:
"Suma începe de la Zero, Produsul de la Unu"
Pentru că 0 + cifră = cifră
Pentru că 1 × cifră = cifră
Operațiile de Bază cu Cifrele
Suma Cifrelor
Aduni toate cifrele
Produsul Cifrelor
Înmulțești toate cifrele
Suma Cifrelor Pare
Aduni doar cifrele pare
Media Cifrelor
Suma împărțită la numărul de cifre
Important: Pentru n=0, bucla nu se execută, suma rămâne 0 (corect, suma cifrelor lui 0 este 0).
Atenție la inițializare: Produsul se inițializează cu 1, nu cu 0! 0×oricе = 0 ar distruge calculul.
Test de paritate: cifra % 2 == 0 testează dacă cifra este pară. Pentru cifre impare: cifra % 2 == 1.
| Operație | Inițializare | Operație în buclă | Exemplu n=123 |
|---|---|---|---|
| Suma | suma = 0 | suma = suma + cifra | 1+2+3 = 6 |
| Produs | produs = 1 | produs = produs * cifra | 1×2×3 = 6 |
| Suma pare | suma = 0 | dacă (cifra%2==0) suma+=cifra | 2 = 2 |
| Media | suma=0, cnt=0 | suma+=cifra, cnt++ | 6/3 = 2.0 |
Exercițiu de completare - Suma cifrelor pare:
Completează codul C++ pentru suma cifrelor pare:
Bancă de cuvinte:
Test de înțelegere: Ce se întâmplă cu produsul?
Test rapid:
Care va fi produsul cifrelor pentru numărul 205?
Algoritmul de calcul:
Capcane comune și soluții
Greșeli frecvente la operații cu cifre:
Soluție: produs ← 1 (element neutru pentru înmulțire)
Pentru n=0, produsul ar trebui să fie 0 (singura cifră este 0), dar bucla nu se execută.
Folosirea aceluiași algoritm pentru ambele operații fără ajustări.
Best Practices pentru operații cu cifre:
PbInfo #3 - Suma cifrelor pare
Enunț:
Cerință: Se citește un număr natural n. Să se calculeze suma cifrelor pare ale lui n.
Date de intrare:
Programul citește de la tastatură numărul n.
Date de ieșire:
Programul va afișa pe ecran suma cifrelor pare ale lui n.
Exemplu:
Intrare:
123456
Ieșire:
12
Explicație: Cifrele pare sunt 2, 4, 6 → 2+4+6 = 12
Cum gândim soluția:
- Citim numărul n
- Inițializăm
sumaPare ← 0 - Folosim while (n != 0) pentru a extrage cifrele
- La fiecare iterație:
cifra = n % 10(extrage ultima cifră)- Dacă
cifra % 2 == 0(cifra este pară): sumaPare = sumaPare + cifran = n / 10(elimină cifra)
- Afișăm sumaPare
Execuție pentru n=13579 (toate impare):
Ce trebuie să verifici mereu?
- Cazul n=0: are o cifră (0), care este pară → suma=0
- Numere cu toate cifrele impare: suma va fi 0
- Numere care conțin 0: 0 este par, se adaugă la sumă
- Condiția de paritate:
cifra % 2 == 0
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sumaPare = 0;
// Pentru n=0, bucla nu se execută, suma rămâne 0 (corect)
while (n != 0) {
int cifra = n % 10;
// Verifică dacă cifra este pară
if (cifra % 2 == 0) {
sumaPare += cifra;
}
n /= 10; // Elimină ultima cifră
}
cout << sumaPare;
return 0;
}
Ce învățăm din această problemă:
- Condiții în buclă: Folosim if pentru a filtra cifrele
- Test de paritate:
cifra % 2 == 0pentru cifre pare - Acumulare condiționată: Adunăm doar dacă condiția este adevărată
- Cazuri speciale: n=0, numere cu toate cifrele impare
PbInfo #4 - Produsul cifrelor
Problemă care necesită atenție la inițializare
Enunț:
Cerință: Se citește un număr natural n. Să se calculeze produsul cifrelor lui n.
Date de intrare:
Programul citește de la tastatură numărul n.
Date de ieșire:
Programul va afișa pe ecran produsul cifrelor lui n.
Exemplu:
Intrare:
123
Ieșire:
6
Explicație: 1×2×3 = 6
Cum gândim soluția:
- Citim numărul n
- ATENȚIE: Inițializăm
produs ← 1(nu 0!) - Tratăm cazul special n=0 (are o cifră, 0, produsul este 0)
- Pentru n≠0, folosim while (n != 0):
cifra = n % 10produs = produs * cifran = n / 10
- Afișăm produsul
Execuție pentru n=205 (cu 0 în număr):
De ce această problemă este mai dificilă?
Trebuie să ai grijă la două aspecte critice:
- Inițializarea corectă: produs = 1 (element neutru pentru înmulțire)
- Tratarea lui n=0: Dacă n=0, produsul este 0 (singura cifră este 0)
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int produs;
// Caz special: n = 0 are o cifră (0), produsul este 0
if (n == 0) {
produs = 0;
} else {
// Pentru n ≠ 0, inițializăm cu 1 (element neutru)
produs = 1;
while (n != 0) {
produs *= n % 10; // Înmulțește cu ultima cifră
n /= 10; // Elimină ultima cifră
}
}
cout << produs;
return 0;
}
Varianta alternativă (mai scurtă):
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
// Varianta scurtă: tratăm n=0 cu un if special
if (n == 0) {
cout << 0;
return 0;
}
int produs = 1;
while (n != 0) {
produs *= n % 10;
n /= 10;
}
cout << produs;
return 0;
}
Ce învățăm din această problemă:
- Inițializare corectă: produs = 1 (nu 0!) pentru înmulțire
- Cazul n=0: Trebuie tratat separat (produsul este 0)
- Zero în număr: Dacă numărul conține 0, produsul va fi 0
- Operatorul *=: Versiune scurtă pentru înmulțire repetată
Exercițiul Practic: Operații cu cifre
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida cunoștințele despre operațiile cu cifre
Sarcina 1: Analiză algoritm produs cifre
Analizează algoritmul pentru produsul cifrelor:
Pentru n=304, care va fi rezultatul și de ce?
Soluție pentru Sarcina 1:
Analiza pentru n=304:
- Algoritmul pentru produs:
- Dacă n=304 ≠ 0, inițializăm produs = 1
- Bucla while se execută:
- Iterația 1: n=304, cifra=4 → produs = 1×4 = 4, n devine 30
- Iterația 2: n=30, cifra=0 → produs = 4×0 = 0, n devine 3
- Iterația 3: n=3, cifra=3 → produs = 0×3 = 0, n devine 0
- Rezultat corect:
0 - Explicație: Produsul este 0 pentru că numărul conține cifra 0. Orice înmulțit cu 0 dă 0.
Concluzie importantă: Dacă un număr conține cel puțin o cifră 0, produsul cifrelor va fi întotdeauna 0.
Sarcina 2: Suma cifrelor impare
Cerință: Implementează în C++ un program care citește un număr și afișează suma cifrelor impare ale acestuia.
Soluție pentru Sarcina 2:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sumaImpare = 0;
// Pentru n=0, bucla nu se execută, suma rămâne 0 (corect)
while (n != 0) {
int cifra = n % 10;
// Verifică dacă cifra este impară
if (cifra % 2 == 1) {
sumaImpare += cifra;
}
n /= 10; // Elimină ultima cifră
}
cout << sumaImpare;
return 0;
}
Explicații importante:
- Analog cu suma cifrelor pare: Același algoritm, doar condiția se schimbă
- Test de imparitate:
cifra % 2 == 1pentru cifre impare - Varianta alternativă:
cifra % 2 != 0funcționează la fel - Cazul n=0: Funcționează corect - bucla nu se execută, suma rămâne 0
- Teste recomandate:
- n=123456 → cifre impare: 1,3,5 → suma = 1+3+5 = 9
- n=2468 → toate cifrele pare → suma = 0
- n=13579 → toate impare → suma = 1+3+5+7+9 = 25
- n=0 → nici o cifră impară → suma = 0