Structura Repetitivă „Cât timp” în Pseudocod și C++

Teorie

Structura repetitivă „Cât timp”

1. Introducere detaliată cu exemple din viața reală

În viața de zi cu zi, multe activități se repetă automat, fără să ne gândim la ele. Aceste repetări depind de anumite condiții care trebuie îndeplinite. De exemplu:

Observă că în toate aceste exemple există două elemente fundamentale:

Acesta este exact principiul structurii „cât timp” din programare: repetăm un set de instrucțiuni atâta timp cât o condiție rămâne adevărată.

2. Analogie vizuală

Poți să îți imaginezi „cât timp” ca pe un întrerupător automat sau un „gardian” al instrucțiunilor:

Această analogie ajută să înțelegi conceptul de buclă repetitivă ca pe o verificare constantă a unei stări, în timp ce programul continuă să execute instrucțiuni doar când starea este adecvată.

3. De ce este „Cât timp” atât de important

Exemple în programare:

Astfel, „cât timp” permite ca programele să fie reactive și adaptative, nu doar secvențiale.

4. Forma generală

Pseudocod

Cât timp <condiție> execută
    <instrucțiuni>
Sfârșit cât timp
      

C++

while (condiție) {
    // instrucțiuni
}
      

Explicație detaliată

5. Pericolul buclei infinite

6. Observație esențială despre condiția buclei

7. Esența structurii repetitive printr-un exemplu

Se citește de la tastatură un număr natural de 3 cifre. Scopul este să se determine și să se afișeze suma cifrelor acestui număr.

Metoda „Dacă”

Natural x
Citeste x            // x = 357
s <- 0            // s = 0, inițial suma cifrelor este 0

s <- s + x % 10            // se adaugă ultima cifră a lui x → s devine 7
x <- [x / 10]            // se elimină ultima cifră a lui x → x devine 35


s <- s + x % 10            // s devine 12
x <- [x / 10]            // x devine 3


s <- s + x % 10            // s devine 15
x <- [x / 10]            // x devine 0

scrie s
          

Observație: instrucțiunile s <- s + x % 10 și x <- [x / 10] se repetă de 3 ori, câte o dată pentru fiecare cifră. Aceasta arată ideea de repetare chiar dacă aici am scris fiecare pas separat.

Metoda „Cât timp”

Natural x
Citeste x            // x = 357
s <- 0            // s = 0, suma cifrelor inițială
Cat timp x ≠ 0 executa
    s <- s + x % 10            // se adaugă ultima cifră a lui x la suma s
    x <- [x / 10]            // se elimină ultima cifră a lui x
sfarsit_cat_timp
scrie s
          

Observație: repetarea se realizează automat prin bucla „cât timp”. O singură instrucțiune este scrisă o singură dată, dar se execută de mai multe ori până când condiția devine falsă.

📘 Exemple rezolvate – instrucțiunea while

1️⃣ Afișarea numerelor de la 1 la n

Enunț:
Se citește un număr natural n. Să se afișeze numerele de la 1 la n.

Explicație detaliată:
1. Inițializăm variabila i cu valoarea 1.
2. Verificăm condiția i ≤ n.
3. Dacă este adevărată, afișăm valoarea lui i.
4. Creștem valoarea lui i cu 1.
5. Ne întoarcem la verificarea condiției, deoarece while este o structură repetitivă.

Rezolvare pas cu pas (n = 5):

  • i = 1 → 1 ≤ 5 → adevărat → afișăm 1 → i devine 2
  • i = 2 → 2 ≤ 5 → adevărat → afișăm 2 → i devine 3
  • i = 3 → 3 ≤ 5 → adevărat → afișăm 3 → i devine 4
  • i = 4 → 4 ≤ 5 → adevărat → afișăm 4 → i devine 5
  • i = 5 → 5 ≤ 5 → adevărat → afișăm 5 → i devine 6
  • i = 6 → 6 ≤ 5 → fals → STOP

Tabel de variație:

IterațiaiCondițieAfișarei după
11adevărat12
22adevărat23
33adevărat34
44adevărat45
55adevărat56

Pseudocod:

i ← 1
cat timp i ≤ n executa
    scrie i
    i ← i + 1
sfarsit cat timp

C++:

int i = 1;
while (i <= n) {
    cout << i << " ";
    i = i + 1;
}

2️⃣ Suma numerelor citite până la 0

Enunț:
Se citesc numere până la introducerea valorii 0. Să se afișeze suma lor.

Explicație detaliată:
1. Inițializăm suma s cu 0.
2. Citim primul număr x.
3. Cât timp x ≠ 0, adunăm x la sumă.
4. Citim următorul număr.
5. Când apare 0, ciclul se oprește.

Rezolvare pas cu pas (2 4 6 8 10 0):

  • x=2 → s=2
  • x=4 → s=6
  • x=6 → s=12
  • x=8 → s=20
  • x=10 → s=30
  • x=0 → STOP

Tabel de variație:

Iterațiaxs
122
246
3612
4820
51030

Pseudocod:

s ← 0
citeste x
cat timp x ≠ 0 executa
    s ← s + x
    citeste x
sfarsit cat timp
scrie s

C++:

int s = 0, x;
cin >> x;
while (x != 0) {
    s = s + x;
    cin >> x;
}
cout << s;

3️⃣ Factorialul unui număr

Enunț:
Se citește un număr n. Să se calculeze factorialul său (n!).

Explicație detaliată:
1. Inițializăm o variabilă p cu valoarea 1. Aceasta va stoca rezultatul factorialului.
2. Inițializăm un contor i cu 1.
3. Verificăm condiția buclei: i ≤ n. Dacă este adevărată, intrăm în buclă.
4. În interiorul buclei, calculăm p = p * i.
5. Incrementăm i cu 1 și revenim la pasul 3.
6. Repetăm până când i > n. La final, p conține factorialul lui n.

Rezolvare pas cu pas (n=5):

  • i=1 → p=1 → i devine 2
  • i=2 → p=1*2=2 → i devine 3
  • i=3 → p=2*3=6 → i devine 4
  • i=4 → p=6*4=24 → i devine 5
  • i=5 → p=24*5=120 → i devine 6 (iesim din buclă)

Tabel de variație:

Iterațiaip
111
222
336
4424
55120

Pseudocod:

p ← 1
i ← 1
cat timp i ≤ n executa
    p ← p * i
    i ← i + 1
sfarsit cat timp
scrie p

C++:

int p = 1, i = 1;
while (i <= n) {
    p = p * i;
    i = i + 1;
}
cout << p;

4️⃣ Numărul de cifre

Enunț:
Se citește un număr x. Determinați câte cifre are.

Explicație detaliată:
1. Inițializăm un contor cnt cu valoarea 0.
2. Verificăm condiția buclei: x ≠ 0. Dacă este adevărată, intrăm în buclă.
3. Incrementăm cnt cu 1, pentru a număra cifra curentă.
4. Eliminăm ultima cifră din x prin împărțire întreagă: x = x / 10.
5. Repetăm pașii 2–4 până când x = 0. La final, cnt conține numărul de cifre.

