II sesiune specială 2020 (M.I)
Subiectul al II-lea
| 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 și cu [c] partea întreagă a numărului real c. | |
| a) | Scrieți ce se afișează dacă se citesc, în această ordine, numerele 5, 127, 2019, 1005, 7, 1900. (6p.) | |
| b) | Dacă primul număr citit este 2, scrieți un set de numere distincte din intervalul [103,104) care pot fi citite în continuare astfel încât, în urma executării algoritmului, să se afișeze mesajul niciunul. (6p.) | |
| c) | Scrieți programul C/C++ corespunzător algoritmului dat. (10p.) | |
| d) | Scrieți în pseudocod un algoritm echivalent cu cel dat, înlocuind adecvat structura pentru…execută cu o structură repetitivă de alt tip. (6p.) | |

Algoritmul elimină de la coadă la cap câte o cifră dacă cea de rang superior este mai mică şi adună rezultatele.
127 -> 12-> 1 -> 0; 2019-> 201 -> 20; 1005 -> 100; 7 -> 0; 1900-> 1900.
Prin urmare se afişează suma: 0 + 20 + 100 + 0 + 1900 = 2020. Răspuns corect: 2020
Rezolvare pas cu pas
| n | i | x | x%10>[x/10]%10 | m | Afişaj |
| 5 | 0 | ||||
| 1 | 127 | 7>2 da | |||
| [127/10]=12 | 2>1 da | ||||
| [12/10]=1 | 1>0 da | ||||
| [1/10]=0 | 0>0 nu | 0+0=0 | |||
| 2 | 2019 | 9>1 da | |||
| [2019/10]=201 | 1>0 da | ||||
| [201/10]=20 | 0>2 nu | 0+20=20 | |||
| 3 | 1005 | 5>0 da | |||
| [1005/10]=100 | 0>0 nu | 20+100=120 | |||
| 4 | 7 | 7>0 da | |||
| [7/10]=0 | 0>0 nu | 120+0=120 | |||
| 5 | 1900 | 0>0 nu | 120+1900=2020 | 2020 |
Pentru răspuns corect se acordă câte 2p. pentru fiecare aspect specific (număr de valori scrise, prima valoare, a doua valoare) conform cerinței. Se punctează valori din intervalul indicat, cu cifrele în ordine strict crescătoare. Dintre cele 9000 de numere de 4 cifre, 4536 au cifrele distincte, iar dintre acestea 126 au cifrele în ordine strict crescătoare, prin urmare este corectă orice alegere de două numere distincte dintre: 1234, 1235, 1236, 1237, 1238, 1239, 1245, 1246, 1247, 1248, 1249, 1256, 1257, 1258, 1259, 1267, 1268, 1269, 1278, 1279, 1289, 1345, 1346, 1347, 1348, 1349, 1356, 1357, 1358, 1359, 1367, 1368, 1369, 1378, 1379, 1389, 1456, 1457, 1458, 1459, 1467, 1468, 1469, 1478, 1479, 1489, 1567, 1568, 1569, 1578, 1579, 1589, 1678, 1679, 1689, 1789, 2345, 2346, 2347, 2348, 2349, 2356, 2357, 2358, 2359, 2367, 2368, 2369, 2378, 2379, 2389, 2456, 2457, 2458, 2459, 2467, 2468, 2469, 2478, 2479, 2489, 2567, 2568, 2569, 2578, 2579, 2589, 2678, 2679, 2689, 2789, 3456, 3457, 3458, 3459, 3467, 3468, 3469, 3478, 3479, 3489, 3567, 3568, 3569, 3578, 3579, 3589, 3678, 3679, 3689, 3789, 4567, 4568, 4569, 4578, 4579, 4589, 4678, 4679, 4689, 4789, 5678, 5679, 5689, 5789, 6789.
| Pentru program corect se acordă 10 puncte astfel: | ||
| -declarare a variabilelor | 1 punct | |
| -citire a datelor | 1 punct | |
| -afișare a datelor | 1 punct | |
| -instrucțiune de decizie | 2 puncte | |
| -instrucțiuni repetitive (Se acordă numai 2p. dacă doar una dintre instrucțiunile repetitive este conform cerinței) | 3 puncte | |
| -atribuiri | 1 punct | |
| -corectitudine globală a programului | 1 punct | |

