Lecție pentru bacalaureat · Informatică

Prelucrarea cifrelor unui număr

Clasa a IX-a

Ideile de bază pe scurt și, unde există, exercițiile din subiectele de BAC care le verifică. Lecția completă, animată, cu grile și exerciții corectate, e în aplicația Tomomi.

Pe scurt

Formulă

Sintaxă: extragerea cifrelor (mod / div 10)

Bucla care vizitează toate cifrele unui număr, de la dreapta la stânga:

cât timp n > 0 execută
    c ← n mod 10
    n ← n div 10
■
while (n > 0) {
    int c = n % 10;
    n = n / 10;
}
Idee

Idee: ultima cifră iese prima

Bucla de extragere prelucrează cifrele în ordine inversă față de scrierea numărului: prima cifră extrasă din 752 este 2. De aceea oglinditul se construiește natural, dar afișarea cifrelor în ordinea originală cere altă abordare.

Formulă

Șablon: oglinditul unui număr

Construiește în o numărul cu cifrele inversate:

o ← 0
cât timp n > 0 execută
    o ← o * 10 + n mod 10
    n ← n div 10
■
int o = 0;
while (n > 0) {
    o = o * 10 + n % 10;
    n = n / 10;
}
Sfat

Capcana: bucla distruge n

După bucla de extragere, n este 0: fiecare n / 10 a tăiat câte o cifră. Dacă valoarea inițială mai este necesară (de exemplu la comparația din palindrom), salvează o copie înainte de buclă:

int a = n;
while (a > 0) {
    // prelucrează a, nu n
}
Idee

Idee: palindrom = egal cu oglinditul

Un număr este palindrom exact când este egal cu oglinditul lui: 1221, 757, 8. Testul complet: copiază n, oglindește copia, compară cu originalul.

Sfat

Capcana: zerourile dispar la capete

Oglinditul lui 120 este 21, nu 021: zeroul extras primul lasă o = 0, care nu afișează nimic în față. În schimb zerourile din mijloc se păstrează: oglinditul lui 806 este 608.

Din subiectele de BAC

Exerciții reale din subiectele anilor trecuți. Încearcă-le singur înainte să deschizi rezolvarea.

Algoritmul următor este reprezentat în pseudocod. S-a notat cu a%b restul împărțirii numărului natural a la numărul natural nenul b, și cu [c] partea întreagă a numărului real c.

citește x (număr natural)
p ← 1; m ← -1
┌cât timp p≤x execută
│ c ← [x/p]%10
│┌dacă c>m atunci
││ m ← c; p ← p*10
││altfel
││ x ← [x/(p*10)]*p+x%p
│└■
└■
┌dacă m≥0 atunci scrie x
│ altfel scrie "nul"
└■

Scrieți valoarea afișată dacă se citește numărul 6907512.

Vezi rezolvarea

Algoritmul parcurge cifrele de la unități spre stânga; p indică poziția curentă, iar m reține cea mai mare cifră întâlnită. Dacă cifra curentă c este strict mai mare decât m, este păstrată; altfel este eliminată din număr.

Trasare pentru x=6907512x = 6907512:

  • c=2>−1c=2 > -1: se păstrează, m=2m=2, p=10p=10
  • c=1≤2c=1 \le 2: se elimină, x=690752x=690752
  • c=5>2c=5 > 2: se păstrează, m=5m=5, p=100p=100
  • c=7>5c=7 > 5: se păstrează, m=7m=7, p=1000p=1000
  • c=0≤7c=0 \le 7: se elimină, x=69752x=69752
  • c=9>7c=9 > 7: se păstrează, m=9m=9, p=10000p=10000
  • c=6≤9c=6 \le 9: se elimină, x=9752x=9752
  • p=10000>9752p=10000 > 9752: bucla se oprește

Cum m=9≥0m=9 \ge 0, se afișează 9752.

Toate lecțiile de Informatică

Descarcă

Începe azi. Bacul nu așteaptă.

Descarcă Tomomi pe telefonul copilului tău și pornește perioada de probă gratuită.