Rezolvare pas cu pas (x=12345):

  • Iterația 1: x=12345, cnt=0 → cnt devine 1 → x devine 1234
  • Iterația 2: x=1234, cnt=1 → cnt devine 2 → x devine 123
  • Iterația 3: x=123, cnt=2 → cnt devine 3 → x devine 12
  • Iterația 4: x=12, cnt=3 → cnt devine 4 → x devine 1
  • Iterația 5: x=1, cnt=4 → cnt devine 5 → x devine 0 (iesim)

Tabel de variație:

Iterațiaxcnt
1123451
212342
31233
4124
515

Pseudocod:

cnt ← 0
cat timp x ≠ 0 executa
    cnt ← cnt + 1
    x ← x div 10
sfarsit cat timp
scrie cnt

C++:

int cnt = 0;
while (x != 0) {
    cnt++;
    x = x / 10;
}
cout << cnt;

5️⃣ Suma cifrelor

Enunț:
Se citește un număr x. Să se determine suma cifrelor sale.

Explicație detaliată:
1. Inițializăm o variabilă suma cu 0.
2. Verificăm condiția buclei: x ≠ 0.
3. Luăm ultima cifră: cifra = x % 10.
4. Adunăm cifra la suma: suma = suma + cifra.
5. Eliminăm ultima cifră din x: x = x / 10.
6. Repetăm pașii 2–5 până când x = 0. La final, suma conține suma cifrelor.

Rezolvare pas cu pas (x=47291):

  • Iterația 1: x=47291 → cifra=1 → suma=0+1=1 → x devine 4729
  • Iterația 2: x=4729 → cifra=9 → suma=1+9=10 → x devine 472
  • Iterația 3: x=472 → cifra=2 → suma=10+2=12 → x devine 47
  • Iterația 4: x=47 → cifra=7 → suma=12+7=19 → x devine 4
  • Iterația 5: x=4 → cifra=4 → suma=19+4=23 → x devine 0 (iesim)

Tabel de variație:

Iterațiaxcifrasuma
14729111
24729910
3472212
447719
54423

Pseudocod:

s ← 0
cat timp x ≠ 0 executa
    s ← s + (x mod 10)
    x ← x div 10
sfarsit cat timp
scrie s

C++:

int s = 0;
while (x != 0) {
    s = s + (x % 10);
    x = x / 10;
}
cout << s;

Exerciții propuse

  1. Se citește un număr natural n. Afișați pătratele numerelor de la 1 la n.
    Exemplu: Input: 5 → Output: 1 4 9 16 25
  2. Se citește un număr natural n. Determinați suma numerelor pare de la 1 la n.
    Exemplu: Input: 6 → Output: 12
  3. Se citesc numere întregi până la introducerea lui 0. Să se afișeze cel mai mare număr citit.
    Exemplu: Input: 3 7 2 0 → Output: 7
  4. Se citește un număr natural n. Determinați suma cifrelor pare ale lui n.
    Exemplu: Input: 4826 → Output: 20
  5. Se citește un număr natural n. Determinați câte cifre impare are n.
    Exemplu: Input: 5741 → Output: 3
  6. Se citesc numere întregi până la introducerea lui 0. Afișați media aritmetică a numerelor pozitive.
    Exemplu: Input: 4 -2 6 0 → Output: 5
  7. Se citește un număr natural n. Afișați toți divizorii lui n în ordine crescătoare.
    Exemplu: Input: 12 → Output: 1 2 3 4 6 12
  8. Se citesc n numere întregi. Determinați suma numerelor negative și a celor pozitive separat.
    Exemplu: Input: n=5 si numerele -3 5 -2 4 0 → Output: Suma pozitive: 9, Suma negative: -5
  9. Se citește un număr natural n. Verificați dacă n este palindrom.
    Exemplu: Input: 12321 → Output: Da; Input: 12345 → Output: Nu
  10. Se citesc numere întregi până la introducerea lui 0. Să se afișeze numărul de numere pare și numărul de numere impare.
    Exemplu: Input: 2 3 4 5 0 → Output: Numere pare: 2, Numere impare: 2
  11. Se citește un număr natural n. Afișați numărul obținut prin inversarea primei cu ultima cifră.
    Exemplu: Input: 4723 → Output: 3724
  12. Se citește un număr natural n și două valori k și z. Oglindiți primele k cifre și ultimele z cifre ale lui n.
    Exemplu: Input: 12345678, k=3, z=2 → Output: 32145687
  13. Se citește un număr natural n. Determinați dacă cifra mediană este mai mare decât media cifrelor. (Cifra mediana = cifra de mijloc; daca numarul are un numar par de cifre, cifra mediana se poate lua ca numarul format din cele 2 cifre de mijloc, dar in acest caz se ia prima cifra din stanga adica 8.)
    Exemplu: Input: 4826 → Output: Da
  14. Se citește un număr natural n. Determinați perechile de cifre consecutive (alaturate) crescătoare si afisati-le ca in exemplu.
    Exemplu: Input: 13452 → Output: (1,3) (3,4) si (4,5)           Explicatie: perechile sunt: (1,3) (3,4) si (4,5) luate de la prima la ultima cifra
  15. Se citește un număr natural n. Determinați suma cifrelor de pe poziții pare și suma cifrelor de pe poziții impare.
    Exemplu: Input: 482617 → Output: Suma poziții pare: 21, Suma poziții impare: 7
  16. Se citește un număr natural n. Afișați numărul obținut prin eliminarea cifrei maxime și a cifrei minime.
    Exemplu: Input: 482617 → Output: 4267
  17. Se citește un număr natural n. Înlocuiți toate cifrele impare cu 0.
    Exemplu: Input: 573849 → Output: 000840
  18. Se citește un număr natural n. Afișați numărul obținut prin duplicarea fiecărei cifre.
    Exemplu: Input: 341 → Output: 334411
  19. Se citește un număr natural n și o valoare k. Rotiti cifrele lui n cu k poziții spre dreapta.
    Exemplu: Input: 123456, k=2 → Output: 561234         Explicatie: dupa prima rotire numarul este: 612345, iar dupa a doua rotire numarul este: 561234
  20. Se citește un număr natural n. Afișați numărul obținut prin inversarea cifrelor pare și păstrarea cifrelor impare la locul lor.
    Exemplu: Input: 482367 → Output: 628347
  21. Se citește un număr natural n. Afișați suma cifrelor situate pe poziții prime și suma cifrelor situate pe poziții compuse.
    Exemplu: Input: 1234567 → Output: Suma poziții prime: 17, Suma poziții compuse: 11         Explicatie: Pozitiile prime din numar sunt: 2,3,5 si 7, iar pozitiile compuse sunt celelalte.
  22. Se citește un număr natural n. Determinați dacă cifra unităților este egală cu suma cifrelor zecilor și sutelor.
    Exemplu: Input: 374 → Output: Nu
  23. Se citește un număr natural n. Afișați numărul obținut prin eliminarea tuturor cifrelor repetate.
    Exemplu: Input: 112345344 → Output: 12345         Explicatie: numarul final va fi format din cifrele crescatoare, ca valoare, a numarului initial indiferent de pozitiile lor in acest numar, de exemplu pentru 534241 se va afisa tot 12345
  24. Se citește un număr natural n. Afișați numărul obținut prin intercalarea cifrelor lui n cu cifrele sale în ordine inversă.
    Exemplu: Input: 123 → Output: 132231
  25. Se citește un număr natural n și o valoare k. Inserați cifra 0 după fiecare k cifre ale lui n.
    Exemplu: Input: 1234567, k=3 → Output: 102340567
  26. Se citește un număr natural n. Determinați dacă n poate fi împărțit în două subnumere cu aceeași sumă a cifrelor.
    Exemplu: Input: 123321 → Output: Da
  27. Se citește un număr natural n. Afișați toate perechile de cifre consecutive care au suma pară.
    Exemplu: Input: 482617 → Output: (4,8), (8,2), (2,6), (1,7)         Obs: Se vor afisa exact in aceasta ordine. (pornind de la prima cifra)
  28. Se citește un număr natural n. Determinați numărul de cifre care sunt mai mari decât cifra precedentă.
    Exemplu: Input: 13542 → Output: 2
  29. Se citește un număr natural n și o valoare k. Afișați numărul obținut prin rotirea cifrelor lui n cu k poziții spre stânga.
    Exemplu: Input: 123456, k=2 → Output: 345612

