Simulare Bacalaureat Informatica 2025 Subiectul al II-lea problema 1

  1. Algoritmul alăturat este reprezentat în pseudocod.
    S-a notat cu a%b restul împărțirii numărului natural a la numărul
    natural nenul b.
    a. Scrieți ce se afișează în urma executării algoritmului dacă se citesc, în
    această ordine, numerele 20 și 25. (6p.)
    b. Dacă pentru m se citește numărul 5, scrieți două numere din
    intervalul [1,50] care pot fi citite pentru n astfel încât, în urma
    executării algoritmului, pentru fiecare dintre acestea, ultima valoare
    numerică afișată să fie 2. (6p.)
    c. Scrieți programul C/C++ corespunzător algoritmului dat. (10p.)
    d. Scrieți în pseudocod un algoritm echivalent cu cel dat, înlocuind
    structura pentru…execută cu o structură repetitivă de tip
    cât timp…execută.

citește m,n
(numere naturale)
┌dacă m<n atunci
│ nn+m
│ mn-m
│ nn-m
└■
km
┌pentru im,n,-1 execută
│ scrie k, ‘ ‘
│┌dacă i%2=0 atunci
││ kk-1
││ scrie ‘*’
│└■
│ kk-1
└■

1. Analiza algoritmului în pseudocod

Pasul 1: Citirea valorilor

Se citesc m = 20 și n = 25.


Pasul 2: Inter-schimbarea valorilor lui m și n dacă m < n

Algoritmul verifică dacă m < n (adică 20 < 25), ceea ce este adevărat. Se execută următoarele operații:

  1. n = n + mn = 25 + 20 = 45
  2. m = n - mm = 45 - 20 = 25
  3. n = n - mn = 45 - 25 = 20

Acum, valorile sunt:

  • m = 25
  • n = 20

Pasul 3: Inițializarea lui k

Se atribuie k = m = 25.


Pasul 4: Execuția buclei pentru i = 25 până la 20 (descrescător)

Se parcurge i descrescător de la 25 la 20.

Iterații ale buclei:

  • i = 25:
    • Se afișează k = 2525
    • k = k - 1k = 24
  • i = 24 (par):
    • Se afișează k = 2424
    • Deoarece 24 este par, se scade încă 1 din k: k = k - 1k = 23
    • Se afișează *
    • k = k - 1k = 22
  • i = 23:
    • Se afișează k = 2222
    • k = k - 1k = 21
  • i = 22 (par):
    • Se afișează k = 2121
    • Deoarece 22 este par, se scade încă 1 din k: k = k - 1k = 20
    • Se afișează *
    • k = k - 1k = 19
  • i = 21:
    • Se afișează k = 1919
    • k = k - 1k = 18
  • i = 20 (par):
    • Se afișează k = 1818
    • Deoarece 20 este par, se scade încă 1 din k: k = k - 1k = 17
    • Se afișează *
    • k = k - 1k = 16

Rezultatul final afișat:

25 24 * 22 21 * 19 18 *

(b) Două valori ale lui nnn pentru care ultima valoare afișată este 2

🔹 Se obține k=2k = 2k=2 pentru n=6n = 6n=6 și n=5n = 5n=5.

(c) Program C++ corespunzător algoritmului

#include <iostream>
using namespace std;

int main() {
    int m, n, k;
    cin >> m >> n;
    
    if (m < n) {
        n = n + m;
        m = n - m;
        n = n - m;
    }

    k = m;
    
    for (int i = m; i >= n; i--) {
        cout << k << " ";
        if (i % 2 == 0) {
            k--;
            cout << "* ";
        }
        k--;
    }
    
    return 0;
}

(d) Algoritm echivalent cu „cât timp…execută”

citește m, n
dacă m < n atunci
    n = n + m
    m = n - m
    n = n - m
k = m
i = m
cât timp i ≥ n execută
    scrie k, ' '
    dacă i % 2 = 0 atunci
        k = k - 1
        scrie '*'
    k = k - 1
    i = i - 1