== include(page="template/taskheader" task_id="gcl") ==
Gigel a inventat un nou limbaj de programare pe care l-a numit *GCL* (*G*igel *C*ampion *L*anguage). În *GCL* pot fi utilizate maxim 26 variabile notate cu litere mici ale alfabetului englez. Valoarea inițială fiecărei variabile (la începutul execuției programului) este 0 . Un program în limbajul *GCL* este format dintr-o succesiune de comenzi, câte o comandă pe o linie.
Gigel a inventat un nou limbaj de programare pe care l-a numit *GCL* ([*G*]igel [*C*]ampion [*L*]anguage). În *GCL* pot fi utilizate maxim 26 variabile notate cu litere mici ale alfabetului englez. Valoarea inițială fiecărei variabile (la începutul execuției programului) este 0 . Un program în limbajul *GCL* este format dintr-o succesiune de comenzi, câte o comandă pe o linie.
|_. Comanda |_. Semnificație |
| *INCEPE* | Marchează începutul programului (apare o singură dată la început). |
| *var=expresie* | Variabilei var din partea stângă a semnului = i se atribuie valoarea expresiei din partea
dreaptă. O expresie este formată din unul sau mai mulți termeni între care poate exista
operatorul + sau operatorul – (semnificând adunare, respectiv scădere). Un termen poate fi o
constantă, o variabilă sau o variabilă precedată de o constantă (ceea ce semnifică faptul că
variabila este înmulțită cu constanta). De exemplu, a = 2b + 4 – c |
| *var=expresie* | Variabilei var din partea stângă a semnului = i se atribuie valoarea expresiei din partea dreaptă. O expresie este formată din unul sau mai mulți termeni între care poate exista operatorul + sau operatorul – (semnificând adunare, respectiv scădere). Un termen poate fi o constantă, o variabilă sau o variabilă precedată de o constantă (ceea ce semnifică faptul că variabila este înmulțită cu constanta). De exemplu, a = 2b + 4 – c |
| *REPETA n* | Indică începutul unui bloc de instrucțiuni care se va repeta de n ori. |
| *STOP* | Indică sfârșitul unui bloc REPETA sau sfârșitul programului |
| *SCRIE var* | Afișează o linie de forma următoare:
*var* = valoare
unde var reprezintă numele variabilei care se scrie, iar valoare reprezintă valoarea
variabilei. Semnul = trebuie să fie precedat și urmat de câte un singur spațiu. |
h2. Cerință
Scrieți un program care citește un program scris limbajul GCL și rezolvă următoarele două cerințe:
# determină numărul de comenzi *SCRIE* care se execută;
# determină rezultatele afișate de comenzile *SCRIE* din programul scris în limbajul GCL.
h2. Date de intrare
Fișierul de intrare $gcl.in$ ...
Fișierul de intrare $gcl.in$ conține pe prima linie cerința (1 sau 2) apoi, pe liniile următoare un program corect scris în limbajul *GCL*.
h2. Date de ieșire
În fișierul de ieșire $gcl.out$ ...
Dacă cerința este 1, fișierul de ieșire $gcl.out$ va conține pe prima linie numărul de comenzi *SCRIE* executate.
Dacă cerința este 2, fișierul de ieșire $gcl.out$ va conține rezultatele afișate de comenzile *SCRIE* din programul scris în limbajul *GCL*, în ordinea executării acestor comenzi.
h2. Restricții
* $... ≤ ... ≤ ...$
* Programul în limbajul *GCL* va avea maxim 50 de linii de cel mult 100 de caractere.
* Comenzile dintr-un program *GCL* pot conține oricâte spații, plasate oriunde, dar nu în interiorul cuvintelor cheie ([*REPETA*], *INCEPE*, *STOP*, *SCRIE*) și al constantelor.
* Constantele care intervin în expresii sunt numere naturale, 0 ≤ *constantă* ≤ 2 000 000 000.
* Numărul *n* care apare în comenzile *REPETA* este un număr natural, 0 ≤ *n* ≤ 10.
* Nu pot exista comenzi *REPETA* imbricate. Mai exact, după comanda *REPETA* și până la comanda *STOP* care marchează sfârșitul comenzii *REPETA* nu poate apărea o altă comandă *REPETA*.
* Valorile calculate în expresii sunt, la orice moment, numere întregi din intervalul [-2[^31^], 2[^31^]-1].
* Toate cuvintele cheie din comenzile *GCL* sunt scrise cu litere mari.
* Pentru cerința 1 se acordă 40% din punctaj, iar pentru cerința 2 se acordă 60% din punctaj.
h2. Exemplu
h2. Exemple
table(example).
|_. gcl.in |_. gcl.out |
| This is some
text written on
multiple lines.
| This is another
text written on
multiple lines.
| 1
INCEPE
a = 1
b = a
SCRIE a
SCRIE b
REPETA 10
c = a + b
a = b
b = c
SCRIE c
STOP
STOP
| 12
|
| 2
INCEPE
n = 10
k = 1
REPETA 9
n = n + k
SCRIE n
k = 3 - k
STOP
STOP
| n = 11
n = 13
n = 14
n = 16
n = 17
n = 19
n = 20
n = 22
n = 23
|
| 2
INCEPE
x = 1
REPETA 10
x = 2x
STOP
SCRIE x
STOP
| x = 1024
|
h3. Explicație
...
== include(page="template/taskfooter" task_id="gcl") ==