Alte exerciții propuse

  1. Se citește un număr natural n. Să se determine cifra care apare de cele mai multe ori în scrierea lui n. Dacă există mai multe, se va afișa cea mai mare dintre ele.
    Exemplu: Input: 1223383 → Output: 3
  2. Se citește un număr natural n. Considerăm suma cifrelor din prima jumătate și suma cifrelor din a doua jumătate (dacă numărul are cifre impar, cifra din mijloc se ignoră). Să se verifice dacă numărul este "echilibrat" (cele două sume sunt egale).
    Exemplu: Input: 123321 → Output: DA
  3. Se citește un număr natural n. Să se verifice dacă cifrele sale sunt dispuse alternativ (...,par, impar, par, impar...).
    Exemplu: Input: 27493 → Output: NU
  4. Se citește un număr natural n. Să se determine dacă cifrele lui n pot fi permutate astfel încât să se obțină un palindrom.
    Exemplu: Input: 112233 → Output: DA
  5. Se citește un număr natural n. Să se determine cea mai mare cifră aflată pe o poziție pară (numărând de la dreapta la stânga).
    Exemplu: Input: 472816 → Output: 4
  6. Se citește un număr natural n. Să se afișeze numărul obținut prin eliminarea cifrelor consecutive egale (păstrăm o singură apariție din fiecare grup).
    Exemplu: Input: 1223334555 → Output: 12345
  7. Se citește un număr natural n. Să se construiască un nou număr format doar din cifrele prime (2,3,5,7) ale lui n, păstrând ordinea; dacă nu există astfel de cifre se afișează -1.
    Exemplu: Input: 124579 → Output: 257
  8. Se citește un număr natural n. Să se determine cea mai mare diferență absolută dintre două cifre vecine din număr.
    Exemplu: Input: 57248 → Output: 5
  9. Se citește un număr natural n. Să se verifice dacă cifrele sale sunt în ordine strict crescătoare sau strict descrescătoare.
    Exemplu: Input: 13578 → Output: strict crescător
  10. Se citește un număr natural n. Se formează toate numerele cu câte două cifre consecutive (de la stânga la dreapta). Să se determine câte dintre aceste numere sunt pătrate perfecte.
    Exemplu: Input: 64941 → Output: 2         Explicatie: numerele sunt 64 si 49
  11. Se citește un număr natural n. Să se determine dacă există vreo cifră egală cu media aritmetică a cifrelor vecine stânga-dreapta; dacă da, afișați prima astfel de cifră, altfel -1.
    Exemplu: Input: 523458 → Output: 3         Explicatie: sunt 2 cifre care respecta conditia 3 si 4
  12. Se citește un număr natural n. Să se elimine toate cifrele impare care se află între două cifre pare consecutive.
    Exemplu: Input: 28165496 → Output: 286546         Explicatie: se elimina cifrele 1 si 9 deoarece chiar daca intalnim perechile (8,6) si (4,6) ambele se considera cifre pare consecutive
  13. Se citește un număr natural n. Să se determine dacă există o poziție astfel încât suma cifrelor din stânga ei este egală cu suma cifrelor din dreapta; dacă da, afișați cifra de pe acea poziție, altfel -1.
    Exemplu: Input: 943146 → Output: -1
  14. Se citește un număr natural n. Să se verifice dacă toate cifrele impare din n apar în ordine strict crescătoare (în ordinea lor în număr).
    Exemplu: Input: 35179 → Output: NU
  15. Se citește un număr natural n. Să se verifice dacă printr-o rotație circulară a cifrelor se poate obține același număr (adică numărul este periodic).
    Exemplu: Input: 123123 → Output: DA
  16. Se citește un număr natural n. Să se determine dacă toate cifrele prime (2,3,5,7) din n sunt distincte.
    Exemplu: Input: 2375 → Output: DA
  17. Se citește un număr natural n. Să se determine dacă diferența dintre cifre consecutive este constantă (toate diferențele absolute identice).
    Exemplu: Input: 9753 → Output: DA
  18. Se citește un număr natural n. Să se determine câte grupuri de cifre egale consecutive există.
    Exemplu: Input: 122333221 → Output: 4
  19. Se citește un număr natural n. Fiecare cifră pară se înlocuiește cu cifra imediat următoare (0→1, 2→3, ..., 8→9), iar fiecare cifră impară rămâne neschimbată. Afișați numărul rezultat.
    Exemplu: Input: 48269 → Output: 59379
  20. Se citește un număr natural n. Calculați produsul cifrelor de pe poziții impare și produsul cifrelor de pe poziții pare; afișați care dintre ele este mai mare sau dacă sunt egale.
    Exemplu: Input: 2534112 → Output: Produsul pozițiilor pare este mai mare         Explicatie: 5 * 4 * 1 > 2 * 3 * 1 * 2

Rezolvarea exercitiilor propuse


Toate rezolvarile pseudocod au fost testate in TESTARE PSEUDOCOD 4.

1. Pătratele numerelor de la 1 la n

Enunț:
Se citește un număr natural n. Să se afișeze pătratele numerelor de la 1 la n separate prin câte un spațiu.

Exemplu:
Input: n = 5
Output: 1 4 9 16 25

Mod de gândire:
Parcurgem numerele în ordine, de la 1 până la n. Pentru fiecare număr calculăm pătratul, adică îl înmulțim cu el însuși, și afișăm rezultatul. Deoarece acești pași se repetă pentru fiecare număr, folosim o buclă „cat timp” care continuă cât timp valoarea curentă este mai mică sau egală cu n.

Rezolvare pas cu pas (n=5):

Tabel de variație:

IterațiaiPătrat
111
224
339
4416
5525

Pseudocod:

// Citim valoarea lui n
citeste n

// Inițializăm variabila i cu prima valoare din interval
i <- 1

// Parcurgem numerele de la 1 la n
cat timp i <= n executa

    // Calculăm pătratul numărului curent
    p <- i * i

    // Afișăm pătratul urmat de un spațiu
    scrie p, " "

    // Trecem la următorul număr
    i <- i + 1

sfarsit_cat_timp

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


2. Suma numerelor pare de la 1 la n

Enunț:
Se citește un număr natural n. Să se determine suma numerelor pare de la 1 la n.

Exemplu:
Input: n = 6
Output: 12 (2+4+6)

