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:
- Cât timp mai ai benzină în rezervor, poți să conduci mașina.
- Condiția: „mai ai benzină în rezervor”.
- Acțiunea repetată: „conduci mașina”.
- Când rezervorul se golește (condiția devine falsă) → acțiunea încetează, nu mai poți conduce.
- Cât timp este verde la semafor, mașinile circulă.
- Condiția: „se află semaforul pe verde”.
- Acțiunea repetată: „mașinile circulă”.
- Când semaforul devine roșu → oprirea mașinilor.
- Cât timp nu ți-e foame, nu mănânci.
- Condiția: „nu ți-e foame”.
- Acțiunea repetată: „nu mănânci”.
- Când apare foamea (condiția devine falsă) → începi să mănânci.
- Cât timp ești la școală, participi la ore.
- Condiția: „ești la școală”.
- Acțiunea repetată: „participi la ore”.
- Când se termină programul școlar → nu mai participi la ore.
Observă că în toate aceste exemple există două elemente fundamentale:
- Condiția – starea care controlează repetarea.
- Acțiunea repetată – ce se întâmplă cât timp condiția este adevărată.
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:
- Dacă condiția este adevărată → întrerupătorul permite trecerea și instrucțiunile se execută.
- După fiecare execuție, întrerupătorul verifică din nou condiția.
- Dacă condiția devine falsă → întrerupătorul se oprește și instrucțiunile nu se mai repetă.
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
- Nu știm câte repetări sunt necesare, spre deosebire de buclele „pentru” unde numărul de repetări este fix.
- Condiția poate depinde de evenimente externe sau de date introduse de utilizator.
- Permite programe flexibile, care se adaptează automat la situațiile reale.
- Este esențială în cazuri unde repetarea trebuie să continue până la apariția unui eveniment sau până când o valoare atinge un anumit prag.
Exemple în programare:
- Citirea numerelor de la utilizator până când apare valoarea 0.
- Repetarea unui joc până când jucătorul pierde sau câștigă.
- Monitorizarea continuă a unui senzor până când se detectează un prag critic.
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ă
- <condiție>: expresia logică care controlează repetarea buclei. Este verificată întotdeauna înainte de prima execuție.
- <instrucțiuni>: pașii care se repetă atâta timp cât condiția este adevărată. Trebuie să modifice valorile implicate pentru a evita bucle infinite.
- Sfârșit cât timp / acolade { }: marchează sfârșitul buclei. Instrucțiunile după aceasta se execută o singură dată.
5. Pericolul buclei infinite
- Dacă variabilele sau starea care controlează condiția nu se modifică corect, condiția poate rămâne adevărată pentru totdeauna.
- În acest caz, bucla nu se va opri niciodată → se numește buclă infinită.
- Bucla infinită poate bloca programul și poate cauza erori sau consum mare de resurse.
- Este esențial ca pentru fiecare buclă „cât timp” să existe cel puțin o situație în care condiția inițială este adevărată și la final devine falsă, astfel încât bucla să se încheie corect.
6. Observație esențială despre condiția buclei
- Din toate posibilitățile datelor de intrare, pentru cel puțin o valoare, condiția din „cât timp” trebuie să fie inițial adevărată pentru ca bucla să se execute cel puțin o dată.
- La final, după un număr finit de repetări, condiția trebuie să devină falsă pentru ca bucla să se încheie.
- Aceasta asigură că bucla este utilă și terminabilă, evitând bucle infinite și garantând continuitatea execuției programului.
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ția | i | Condiție | Afișare | i după |
|---|---|---|---|---|
| 1 | 1 | adevărat | 1 | 2 |
| 2 | 2 | adevărat | 2 | 3 |
| 3 | 3 | adevărat | 3 | 4 |
| 4 | 4 | adevărat | 4 | 5 |
| 5 | 5 | adevărat | 5 | 6 |
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ția | x | s |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 4 | 6 |
| 3 | 6 | 12 |
| 4 | 8 | 20 |
| 5 | 10 | 30 |
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ția | i | p |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 6 |
| 4 | 4 | 24 |
| 5 | 5 | 120 |
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ția | x | cnt |
|---|---|---|
| 1 | 12345 | 1 |
| 2 | 1234 | 2 |
| 3 | 123 | 3 |
| 4 | 12 | 4 |
| 5 | 1 | 5 |
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ția | x | cifra | suma |
|---|---|---|---|
| 1 | 47291 | 1 | 1 |
| 2 | 4729 | 9 | 10 |
| 3 | 472 | 2 | 12 |
| 4 | 47 | 7 | 19 |
| 5 | 4 | 4 | 23 |
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
-
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 -
Se citește un număr natural n. Determinați suma numerelor pare de la 1 la n.
Exemplu: Input: 6 → Output: 12 -
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 -
Se citește un număr natural n. Determinați suma cifrelor pare ale lui n.
Exemplu: Input: 4826 → Output: 20 -
Se citește un număr natural n. Determinați câte cifre impare are n.
Exemplu: Input: 5741 → Output: 3 -
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 -
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 -
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 -
Se citește un număr natural n. Verificați dacă n este palindrom.
Exemplu: Input: 12321 → Output: Da; Input: 12345 → Output: Nu -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Se citește un număr natural n. Înlocuiți toate cifrele impare cu 0.
Exemplu: Input: 573849 → Output: 000840 -
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 -
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 -
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 -
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. -
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 -
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 -
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 -
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 -
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 -
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) -
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 -
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
-
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Se citește un număr natural n. Să se determine câte grupuri de cifre egale consecutive există.
Exemplu: Input: 122333221 → Output: 4 -
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 -
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):
- i = 1 → pătrat = 1 * 1 = 1 → afișăm 1
- i = 2 → pătrat = 2 * 2 = 4 → afișăm 4
- i = 3 → pătrat = 3 * 3 = 9 → afișăm 9
- i = 4 → pătrat = 4 * 4 = 16 → afișăm 16
- i = 5 → pătrat = 5 * 5 = 25 → afișăm 25
Tabel de variație:
| Iterația | i | Pătrat |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 4 |
| 3 | 3 | 9 |
| 4 | 4 | 16 |
| 5 | 5 | 25 |
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):
- i = 1 → impar → nu adunăm → suma = 0
- i = 2 → par → suma = 0 + 2 = 2
- i = 3 → impar → suma rămâne 2
- i = 4 → par → suma = 2 + 4 = 6
- i = 5 → impar → suma rămâne 6
- i = 6 → par → suma = 6 + 6 = 12
Tabel de variație:
| Iterația | i | suma |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 2 | 2 |
| 3 | 3 | 2 |
| 4 | 4 | 6 |
| 5 | 5 | 6 |
| 6 | 6 | 12 |
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):
- Se citește x = 3 → max = 3
- Se citește x = 7 → 7 > 3 → max = 7
- Se citește x = 2 → 2 < 7 → max rămâne 7
- Se citește x = 0 → se oprește bucla
Tabel de variație:
| Iterația | x | max |
|---|---|---|
| 1 | 3 | 3 |
| 2 | 7 | 7 |
| 3 | 2 | 7 |
| 4 | 0 | 7 |
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):
- n = 4826 → cifra = 6 → pară → suma = 6 → n devine 482
- n = 482 → cifra = 2 → pară → suma = 8 → n devine 48
- n = 48 → cifra = 8 → pară → suma = 16 → n devine 4
- n = 4 → cifra = 4 → pară → suma = 20 → n devine 0 (se oprește)
Tabel de variație:
| Iterația | n | cifra | suma |
|---|---|---|---|
| 1 | 4826 | 6 | 6 |
| 2 | 482 | 2 | 8 |
| 3 | 48 | 8 | 16 |
| 4 | 4 | 4 | 20 |
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):
- n = 5741 → cifra = 1 → impară → cnt = 1 → n devine 574
- n = 574 → cifra = 4 → pară → cnt = 1 → n devine 57
- n = 57 → cifra = 7 → impară → cnt = 2 → n devine 5
- n = 5 → cifra = 5 → impară → cnt = 3 → n devine 0 (se oprește)
Tabel de variație:
| Iterația | n | cifra | cnt |
|---|---|---|---|
| 1 | 5741 | 1 | 1 |
| 2 | 574 | 4 | 1 |
| 3 | 57 | 7 | 2 |
| 4 | 5 | 5 | 3 |
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):
- x=4 → pozitiv → suma=4, cnt=1
- x=-2 → negativ → ignorăm → suma=4, cnt=1
- x=6 → pozitiv → suma=10, cnt=2
- x=0 → oprire buclă → media = 10 / 2 = 5
Tabel de variație:
| Iterația | x | suma | cnt |
|---|---|---|---|
| 1 | 4 | 4 | 1 |
| 2 | -2 | 4 | 1 |
| 3 | 6 | 10 | 2 |
| 4 | 0 | 10 | 2 |
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):
- i=1 → 12 % 1 = 0 → afișăm 1 → i devine 2
- i=2 → 12 % 2 = 0 → afișăm 2 → i devine 3
- i=3 → 12 % 3 = 0 → afișăm 3 → i devine 4
- i=4 → 12 % 4 = 0 → afișăm 4 → i devine 5
- i=5 → 12 % 5 ≠ 0 → nu afișăm → i devine 6
- i=6 → 12 % 6 = 0 → afișăm 6 → i devine 7
- i=7 → 12 % 7 ≠ 0 → nu afișăm → i devine 8 ... până la i=12 → afișăm 12
Tabel de variație (primele 6 iterații):
| Iterația | i | n % i | Divizor afișat |
|---|---|---|---|
| 1 | 1 | 0 | 1 |
| 2 | 2 | 0 | 2 |
| 3 | 3 | 0 | 3 |
| 4 | 4 | 0 | 4 |
| 5 | 5 | 2 | - |
| 6 | 6 | 0 | 6 |
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):
- i=1 → x=-3 → negativ → suma_neg = -3, suma_pos = 0
- i=2 → x=5 → pozitiv → suma_pos = 0+5=5, suma_neg = -3
- i=3 → x=-2 → negativ → suma_neg = -3+(-2)=-5, suma_pos = 5
- i=4 → x=4 → pozitiv → suma_pos = 5+4=9, suma_neg = -5
- i=5 → x=0 → zero → considerăm ca nici pozitiv, nici negativ → suma_pos=9, suma_neg=-5
Tabel de variație:
| Iterația | x | Suma pozitivă | Suma negativă |
|---|---|---|---|
| 1 | -3 | 0 | -3 |
| 2 | 5 | 5 | -3 |
| 3 | -2 | 5 | -5 |
| 4 | 4 | 9 | -5 |
| 5 | 0 | 9 | -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):
- n=12321, invers=0 → cifra=1 → invers=0*10+1=1 → n devine 1232
- n=1232, invers=1 → cifra=2 → invers=1*10+2=12 → n devine 123
- n=123, invers=12 → cifra=3 → invers=12*10+3=123 → n devine 12
- n=12, invers=123 → cifra=2 → invers=123*10+2=1232 → n devine 1
- n=1, invers=1232 → cifra=1 → invers=1232*10+1=12321 → n devine 0
Comparăm invers=12321 cu numărul original=12321 → sunt egale → output: Da
Tabel de variație:
| Iterația | n | cifra | invers |
|---|---|---|---|
| 1 | 12321 | 1 | 1 |
| 2 | 1232 | 2 | 12 |
| 3 | 123 | 3 | 123 |
| 4 | 12 | 2 | 1232 |
| 5 | 1 | 1 | 12321 |
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):
- x=2 → par → cnt_par=1, cnt_impar=0
- x=3 → impar → cnt_par=1, cnt_impar=1
- x=4 → par → cnt_par=2, cnt_impar=1
- x=5 → impar → cnt_par=2, cnt_impar=2
- x=0 → oprire buclă → output: Numere pare=2, Numere impare=2
Tabel de variație:
| Iterația | x | cnt_par | cnt_impar |
|---|---|---|---|
| 1 | 2 | 1 | 0 |
| 2 | 3 | 1 | 1 |
| 3 | 4 | 2 | 1 |
| 4 | 5 | 2 | 2 |
| 5 | 0 | 2 | 2 |
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:
- Identificăm ultima cifră a numărului folosind n % 10.
- Eliminăm ultima cifră pentru a obține restul numărului: rest <- [n/10].
- Pentru a afla prima cifră, împărțim repetat restul la 10 până când rămâne o singură cifră (prim <- rest, buclă cat timp).
- Păstrăm toate cifrele dintre prima și ultima pentru a le reintroduce în numărul final: rest_cifre <- rest % [putere/10].
- Calculăm numărul de cifre al lui n printr-o buclă „cat timp” folosind cn și incrementând numar_cifre.
- Calculăm 10^(numar_cifre-1) fără operator ^ prin înmulțiri repetate într-o buclă „cat timp”.
- Construim numărul final: nou = ultima_cifra * putere + rest_cifre * 10 + prim.
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ă | Valoare | Explicație |
|---|---|---|
| n | 4723 | Numărul inițial |
| ult | 3 | Ultima cifră |
| rest | 472 | Numă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:
| Pas | prim | Explicație |
|---|---|---|
| 1 | 472 | Valoare inițială |
| 2 | 47 | Eliminăm ultima cifră |
| 3 | 4 | Prima 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:
| Pas | cn | numar_cifre |
|---|---|---|
| 1 | 4723 | 0 |
| 2 | 472 | 1 |
| 3 | 47 | 2 |
| 4 | 4 | 3 |
| 5 | 0 | 4 |
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:
| Pas | i | putere |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 10 |
| 3 | 3 | 100 |
| 4 | 4 | 1000 |
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 |
|---|---|
| rest | 472 |
| putere | 1000 |
| rest_cifre | 72 |
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 |
|---|---|
| ult | 3 |
| prim | 4 |
| rest_cifre | 72 |
| putere | 1000 |
| nou | 3724 |
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:
- Începem prin a determina câte cifre are numărul n. Este important pentru a ști dacă putem extrage primele k și ultimele z cifre fără să depășim numărul de cifre disponibile. Pentru aceasta, folosim o buclă „cat timp” care împarte repetat n la 10 și crește un contor.
- Verificăm condiția numar_cifre ≥ k+z. Dacă numărul de cifre este mai mic decât suma celor două segmente, afișăm IMPOSIBIL, pentru că nu putem extrage primele k și ultimele z cifre. Această verificare previne erorile de calcul și ne asigură că programul va funcționa corect doar când există suficiente cifre.
- Extragem primele k cifre din număr. Pentru aceasta, eliminăm ultimele cifre ale lui n prin împărțire repetată la 10 până când rămân exact k cifre. Folosim o variabilă prim și o buclă „cat timp” care decrementează treptat numărul de cifre eliminate.
- Calculăm valorile corespunzătoare pentru ultimele z cifre și pentru cifrele din mijloc folosind multiplicări repetate. De exemplu, pentru ultimele z cifre construim putere_z prin multiplicări repetate cu 10 (echivalentul lui 10^z), iar pentru cifrele din mijloc construim putere_mijloc prin aceeași metodă. Astfel evităm operatorul ^.
- Extragem ultimele z cifre cu ultimele <- n % putere_z și cifrele din mijloc cu mijloc <- (n % putere_mijloc) / putere_z. Această separare ne permite să lucrăm independent cu segmentele numărului: primele k cifre, cifrele din mijloc și ultimele z cifre.
- Oglindim primele k cifre și ultimele z cifre. Pentru fiecare segment, folosim o buclă „cat timp” care ia ultima cifră a segmentului (mod 10), o adaugă la un număr nou înmulțit cu 10 și elimină cifra respectivă prin împărțire întreagă. Astfel construim primele_oglindite și ultimele_oglindite.
- Reconstruim numărul final prin înmulțiri și adunări: nou = primele_oglindite * putere_mijloc + mijloc * putere_z + ultimele_oglindite. Aceasta asigură că primele cifre oglindite sunt la început, cifrele din mijloc rămân la mijloc, iar ultimele cifre oglindite ajung la final.
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:
| Pas | cn | numar_cifre |
|---|---|---|
| 1 | 12345678 | 0 |
| 2 | 1234567 | 1 |
| 3 | 123456 | 2 |
| 4 | 12345 | 3 |
| 5 | 1234 | 4 |
| 6 | 123 | 5 |
| 7 | 12 | 6 |
| 8 | 1 | 7 |
| 9 | 0 | 8 |
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_cifre | k+z | Rezultat |
|---|---|---|
| 8 | 5 | Continuă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:
| Pas | prim | x |
|---|---|---|
| 1 | 12345678 | 5 |
| 2 | 1234567 | 4 |
| 3 | 123456 | 3 |
| 4 | 12345 | 2 |
| 5 | 1234 | 1 |
| 6 | 123 | 0 |
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:
| i | putere_z |
|---|---|
| 1 | 10 |
| 2 | 100 |
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:
| prim | cifra | primele_oglindite |
|---|---|---|
| 123 | 3 | 3 |
| 12 | 2 | 32 |
| 1 | 1 | 321 |
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:
| cn | cifra | ultimele_oglindite |
|---|---|---|
| 78 | 8 | 8 |
| 7 | 7 | 87 |
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:
- primele k cifre oglindite sunt mutate pe poziția inițială, deci se înmulțesc cu 10numărul de cifre din mijloc + z
- segmentul din mijloc rămâne pe poziția sa și se înmulțește cu 10z
- ultimele z cifre oglindite se adaugă la final
Pentru n = 12345678, k = 3, z = 2:
- primele 3 cifre sunt 123 → oglindite devin 321
- ultimele 2 cifre sunt 78 → oglindite devin 87
- cifrele din mijloc sunt 456
- 321 se înmulțește cu 105 (3 cifre mijloc + 2 cifre finale) → 32100000
- 456 se înmulțește cu 102 → 45600
- 87 se adaugă la 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:
- Determinăm mai întâi câte cifre are numărul n, deoarece poziția cifrei mediane depinde de acest lucru.
- Calculăm suma tuturor cifrelor pentru a putea determina media cifrelor.
- Stabilim poziția cifrei mediane:
- dacă numărul de cifre este impar, poziția este (numar_cifre div 2) + 1
- dacă numărul de cifre este par, poziția este numar_cifre / 2 (prima cifră din stânga)
- Extragem cifra mediană prin eliminarea cifrelor din dreapta până ajungem la poziția dorită.
- Calculăm media cifrelor ca suma / numar_cifre.
- Comparăm cifra mediană cu media cifrelor și afișăm Da sau Nu.
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):
| Pas | cn | numar_cifre |
|---|---|---|
| 1 | 4826 | 0 |
| 2 | 482 | 1 |
| 3 | 48 | 2 |
| 4 | 4 | 3 |
| 5 | 0 | 4 |
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:
| cn | cifra | suma |
|---|---|---|
| 4826 | 6 | 6 |
| 482 | 2 | 8 |
| 48 | 8 | 16 |
| 4 | 4 | 20 |
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:
-
Dacă numărul are un număr impar de cifre, atunci există o singură cifră exact la mijloc.
Poziția ei se calculează cu formula:
poz = numar_cifre / 2 + 1 -
Dacă numărul are un număr par de cifre, atunci există două cifre la mijloc.
Conform enunțului, se alege prima cifră din stânga dintre cele două, adică poziția:
poz = numar_cifre / 2
Î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_cifre | poz |
|---|---|
| 4 | 2 |
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:
- n = 4826
- numar_cifre = 4
- poz = 2
- eliminăm 4 − 2 = 2 cifre din dreapta
Eliminarea efectivă a cifrelor:
- 4826 → 482 (se elimină cifra 6)
- 482 → 48 (se elimină cifra 2)
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:
| cn | x |
|---|---|
| 4826 | 2 |
| 482 | 1 |
| 48 | 0 |
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:
- Determinăm numărul de cifre pentru a ști de câte ori trebuie să extragem cifrele.
- Calculăm puterea de 10 corespunzătoare primei cifre pentru a extrage cifrele de la stânga la dreapta.
- Comparăm fiecare cifră cu cea precedentă pentru a determina dacă formați o pereche crescătoare.
- Afișăm perechile imediat, în ordinea apariției.
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
| Pas | cn | numar_cifre |
|---|---|---|
| 1 | 13452 | 0 |
| 2 | 1345 | 1 |
| 3 | 134 | 2 |
| 4 | 13 | 3 |
| 5 | 1 | 4 |
| 6 | 0 | 5 |
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:
| Pas | cifra_anteriora | cifra_curenta | Pereche afișată |
|---|---|---|---|
| 1 | 1 | 3 | (1,3) |
| 2 | 3 | 4 | (3,4) |
| 3 | 4 | 5 | (4,5) |
| 4 | 5 | 2 | - |
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:
- Determinăm numărul de cifre pentru a putea parcurge numărul de la stânga la dreapta.
- Calculăm puterea corespunzătoare primei cifre.
- Parcurgem cifrele, iar pentru fiecare, verificăm poziția (1,2,3...) și adunăm la suma corespunzătoare (par sau impar).
- Afișăm rezultatul final după ce am parcurs toate cifrele.
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:
| Poz | Cifra | Suma impar | Suma par |
|---|---|---|---|
| 1 | 4 | 4 | 0 |
| 2 | 8 | 4 | 8 |
| 3 | 2 | 6 | 8 |
| 4 | 6 | 6 | 14 |
| 5 | 1 | 7 | 14 |
| 6 | 7 | 7 | 21 |
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 //.