Clasa a IX-a A, E
XI.
Algoritmi pentru prelucrarea prelucrarea cifrelor unui număr
1. Prezentare generală
Pentru prelucrarea cifrelor unui număr n se extrag pe rând cifrele acestuia. Întotdeauna cifra extrasă va fi cifra cea mai nesemnificativă (ultima cifră), cu operaţia n%10. După extragerea ultimei cifre, aceasta se prelucrează, apoi, această cifră, se elimină din numărul iniţial. Algoritmul continuă până când numărul mai are cifre (n!=0).
while (n!=0) / /cât timp numărul mai are cifre execută { uc = n % 10; //extrage ultima cifră //prelucrează ultima cifră n= n/10 //elimină ultima cifră }
2. Probleme rezolvate
2.1. Să se afişeze cifrele unui număr citit de la tastatură. Exemplu: dacă se citește n = 8275 se va afișa 5 7 2 8. Rezolvare:
În acest caz prelucrarea înseamnă afişarea ultimei cifre. Datele necesare sunt
următoarele: n – numărul – numărul citit, uc – variabila – variabila în care păstrăm ultima cifră. #include using namespace std; int n,uc; int main() { //citesc n cout << "n="; cin>>n; while(n!=0) //cat timp numarul are cifre { uc = n % 10; //calculez ultima cifra cout<
2.2. Se citește un număr natural n. Să se calculeze suma cifrelor numarului. Exemplu: pentru n = 8275 se afișează 22.
1
Clasa a IX-a A, E Explicație: în acest caz prelucrarea cifrelor înseamnă calculul unei sume. De fiecare dată după ce obținem cifra aceasta o adunăm la sumă. #include using namespace std; int n,uc; int main() { cout << "n="; cin>>n; //citesc n s = 0;//suma se inițializează cu 0, adică vom începe calculul sumei de la 0 while(n!=0) //cat timp numărul are cifre { uc = ………….; //calculez ultima cifra s = s + uc; //adun cifra obținută la sumă n = ……………………; //elimin ultima cifra } cout<
2.3. Să se afişeze inversul (răsturnatul unui număr citit de la tastatură. Ex: pentru n=43961 se va afişa 16934. Rezolvare: Fie n numărul iniţial şi variabila inv cea care reţine inversul numărului n. La fiecare pas
ultima cifră trebuie adăugată la sfârșitul numărului.
n
uc
inv
0 43961
1
1=0*10+1
4396 439
6 9
16=1*10+6 169=16*10+9
43
3
1693=169*10+3
4 0
4
16934=1693*10+4
La fiecare pas inversul se calculează ca inv = inv*10 + uc;
2
Clasa a IX-a A, E
#include using namespace std; int n,uc, inv; int main() { cout << "n="; cin>>n; //citesc n inv = 0;//initial nu am nicio cifra adaugata while(…………………………………..) //cat timp numărul are cifre
{ uc = ………….; //calculez ultima cifra inv = inv * 10 + uc; //adaug cifra la sfarsitul numarului n = ……………………; //elimin ultima cifra } cout<
2.4. Se citeşte un număr întreg n. Să se formeze un nou număr care conţine numai cifrele pare ale numărului iniţial. Exemplu: pentru n=27455 se va forma numărul 24. Rezolvare: Se prelucrează ultima cifră. Dacă aceasta este pară se va adăuga în noul număr pe
poziţia cea mai semnificativă (la începutul numărului). Astfel, o variabilă p va reţine pe care poziţie din număr se adaugă cifra extrasă (a unităţilor p=1, a zecilor p=10, a sutelor p=100 etc). #include using namespace std; int n,uc, nr, p; int main() { ……………………………………; //citesc n p = 1; //prima cifra para o pun pe pozitia unitatilor nr = 0;//initial nu am nicio cifra adaugata while(…………………………………..) //cat timp numărul are cifre { uc = ………….; //calculez ultima cifra if( ……………………………) //daca ultima cifra e para { nr = uc*p + nr; //adaug cifra pe pozitia corespunzatoare } n = ……………………; //elimin ultima cifra } cout<
numarul
format
}
3
din
cifrele
Clasa a IX-a A, E 2.5. Se citeşte un număr întreg n. Să se calculeze și să se afișeze cea mai mare cifră a sa. Exemplu: pentru n=27455 se va afișa 7. Explicație: atunci când trebuie să calculăm o valoare maximă valoarea inițială a acesteia trebuie să fie foarte mică. Prin urmare vom utiliza o variabilă
maxim a
cărei valoare inițială va fi -1 (o
valoare mai mică decât cea mai mică cifră posibilă). Vom prelucra cifrele numărului și dacă găsim o valoare mai mare decât maximul, valoarea maximă va deveni acea cifră. #include using namespace std; int n,uc, maxim; int main() { ……………………………………; //citesc n maxim = -1;//initial maximul are o valoare foarte mică while(…………………………………..) //cat timp numărul are cifre { uc = ………….; //calculez ultima cifra if(
maxim
<
uc)
//daca
ultima
cifra
e
mai
mare
ca
//maximul
{//pot lipsi acoladele maxim = uc; //retin noul maxim } n = ……………………; //elimin ultima cifra } cout<
cifra
de
valoare
maxim
return 0; }
3.Probleme propuse 3.1. Se citeşte un număr întreg n. Să se calculeze și să se afișeze cea mai mică cifră a sa. Exemplu:
pentru n=274155 se va afișa 1. Explicație: atunci când trebuie să calculăm o valoare maximă valoarea inițială a acesteia trebuie să fie foarte mare, mai mare decât cea mai mare cifră posibilă. Prelucrăm cifrele numărului și dacă găsim o valoare mai mică decât minimul de până atunci reținem această cifră. 3.2. Se citește un număr natural n. Să se calculeze și să se afișeze numărul de cifre ale numărului. Exemplu: pentru n=274155 se va afișa 6 (numărul are 6 cifre).
Explicație: o variabilă nr va număra numărul de cifre ale numărului. Numărătoarea începe de la 0, prin urmare valoarea inițială a variabilei nr va fi 0. Se prelucrează cifrele numărului și de f iecare
4
Clasa a IX-a A, E
dată când se calculează ultima cifră numărul de cifrea ale numărului crește cu 1 (valoare variabilei nr crește cu 1). După prelucrarea cifrelor se afișează valoarea variabilei nr. 3.3. Se citește un număr n. Să se verifice dacă acesta este palindrom și să se afișeze mesajul
“PALINDROM” dacă numărul e alindrome și “NU E PALINDROM” în caz contrar. Un număr e palindrom dacă e egal cu inversul (răsturnatul său). Exemplu: dacă se citește n = 1221 se va afișa “PALINDROM”, iar dacă se citește n = 653 se va
afișa “NU E PALINDROM”. Explicație: se calculează inversul (oglinditul) unui număr. Dar atenție: ne trebuie atât valoarea inițială cât și inversul numărului. Dar dacă prelucrăm cifrele numărului, acesta ajunge la 0. De aceea înainte de a începe să prelucrăm cifrele reținem valoare lui n într -o variabilă auxiliară (să
zicem
au x ).
După ce am calculat inversul comparăm valoarea acestuia cu
au x . Dacă
valorile
sunt egale se afișează mesajul precizat, în caz contrar celălalt mesaj. 3.4. Se citește un număr întreg n. Să se calculeze produsul cifrelor nenule. Exemplu: dacă se
citește n = 3054 se va afișa 60. Explicație: Valoarea inițială a produsului va fi 1. Se prelucrează pe rând cifrele numărului și dacă cifra e nenulă (diferită de 0) aceasta se înmulțește cu produsul. 3.5. Se citește un număr natural n. Să
se calculeze suma cifrelor impare. Exemplu: dacă se
citește n = 65094 se va afișa 14. Explicație: Valoarea inițială a sumei va fi 0. Se prelucrează pe rând cifrele numărului și dacă
cifra e impară aceasta se adună la sumă. 3.6. Se citește un număr natural n. Să se formeze un număr format numai din cifrele impare ale
lui n. Exemplu: dacă se citește n = 65094 se va afișa 59. Explicație: se prelucrează cifrele numărului. Dacă o cifră este impară aceasta se adaugă pe poziția corespunzătoare (prima cifră pe poziția unităților, a doua pe poziția zecilor, a treia pe poziția sutelor, etc).
5