Mod de gândire:
Parcurgem toate numerele de la 1 până la n. Pentru fiecare număr verificăm dacă este par, adică dacă se împarte exact la 2. Dacă este par, îl adunăm la o sumă totală. Dacă este impar, îl ignorăm. Repetăm acest proces până când ajungem la n, iar la final afișăm suma numerelor pare găsite.

Rezolvare pas cu pas (n=6):

Tabel de variație:

Iterațiaisuma
110
222
332
446
556
6612

Pseudocod:

// Citim valoarea maximă n
citeste n

// Inițializăm suma numerelor pare cu 0
suma <- 0

// Inițializăm contorul i cu 1
i <- 1

// Parcurgem toate numerele de la 1 la n
cat timp i <= n executa

    // Verificăm dacă numărul curent este par
    daca i % 2 = 0 atunci
        // Adăugăm numărul par la sumă
        suma <- suma + i
    sfarsit_daca

    // Trecem la următorul număr
    i <- i + 1

sfarsit_cat_timp

// Afișăm suma numerelor pare
scrie suma

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


3. Cel mai mare număr dintr-o secvență

Enunț:
Se citesc numere întregi până la introducerea lui 0. Să se afișeze cel mai mare număr citit.

Exemplu:
Input: 3 7 2 0
Output: 7

Mod de gândire:
Pentru a determina cel mai mare număr dintr-o secvență, citim mai întâi primul număr și îl considerăm maximul inițial. Apoi citim pe rând următoarele valori și le comparăm cu maximul curent. Dacă găsim un număr mai mare, actualizăm maximul. Procesul se repetă până când se citește valoarea 0, care marchează sfârșitul secvenței.

Rezolvare pas cu pas (input: 3 7 2 0):

Tabel de variație:

Iterațiaxmax
133
277
327
407

Pseudocod:

// Citim primul număr din secvență
citeste x

// Inițializăm maximul cu prima valoare citită
max <- x

// Continuăm citirea numerelor până când apare 0
cat timp x != 0 executa

    // Verificăm dacă numărul curent este mai mare decât maximul
    daca x > max atunci
        // Actualizăm maximul
        max <- x
    sfarsit_daca

    // Citim următorul număr
    citeste x

sfarsit_cat_timp

// Afișăm cel mai mare număr găsit
scrie max

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


4. Suma cifrelor pare ale unui număr

Enunț:
Se citește un număr natural n. Să se determine suma cifrelor pare ale lui n.

Exemplu:
Input: 4826
Output: 20 (4 + 8 + 2 + 6)

Mod de gândire:
Pentru a calcula suma cifrelor pare, analizăm fiecare cifră a numărului pe rând. Extragem ultima cifră cu restul împărțirii la 10. Dacă cifra este pară, o adunăm la suma totală. Eliminăm apoi ultima cifră prin împărțire întreagă la 10 și repetăm pașii până când numărul devine 0.

Rezolvare pas cu pas (n = 4826):

Tabel de variație:

Iterațiancifrasuma
1482666
248228
348816
44420

Pseudocod:

// Citim numărul n
citeste n

// Inițializăm suma cifrelor pare
suma <- 0

// Parcurgem cifrele numărului
cat timp n != 0 executa

    // Extragem ultima cifră
    cifra <- n % 10

    // Verificăm dacă cifra este pară
    daca cifra % 2 = 0 atunci
        // Adunăm cifra pară la sumă
        suma <- suma + cifra
    sfarsit_daca

    // Eliminăm ultima cifră din număr
    n <- [n / 10]

sfarsit_cat_timp

// Afișăm suma cifrelor pare
scrie suma

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


5. Numărul de cifre impare ale unui număr

Enunț:
Se citește un număr natural n. Determinați câte cifre impare are.

Exemplu:
Input: 5741
Output: 3 (cifre impare: 5, 7, 1)

Mod de gândire:
Pentru a afla câte cifre impare are un număr, analizăm fiecare cifră pe rând. Luăm ultima cifră folosind restul împărțirii la 10 și verificăm dacă este impară. Dacă este impară, creștem un contor. Apoi eliminăm ultima cifră prin împărțire întreagă la 10 și repetăm pașii până când numărul devine 0.

Rezolvare pas cu pas (n=5741):

Tabel de variație:

Iterațiancifracnt
1574111
257441
35772
4553

Pseudocod:

// Citim numărul n
citeste n

// Inițializăm contorul cifrelor impare
cnt <- 0

// Parcurgem toate cifrele numărului
cat timp n != 0 executa

    // Extragem ultima cifră
    cifra <- n % 10

    // Verificăm dacă cifra este impară
    daca cifra % 2 != 0 atunci
        // Incrementăm contorul cifrelor impare
        cnt <- cnt + 1
    sfarsit_daca

    // Eliminăm ultima cifră din număr
    n <- [n / 10]

sfarsit_cat_timp

// Afișăm numărul de cifre impare
scrie cnt

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


6. Media aritmetică a numerelor pozitive

Enunț:
Se citesc numere întregi până la introducerea lui 0. Afișați media aritmetică a numerelor pozitive.

Exemplu:
Input: 4 -2 6 0
Output: 5 (media numerelor pozitive: (4+6)/2)

Mod de gândire:
Pentru a calcula media numerelor pozitive, parcurgem toate numerele citite până la întâlnirea lui 0. Pentru fiecare număr pozitiv, îl adunăm la o sumă totală și creștem un contor. La final, dacă există cel puțin un număr pozitiv, împărțim suma la contor pentru a obține media.

Rezolvare pas cu pas (input: 4 -2 6 0):

Tabel de variație:

Iterațiaxsumacnt
1441
2-241
36102
40102

Pseudocod:

// Inițializăm suma numerelor pozitive
suma <- 0

// Inițializăm contorul numerelor pozitive
cnt <- 0

// Citim primul număr
citeste x

// Repetăm citirea până la introducerea lui 0
cat timp x != 0 executa

    // Verificăm dacă numărul este pozitiv
    daca x > 0 atunci
        // Adunăm numărul la sumă
        suma <- suma + x
        // Incrementăm contorul
        cnt <- cnt + 1
    sfarsit_daca

    // Citim următorul număr
    citeste x

sfarsit_cat_timp

// Verificăm dacă există numere pozitive
daca cnt != 0 atunci
    // Calculăm media aritmetică
    media <- suma / cnt
    scrie media
altfel
    // Nu există numere pozitive
    scrie "Nu s-au introdus numere pozitive"
sfarsit_daca

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


7. Divizorii unui număr

Enunț:
Se citește un număr natural n. Afișați toți divizorii lui n în ordine crescătoare separati prin cate un spatiu.

Exemplu:
Input: 12
Output: 1 2 3 4 6 12

Mod de gândire:
Pentru a găsi toți divizorii unui număr, putem verifica fiecare număr de la 1 până la n. Dacă numărul curent îl împarte pe n fără rest (n % i == 0), atunci este divizor și îl afișăm. Ideea este să parcurgem toate numerele într-o buclă „cat timp” sau „pentru” și să aplicăm această verificare simplă pentru fiecare. Astfel, la final, vom obține toți divizorii în ordine crescătoare.

Rezolvare pas cu pas (n=12):

Tabel de variație (primele 6 iterații):

Iterațiain % iDivizor afișat
1101
2202
3303
4404
552-
6606

Pseudocod:

