II.1 Iulie 2020 (S.N.)

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 valorile afișate dacă se citește numărul 240107.                                                                                       (6p.)
b)Scrieți cel mai mic și cel mai mare număr din intervalul [105,106), cu cifre distincte, care pot fi citite, astfel încât pentru fiecare dintre acestea, în urma executării algoritmului, toate valorile afișate să fie nenule.        (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 a doua structură repetă…până cu o structură repetitivă de alt tip.                                 (6p.)

Variabila c trece în ordine crescătoare prin toate cifrele pare și va atribui variabilei x  valoarea 1 dacă cifra respectivă figurează în numărul b, respectiv 0 în caz contrar.                                                        

              c=0                      c=2                       c=4                       c=6                      c=8

          240107               240107                240107                240107                240107

              x=1                      x=1                      x=1                       x=0                      x=0    Pentru precizarea valorii 11100 se acordă 6p.

Rezolvare pas cu pas

acbxAfișare
24010702401070 
  240101 
  2401 1
 22401070 
  24010  
  2401  
  240  
  24  
  21 
  0 11
 42401070 
  24010  
  2401  
  240  
  241111
 62401070 
  24010  
  2401  
  240  
  24  
  2  
  0 1110
 82401070 
  24010  
  2401  
  240  
  24  
  2  
  0 11100

Algoritmul afișează câte o valoare nenulă pentru fiecare cifră pară existentă în a, prin urmare ultimele cinci cifre ale numărului trebuie să fie valori pare.

Pentru primul număr dintre cele două cerute, vom seta cifra de început la cea mai mică valoare posibilă (respectiv 1), iar pentru cel mai mare număr, la valoarea 9.

Celelalte 5 cifre din componența numărului vor reprezenta cifrele pare dispuse în ordine descrescătoare pentru prima valoare cerută, respectiv strict descrescătoare pentru cea de-a doua. Se acordă câte 3p. pentru fiecare valoare corectă dinre cele două, 102468, respectiv 986420.

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