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

nixx%10>[x/10]%10mAfişaj
5   0 
 11277>2 da  
  [127/10]=122>1 da  
  [12/10]=11>0 da  
  [1/10]=00>0 nu0+0=0 
 220199>1 da  
  [2019/10]=2011>0 da  
  [201/10]=200>2 nu0+20=20 
 310055>0 da  
  [1005/10]=1000>0 nu20+100=120 
 477>0 da  
  [7/10]=00>0 nu120+0=120 
 519000>0 nu120+1900=20202020

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 variabilelor1 punct
-citire a datelor1 punct
-afișare a datelor1 punct
-instrucțiune de decizie2 puncte
-instrucțiuni repetitive (Se acordă numai 2p. dacă doar una dintre instrucțiunile repetitive este conform cerinței)3 puncte
-atribuiri1 punct
-corectitudine globală a programului1 punct