citeste n
// variabia i ia valori de la 1 la n
i <- 1
cat timp i <= n executa
 // daca i este divizor a lui n (n este divizibil cu i) 
    daca n % i = 0 atunci
        scrie i," "
    sfarsit_daca 
   // i creste din 1 in 1 pana cand i ajunge n+1 si iese din cat timp
    i <- i + 1
sfarsit_cat_timp

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


8. Suma numerelor pozitive și negative

Enunț:
Se citesc n numere întregi. Determinați suma numerelor negative și a celor pozitive separat.

Exemplu:
Input: n=5 și numerele -3 5 -2 4 0
Output: Suma pozitive: 9, Suma negative: -5

Mod de gândire:
Pentru a calcula separat suma numerelor pozitive și negative, putem parcurge fiecare număr citit într-o buclă „cat timp” sau „pentru”. Dacă numărul este pozitiv, îl adunăm la suma pozitivă; dacă este negativ, îl adunăm la suma negativă. La final, afișăm ambele sume. Această metodă ne permite să procesăm toate numerele într-un mod organizat, fără să fie nevoie să le clasificăm înainte de a începe bucla.

Rezolvare pas cu pas (n=5, numerele -3 5 -2 4 0):

Tabel de variație:

IterațiaxSuma pozitivăSuma negativă
1-30-3
255-3
3-25-5
449-5
509-5

Pseudocod:


// se citeste numarul de numere
citeste n
suma_pos <- 0
suma_neg <- 0
// i pleaca de la 1 si ajunge la n, i reprezinta la al catelea numar am ajuns, i=3 inseamna ca citesc al treilea numar
i <- 1
// cat timp nu am termina de citit numerele
cat timp i <= n executa
  // citesc urmatorul numar
    citeste x
    daca x >= 0 atunci
   // daca este pozitiv il adaug la suma elementelor pozitive 
        suma_pos <- suma_pos + x
    altfel  
          // daca este negativ se aduna la suma numerelor negative      
           suma_neg <- suma_neg + x        
    sfarsit_daca
  // trecem la urmatorul numar, se modifica pozitia cu 1 
    i <- i + 1
sfarsit_cat_timp
scrie "Suma pozitive: ", suma_pos
scrie rand liber
scrie "Suma negative: ", suma_neg

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


9. Verificarea dacă un număr este palindrom

Enunț:
Se citește un număr natural n. Verificați dacă n este palindrom (adică se citește la fel de la stânga la dreapta și de la dreapta la stânga).

Exemplu:
Input: 12321 → Output: Da
Input: 12345 → Output: Nu

Mod de gândire:
Pentru a verifica dacă un număr este palindrom, putem reconstrui numărul în ordine inversă și apoi să-l comparăm cu numărul original. Începem cu o variabilă care va stoca inversul și parcurgem cifra cu cifra a numărului, luând ultima cifră (n % 10) și adăugând-o la invers, apoi eliminăm ultima cifră din n prin împărțire întreagă la 10. La final, dacă numărul invers este egal cu numărul original, atunci este palindrom. Această metodă ne permite să verificăm simetria cifrelor fără să le transformăm în șiruri de caractere.

Rezolvare pas cu pas (n=12321):

Comparăm invers=12321 cu numărul original=12321 → sunt egale → output: Da

Tabel de variație:

Iterațiancifrainvers
11232111
21232212
31233123
41221232
51112321

Pseudocod:

citeste n
// se pastreaza valoarea initiala a lui n in variabila original (un fel de cn)
original <- n
invers <- 0
cat timp n != 0 executa
  // cifra ia valoarea fiecarei cifre a lui n pe rand  
    cifra <- n % 10
 // formula in care se adauga cifra la oglindit
    invers <- invers * 10 + cifra
 // se elimina ultima cifra din n
    n <- [n / 10]
sfarsit_cat_timp
// conditia ca original (adica n-ul citit initial) este egal cu invers (sau oglindit)
daca invers = original atunci
    scrie "Da"
altfel
    scrie "Nu"
sfarsit_daca

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


10. Numere pare și impare

Enunț:
Se citesc numere întregi până la introducerea lui 0. Să se afișeze numărul de numere pare și numărul de numere impare. (Primul numar citit este diferit de 0.)

Exemplu:
Input: 2 3 4 5 0
Output: Numere pare: 2, Numere impare: 2

Mod de gândire:
Pentru a afla câte numere pare și câte impare există într-o secvență, putem parcurge fiecare număr citit. Dacă numărul se împarte exact la 2, este par și incrementăm contorul pentru numere pare; altfel, este impar și incrementăm contorul pentru impare. Repetăm această verificare pentru fiecare număr până când întâlnim 0, moment în care avem valorile finale ale celor două contoare.

Rezolvare pas cu pas (input: 2 3 4 5 0):

Tabel de variație:

Iterațiaxcnt_parcnt_impar
1210
2311
3421
4522
5022

Pseudocod:

// Inițializăm contorul pentru numere pare
cnt_par <- 0

// Inițializăm contorul pentru numere impare
cnt_impar <- 0

// Citim primul număr (garantat diferit de 0)
citeste x

// Repetăm citirea și verificarea până când x devine 0
cat timp x != 0 executa

    // Verificăm dacă numărul este par
    daca x % 2 = 0 atunci
        // Dacă este par, incrementăm contorul de numere pare
        cnt_par <- cnt_par + 1
    altfel
        // Dacă nu este par, atunci este impar
        cnt_impar <- cnt_impar + 1
    sfarsit_daca

    // Citim următorul număr
    citeste x

sfarsit_cat_timp

// Afișăm numărul de numere pare
scrie "Numere pare: ", cnt_par

// Trecem pe rând nou
scrie rand liber

// Afișăm numărul de numere impare
scrie "Numere impare: ", cnt_impar

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


11. Inversarea primei și ultimei cifre

Enunț:
Se citește un număr natural n. Afișați numărul obținut prin inversarea primei cu ultima cifră.

Exemplu:
Input: 4723
Output: 3724

Mod de gândire:

Explicația algoritmului – secvență cu secvență


Secvența 1 – Determinarea ultimei cifre și a restului numărului

Ce vrea să facă secvența:
Se extrage ultima cifră a numărului și se elimină această cifră din număr.

Cum gândim secvența:
Ultima cifră a unui număr se obține cu operația % 10. Prin împărțirea întreagă la 10 eliminăm ultima cifră.

Pseudocod (secvență):


ult <- n % 10
rest <- [n/10]

Tabel de variație:

VariabilăValoareExplicație
n4723Numărul inițial
ult3Ultima cifră
rest472Numărul fără ultima cifră

Secvența 2 – Determinarea primei cifre

Ce vrea să facă secvența:
Se determină prima cifră a numărului.

Cum gândim secvența:
Prima cifră rămâne după eliminarea tuturor cifrelor din dreapta, prin împărțiri repetate la 10.

Pseudocod (secvență):


prim <- rest
cat timp prim >= 10 executa
    prim <- [prim/10]
sfarsit_cat_timp

Tabel de variație:

PasprimExplicație
1472Valoare inițială
247Eliminăm ultima cifră
34Prima cifră găsită

Secvența 3 – Calcularea numărului de cifre

Ce vrea să facă secvența:
Se determină numărul total de cifre ale numărului.

Cum gândim secvența:
La fiecare împărțire la 10 se elimină o cifră. Numărăm aceste eliminări.

