II.1 Simulare 2019 (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 valoarea afişată dacă se citesc, în această ordine, numerele 5, 19 și 4. (6p.) | |
| b) | Dacă pentru variabila b se citeste numărul 2019, iar pentru variabila k se citeste numărul 5, scrieţi cea mai mică şi cea mai mare valoare care pot fi citite pentru variabila a astfel încât, în urma executării algoritmului, pentru fiecare dintre acestea, valoarea afisată să fie 0. (6p.) | |
| c) | Scrieți programul C/C++ corespunzător algoritmului dat. (10p.) | |
| d) | Scrieţi în pseudocod un algoritm echivalent cu cel dat, înlocuind prima structură cât timp…execută cu o structură de tip pentru…execută. (6p.) | |

Algoritmul determină cea mai mare valoare naturală din intervalul [a, b] care admite ca divizor cea mai mică putere nenulă a lui k. Dacă nu există un asemenea număr, se va afișa valoarea de start a variabilei y, respectiv valoarea 0. Pentru precizarea valorii 12 se acordă 6 puncte.
Rezolvare pas cu pas
| a | b | k | pm | y | i | i≥a | x | p | x%k=0 | p≠0 și (p<pm sau pm=0) |
| 5 | 19 | 4 | 0 | 0 | 19 | |||||
| 19->18 | da | 19 | 0 | nu | nu | |||||
| 18->17 | da | 18 | 0 | nu | nu | |||||
| 17->16 | da | 17 | 0 | nu | nu | |||||
| da | 16 | 0 | da | |||||||
| 4 | 1 | da | ||||||||
| 2 | 16 | 16->15 | 1 | 2 | nu | da | ||||
| 15->14 | da | 15 | 0 | nu | nu | |||||
| 14->13 | da | 14 | 0 | nu | nu | |||||
| 13->12 | da | 13 | 0 | nu | nu | |||||
| da | 12 | 0 | da | |||||||
| 1 | 12 | 12->11 | 3 | 1 | nu | da | ||||
| 11->10 | da | 11 | 0 | nu | nu | |||||
| 10->9 | da | 10 | 0 | nu | nu | |||||
| 9->8 | da | 9 | 0 | nu | nu | |||||
| da | 8 | 0 | da | |||||||
| 8->7 | 2 | 1 | nu | nu | ||||||
| 7->6 | da | 7 | 0 | nu | nu | |||||
| 6->5 | da | 6 | 0 | nu | nu | |||||
| 5->4 | da | 5 | 0 | nu | nu | |||||
| nu |
Valorile căutate nu trebuie să fie multiplu de k, iar cum a≤b, cea mai mare valoare pentru a este 2019, iar cea mai mică este 2016. Orice valoare mai mică decât 2016 determină trecerea prin cel puțin un multiplu de 5 și ar duce la modifcarea valorii de start a variabilei p. Se acordă câte 3 puncte pentru fiecare dintre cele două valori precizate mai sus: 2016, 2019; 2×3 puncte=6 puncte
| Pentru program corect se acordă 10 puncte astfel: | |
| – declarare variabile | 1 punct |
| – citire date | 1 punct |
| – afişare date | 1 punct |
| – instrucţiune de decizie (Se acordă numai 1p. dacă instrucțiunea de decizie este principial corectă, dar expresia evaluată nu este conform cerinței.) | 2 puncte |
| – instrucţiuni repetitive (Se acordă numai 2p. dacă numai una dintre instrucțiunile repetitive este conform cerinței.) | 3 puncte |
| – atribuiri | 1 punct |
| – corectitudine globală a programului | 1 punct |

