- 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
│ nn+m
│ mn-m
│ nn-m
└■
km
┌pentru im,n,-1 execută
│ scrie k, ‘ ‘
│┌dacă i%2=0 atunci
││ kk-1
││ scrie ‘*’
│└■
│ kk-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:
n = n + m
→n = 25 + 20 = 45
m = n - m
→m = 45 - 20 = 25
n = n - m
→n = 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 = 25 →
25
k = k - 1
→k = 24
- Se afișează k = 25 →
- i = 24 (par):
- Se afișează k = 24 →
24
- Deoarece 24 este par, se scade încă 1 din
k
:k = k - 1
→k = 23
- Se afișează
*
k = k - 1
→k = 22
- Se afișează k = 24 →
- i = 23:
- Se afișează k = 22 →
22
k = k - 1
→k = 21
- Se afișează k = 22 →
- i = 22 (par):
- Se afișează k = 21 →
21
- Deoarece 22 este par, se scade încă 1 din
k
:k = k - 1
→k = 20
- Se afișează
*
k = k - 1
→k = 19
- Se afișează k = 21 →
- i = 21:
- Se afișează k = 19 →
19
k = k - 1
→k = 18
- Se afișează k = 19 →
- i = 20 (par):
- Se afișează k = 18 →
18
- Deoarece 20 este par, se scade încă 1 din
k
:k = k - 1
→k = 17
- Se afișează
*
k = k - 1
→k = 16
- Se afișează k = 18 →
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