Pseudocod (secvență):


numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

Tabel de variație:

Pascnnumar_cifre
147230
24721
3472
443
504

Secvența 4 – Calcularea puterii lui 10

Ce vrea să facă secvența:
Se calculează valoarea 10numar_cifre − 1 fără operatorul ^.

Cum gândim secvența:
Pornim de la 1 și înmulțim repetat cu 10 până obținem puterea necesară.

Pseudocod (secvență):


putere <- 1
i <- 1
cat timp i < numar_cifre executa
    putere <- putere * 10
    i <- i + 1
sfarsit_cat_timp

Tabel de variație:

Pasiputere
111
2210
33100
441000

Secvența 5 – Determinarea cifrelor din mijloc

Ce vrea să facă secvența:
Se extrag cifrele dintre prima și ultima cifră.

Cum gândim secvența:
Folosim restul împărțirii pentru a păstra doar cifrele din interior.

Pseudocod (secvență):


rest_cifre <- rest % [putere/10]

Tabel de variație:

VariabilăValoare
rest472
putere1000
rest_cifre72

Secvența 6 – Construirea numărului final

Ce vrea să facă secvența:
Se construiește numărul final cu prima și ultima cifră inversate.

Cum gândim secvența:
Ultima cifră este mutată pe prima poziție, iar prima cifră pe ultima poziție.

Pseudocod (secvență):


nou <- ult * putere + rest_cifre * 10 + prim

Tabel de variație final:

VariabilăValoare
ult3
prim4
rest_cifre72
putere1000
nou3724

Pseudocod complet:


// Citim numărul n
citeste n

// Determinăm ultima cifră și eliminăm ultima cifră
ult <- n % 10
rest <- [n/10]

// Determinăm prima cifră
prim <- rest
cat timp prim >= 10 executa
    prim <- [prim/10]
sfarsit_cat_timp

// Calculăm numărul de cifre
numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

// Calculăm puterea lui 10
putere <- 1
i <- 1
cat timp i < numar_cifre executa
    putere <- putere * 10
    i <- i + 1
sfarsit_cat_timp

// Determinăm cifrele din mijloc
rest_cifre <- rest % [putere/10]

// Construim numărul final
nou <- ult * putere + rest_cifre * 10 + prim

// Afișăm rezultatul
scrie nou

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


12. Oglindirea primelor k și ultimele z cifre

Enunț:
Se citește un număr natural n și două valori k și z. Oglindiți primele k cifre și ultimele z cifre ale lui n.
Dacă numărul nu are cel puțin k+z cifre, se va afișa IMPOSIBIL.

Exemplu:
Input: 12345678, k=3, z=2
Output: 32145687

Mod de gândire detaliat:

Explicația algoritmului – secvență cu secvență


Secvența 1 – Determinarea numărului de cifre

Ce vrea să facă secvența:
Se determină câte cifre are numărul n.

Cum gândim secvența:
La fiecare împărțire întreagă la 10 eliminăm o cifră. Numărăm aceste eliminări.

Pseudocod (secvență):


numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

Tabel de variație:

Pascnnumar_cifre
1123456780
212345671
31234562
4123453
512344
61235
7126
817
908

Secvența 2 – Verificarea condiției k + z

Ce vrea să facă secvența:
Se verifică dacă numărul are suficiente cifre.

Cum gândim secvența:
Dacă numărul de cifre este mai mic decât k + z, problema nu poate fi rezolvată.

Pseudocod (secvență):


daca numar_cifre < k + z atunci
    scrie "IMPOSIBIL"

Tabel de verificare:

numar_cifrek+zRezultat
85Continuăm

Secvența 3 – Extragerea primelor k cifre

Ce vrea să facă secvența:
Se păstrează doar primele k cifre ale numărului.

Cum gândim secvența:
Eliminăm ultimele numar_cifre − k cifre prin împărțiri repetate la 10.

Pseudocod (secvență):


prim <- n
x <- numar_cifre - k
cat timp x != 0 executa
    prim <- [prim/10]
    x <- x - 1
sfarsit_cat_timp

Tabel de variație:

Pasprimx
1123456785
212345674
31234563
4123452
512341
61230

Secvența 4 – Calcularea puterilor lui 10

Ce vrea să facă secvența:
Se calculează valorile necesare pentru separarea segmentelor.

Cum gândim secvența:
Pornim de la 1 și înmulțim repetat cu 10.

Pseudocod (secvență – putere_z):


putere_z <- 1
i <- 1
cat timp i <= z executa
    putere_z <- putere_z * 10
    i <- i + 1
sfarsit_cat_timp

Tabel de variație:

iputere_z
110
2100

Secvența 5 – Oglindirea primelor k cifre

Ce vrea să facă secvența:
Se inversează ordinea primelor k cifre.

Cum gândim secvența:
Construim un număr nou adăugând ultima cifră la final.

Pseudocod (secvență):


primele_oglindite <- 0
cat timp prim != 0 executa
    cifra <- prim % 10
    primele_oglindite <- primele_oglindite * 10 + cifra
    prim <- [prim/10]
sfarsit_cat_timp

Tabel de variație:

primcifraprimele_oglindite
12333
12232
11321

Secvența 6 – Oglindirea ultimelor z cifre

Ce vrea să facă secvența:
Se inversează ordinea ultimelor z cifre.

Cum gândim secvența:
Ultimele z cifre se obțin folosind restul împărțirii la 10z. Pentru oglindire, extragem pe rând ultima cifră cu % 10 și o adăugăm la finalul unui număr nou, folosind înmulțirea cu 10.

Pseudocod (secvență):


ultimele_oglindite <- 0
cn <- n % putere_z
cat timp cn != 0 executa
    cifra <- cn % 10
    ultimele_oglindite <- ultimele_oglindite * 10 + cifra
    cn <- [cn/10]
sfarsit_cat_timp

Tabel de variație:

cncifraultimele_oglindite
7888
7787

Secvența 7 – Construirea numărului final

Ce vrea să facă secvența:
Se reconstruiește numărul cu segmentele oglindite.

Cum gândim secvența:
Numărul final se formează prin alipirea a trei părți:

Exemplu concret:
Pentru n = 12345678, k = 3, z = 2: Numărul se construiește astfel: Rezultat final:
nou = 32100000 + 45600 + 87 = 32145687

Pseudocod (secvență):


nou <- primele_oglindite * putere_mijloc + mijloc * putere_z + ultimele_oglindite

Pseudocod complet:

// Citim datele de intrare
citeste n, k, z

// Calculăm numărul de cifre
cn <- n; numar_cifre <- 0
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

// Verificăm dacă putem continua
daca numar_cifre < k + z atunci
    scrie "IMPOSIBIL"
altfel
    // Extragem primele k cifre
    prim <- n; x <- numar_cifre - k
    cat timp x != 0 executa
        prim <- [prim/10]
        x <- x - 1
    sfarsit_cat_timp

    // Calculăm 10^z
    i <- 1; putere_z <-1
    cat timp i <= z executa
        putere_z <- putere_z * 10
        i <- i + 1
    sfarsit_cat_timp

    // Extragem ultimele z cifre
    ultimele <- n % putere_z

    // Calculăm 10^(numar_cifre-k) pentru mijloc
    putere_mijloc <- 1; i <- 1
    cat timp i <= numar_cifre - k executa
        putere_mijloc <- putere_mijloc * 10
        i <- i + 1
    sfarsit_cat_timp

    // Extragem cifrele din mijloc
    mijloc <- [(n % putere_mijloc) / putere_z]

    // Oglindim primele k cifre
    primele_oglindite <- 0
    cat timp prim != 0 executa
        cifra <- prim % 10
        primele_oglindite <- primele_oglindite * 10 + cifra
        prim <- [prim/10]
    sfarsit_cat_timp

    // Oglindim ultimele z cifre
    ultimele_oglindite <- 0
    cn <- ultimele
    cat timp cn != 0 executa
        cifra <- cn % 10
        ultimele_oglindite <- ultimele_oglindite * 10 + cifra
        cn <- [cn/10]
    sfarsit_cat_timp

    // Afișăm variabile intermediare pentru verificare
    scrie primele_oglindite," ",putere_mijloc," ",mijloc," ",putere_z," ",ultimele_oglindite
    scrie rand liber

    // Construim numărul final
    nou <- primele_oglindite * putere_mijloc + mijloc * putere_z + ultimele_oglindite
    scrie nou
sfarsit_daca

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


13. Cifra mediană și media cifrelor

Enunț:
Se citește un număr natural n. Determinați dacă cifra mediană este mai mare decât media cifrelor.
Cifra mediană este cifra din mijloc; dacă numărul are un număr par de cifre, cifra mediană se consideră prima cifră din stânga dintre cele două cifre de mijloc.

Exemplu:
Input: 4826
Output: Da

Mod de gândire detaliat:

Explicația algoritmului – secvență cu secvență


Secvența 1 – Determinarea numărului de cifre

Ce vrea să facă secvența:
Se determină câte cifre are numărul n.

Cum gândim secvența:
La fiecare împărțire la 10 se elimină o cifră. Numărăm aceste eliminări.

Pseudocod (secvență):


numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

Tabel de variație (n = 4826):

Pascnnumar_cifre
148260
24821
3482
443
504

Secvența 2 – Calcularea sumei cifrelor

Ce vrea să facă secvența:
Se calculează suma tuturor cifrelor numărului.

Cum gândim secvența:
Extragem ultima cifră cu % 10, o adunăm la sumă și o eliminăm prin împărțire la 10.

Pseudocod (secvență):


suma <- 0
cn <- n
cat timp cn != 0 executa
    cifra <- cn % 10
    suma <- suma + cifra
    cn <- [cn/10]
sfarsit_cat_timp

Tabel de variație:

cncifrasuma
482666
48228
48816
4420

Secvența 3 – Stabilirea poziției cifrei mediane

Ce vrea să facă secvența:
Se determină poziția cifrei mediane.

Cum gândim secvența:
Pentru a identifica cifra mediană, trebuie mai întâi să știm pe ce poziție se află aceasta în număr, numărând cifrele de la stânga la dreapta.

Există două situații posibile:

În exemplul nostru n = 4826, numărul are 4 cifre, deci este un număr par. Cifrele din mijloc sunt pe pozițiile 2 și 3, iar conform cerinței alegem poziția 2.

Această poziție ne spune a câta cifră de la stânga trebuie extrasă din număr în secvența următoare.

Pseudocod (secvență):


daca numar_cifre % 2 = 0 atunci
    poz <- numar_cifre / 2
altfel
    poz <- numar_cifre / 2 + 1
sfarsit_daca

Tabel de verificare:

numar_cifrepoz
42

Secvența 4 – Extragerea cifrei mediane

Ce vrea să facă secvența:
Se extrage cifra aflată pe poziția mediană.

Cum gândim secvența:
Acum că știm poziția cifrei mediane, trebuie să o extragem folosind doar operații matematice.

O cifră devine ultima cifră a unui număr atunci când toate cifrele din dreapta ei au fost eliminate. Eliminarea unei cifre din dreapta se face prin împărțire întreagă la 10.

Pentru ca cifra de pe poziția poz (numărată de la stânga) să ajungă ultima cifră, trebuie să eliminăm:

numar_cifre − poz cifre din dreapta

În exemplul nostru:

Eliminarea efectivă a cifrelor:

După aceste eliminări, cifra mediană a ajuns ultima cifră a numărului. Prin urmare, cifra mediană se obține cu operația:

cifra_mediu = 48 % 10 = 8

Aceasta este cifra mediană corectă, conform cerinței problemei.

Pseudocod (secvență):


cn <- n
x <- numar_cifre - poz
cat timp x != 0 executa
    cn <- [cn/10]
    x <- x - 1
sfarsit_cat_timp
cifra_mediana <- cn % 10

Tabel de variație:

cnx
48262
4821
480

Cifra mediană = 8


Secvența 5 – Calcularea mediei cifrelor

Ce vrea să facă secvența:
Se calculează media cifrelor.

Cum gândim secvența:
Media este raportul dintre suma cifrelor și numărul de cifre.

Pseudocod (secvență):


media <- suma / numar_cifre

Calcul:
media = 20 / 4 = 5


Secvența 6 – Compararea și afișarea rezultatului

Ce vrea să facă secvența:
Se verifică dacă cifra mediană este mai mare decât media cifrelor.

Cum gândim secvența:
Comparam direct cele două valori.

Pseudocod (secvență):


daca cifra_mediana > media atunci
    scrie "Da"
altfel
    scrie "Nu"
sfarsit_daca

Verificare:
8 > 5 → Da


Pseudocod complet:


// Citim numărul
citeste n

// Numărăm cifrele
numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

// Calculăm suma cifrelor
suma <- 0
cn <- n
cat timp cn != 0 executa
    cifra <- cn % 10
    suma <- suma + cifra
    cn <- [cn/10]
sfarsit_cat_timp

// Stabilim poziția cifrei mediane
daca numar_cifre % 2 = 0 atunci
    poz <- numar_cifre / 2
altfel
    poz <- numar_cifre / 2 + 1
sfarsit_daca

// Extragem cifra mediană
cn <- n
x <- numar_cifre - poz
cat timp x != 0 executa
    cn <- [cn/10]
    x <- x - 1
sfarsit_cat_timp
cifra_mediana <- cn % 10

// Calculăm media
media <- suma / numar_cifre

// Comparăm și afișăm rezultatul
daca cifra_mediana > media atunci
    scrie "Da"
altfel
    scrie "Nu"
sfarsit_daca

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


14. Perechile de cifre consecutive crescătoare (stânga → dreapta)

Enunț:
Se citește un număr natural n. Determinați perechile de cifre consecutive (alăturate) crescătoare și afișați-le în ordinea apariției.
Exemplu: Input: 13452 → Output: (1,3) (3,4) (4,5)
Explicație: perechile crescătoare sunt: (1,3), (3,4) și (4,5)

Mod de gândire detaliat:

Explicația algoritmului – secvență cu secvență

Secvența 1 – Determinarea numărului de cifre

Ce vrea să facă secvența:
Să aflăm câte cifre are numărul pentru a ști câte extrageri și comparații trebuie să facem.

Cum gândim secvența:
Împărțim repetat numărul la 10 și numărăm câte împărțiri putem face înainte ca numărul să devină 0.


numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

Exemplu numeric: n = 13452

Pascnnumar_cifre
1134520
213451
31342
4133
514
605

Secvența 2 – Calcularea puterii lui 10 pentru prima cifră

Ce vrea să facă secvența:
Să determinăm cât trebuie să împărțim numărul pentru a extrage prima cifră (cea mai din stânga).

Cum gândim secvența:
Pornim de la 1 și înmulțim cu 10 de numar_cifre-1 ori pentru a obține puterea corespunzătoare primei cifre.


putere <- 1
i <- 1
cat timp i < numar_cifre executa
    putere <- putere * 10
    i <- i + 1
sfarsit_cat_timp

Exemplu numeric: n = 13452 → numar_cifre = 5 → putere = 10000

Secvența 3 – Extragem prima cifră

Ce vrea să facă secvența:
Să extragem prima cifră pentru a o folosi la compararea cu următoarea cifră.

Cum gândim secvența:
Împărțim numărul la puterea corespunzătoare și păstrăm restul pentru a continua extragerile.


cifra_anteriora <- [n / putere]
n <- n % putere
putere <- putere / 10

Exemplu numeric: n = 13452, putere = 10000 → cifra_anteriora = 1, n devine 3452, putere devine 1000

Secvența 4 – Compararea cifrelor și afișarea perechilor crescătoare

Ce vrea să facă secvența:
Parcurge cifrele rămase și afișează fiecare pereche crescătoare imediat ce este identificată.

Cum gândim secvența:
1. Extragem cifra curentă (împărțind la putere).
2. Comparam cu cifra anterioară. Dacă cifra_curenta > cifra_anterioara → pereche crescătoare.
3. Afișăm perechea.
4. Actualizăm cifra anterioară și reducem n și puterea pentru următoarea iterație.


cat timp putere >= 1 executa
    cifra_curenta <- [n / putere]
    daca cifra_anteriora < cifra_curenta atunci
        scrie "(" + cifra_anteriora + "," + cifra_curenta + ")"
    sfarsit_daca
    cifra_anteriora <- cifra_curenta
    n <- n % putere
    putere <- putere / 10
sfarsit_cat_timp

Exemplu numeric pas cu pas pentru n = 13452:

Pascifra_anterioracifra_curentaPereche afișată
113(1,3)
234(3,4)
345(4,5)
452-

Pseudocod complet:


// Citim numărul
citeste n

// Determinăm numărul de cifre
numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

// Calculăm puterea de 10 pentru prima cifră
putere <- 1
i <- 1
cat timp i < numar_cifre executa
    putere <- putere * 10
    i <- i + 1
sfarsit_cat_timp

// Extragem prima cifră
cifra_anteriora <- [n / putere]
n <- n % putere
putere <- putere / 10

// Comparăm cifrele și afișăm perechile crescătoare
cat timp putere >= 1 executa
    cifra_curenta <- [n / putere]
    daca cifra_anteriora < cifra_curenta atunci
        scrie "(" + cifra_anteriora + "," + cifra_curenta + ")"
    sfarsit_daca
    cifra_anteriora <- cifra_curenta
    n <- n % putere
    putere <- putere / 10
sfarsit_cat_timp

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


15. Suma cifrelor de pe poziții pare și impare

Enunț:
Se citește un număr natural n. Determinați suma cifrelor de pe poziții pare și suma cifrelor de pe poziții impare.
Exemplu: Input: 482617 → Output: Suma poziții pare: 21, Suma poziții impare: 7

Mod de gândire detaliat:

Explicația algoritmului – secvență cu secvență

Secvența 1 – Determinarea numărului de cifre

Ce vrea să facă secvența:
Să aflăm câte cifre are numărul pentru a calcula puterea lui 10 pentru prima cifră.

Cum gândim secvența:
Împărțim repetat numărul la 10 și numărăm de câte ori până devine 0.


numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

Exemplu numeric: n = 482617 → numar_cifre = 6

Secvența 2 – Calcularea puterii lui 10 pentru prima cifră

Ce vrea să facă secvența:
Să obținem puterea lui 10 corespunzătoare primei cifre, pentru a extrage cifrele de la stânga la dreapta.

Cum gândim secvența:
Pornim de la 1 și înmulțim cu 10 de numar_cifre-1 ori.


putere <- 1
i <- 1
cat timp i < numar_cifre executa
    putere <- putere * 10
    i <- i + 1
sfarsit_cat_timp

Exemplu numeric: n=482617 → putere = 100000

Secvența 3 – Inițializarea sumelor și poziției

Ce vrea să facă secvența:
Inițializăm variabilele pentru suma cifrelor de pe poziții pare și impare și contorul poziției.

Cum gândim secvența:
Suma_pare și Suma_impare încep de la 0, poziția începe de la 1 (prima cifră este pe poziție impară).


suma_impare <- 0
suma_pare <- 0
pozitie <- 1

Secvența 4 – Parcurgerea cifrelor și calculul sumelor

Ce vrea să facă secvența:
Parcurge toate cifrele și adună fiecare cifră la suma corespunzătoare poziției (par sau impar).

Cum gândim secvența:
1. Extragem cifra curentă (împărțind la putere).
2. Dacă poziția este impară → adăugăm la suma_impare.
Dacă poziția este pară → adăugăm la suma_pare.
3. Actualizăm poziția, n și puterea pentru următoarea cifră.


cat timp putere >= 1 executa
    cifra <- [n / putere]
    daca pozitie % 2 = 1 atunci
        suma_impare <- suma_impare + cifra
    altfel
        suma_pare <- suma_pare + cifra
    sfarsit_daca
    n <- n % putere
    putere <- putere / 10
    pozitie <- pozitie + 1
sfarsit_cat_timp

Exemplu numeric pas cu pas pentru n = 482617:

PozCifraSuma imparSuma par
1440
2848
3268
46614
51714
67721

Secvența 5 – Afișarea rezultatului

Ce vrea să facă secvența:
Să afișăm sumele cifrelor de pe poziții pare și impare.

Cum gândim secvența:
Se folosește o singură instrucțiune de afișare pentru a prezenta rezultatul final.


scrie "Suma poziții pare: " + suma_pare + ", Suma poziții impare: " + suma_impare

Pseudocod complet:


// Citim numărul
citeste n

// Determinăm numărul de cifre
numar_cifre <- 0
cn <- n
cat timp cn != 0 executa
    numar_cifre <- numar_cifre + 1
    cn <- [cn/10]
sfarsit_cat_timp

// Calculăm puterea lui 10 pentru prima cifră
putere <- 1
i <- 1
cat timp i < numar_cifre executa
    putere <- putere * 10
    i <- i + 1
sfarsit_cat_timp

// Inițializăm sumele și poziția
suma_impare <- 0
suma_pare <- 0
pozitie <- 1

// Parcurgem cifrele și calculăm sumele
cat timp putere >= 1 executa
    cifra <- [n / putere]
    daca pozitie % 2 = 1 atunci
        suma_impare <- suma_impare + cifra
    altfel
        suma_pare <- suma_pare + cifra
    sfarsit_daca
    n <- n % putere
    putere <- putere / 10
    pozitie <- pozitie + 1
sfarsit_cat_timp

// Afișăm rezultatul
scrie "Suma poziții pare: " + suma_pare + ", Suma poziții impare: " + suma_impare

Obs: Pentru verificarea programului în Testare Pseudocod 4, ștergeți toate liniile care încep cu //.


Reclame Google AdSense

Flux de știri