gcl

Time limit: 0.1s Memory limit: 8MB Input: gcl.in Output: gcl.out

Gigel a inventat un nou limbaj de programare pe care l-a numit GCL (Gigel Campion Language). În GCL pot fi utilizate maxim 2626 variabile notate cu litere mici ale alfabetului englez. Valoarea iniţială fiecărei variabile (la începutul execuţiei programului) este 00. 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 varvar 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 nn Indică începutul unui bloc de instrucţiuni care se va repeta de nn 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 varvar reprezintă numele variabilei care se scrie, iar valoarevaloare reprezintă valoarea variabilei. Semnul = trebuie să fie precedat şi urmat de câte un singur spaţiu.

Cerinţă

Scrieţi un program care citeşte un program scris în limbajul GCL şi rezolvă următoarele două cerinţe:

  1. determină numărul de comenzi SCRIE care se execută;
  2. determină rezultatele afişate de comenzile SCRIE din programul scris în limbajul GCL.

Date de intrare

Fişierul de intrare gcl.in conţine pe prima linie cerința (11 sau 22) apoi, pe liniile următoare un program corect scris în limbajul GCL.

Date de ieşire

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.

Restricții și precizări

  • Programul în limbajul GCL va avea maxim 5050 de linii de cel mult 100100 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, cuprinse între 00 și 2 000 000 0002 \ 000 \ 000 \ 000.
  • Numărul nn care apare în comenzile REPETA este un număr natural, 0n100 \leq n \leq 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 [231[-2^{31}, 2311]2^{31}-1].
  • Toate cuvintele cheie din comenzile GCL sunt scrise cu litere mari.
  • Pentru cerința 1 se acordă 40%40\% din punctaj, iar pentru cerința 2 se acordă 60%60\% din punctaj.

Exemplul 1

gcl.in

1
INCEPE
   a = 1
   b = a
   SCRIE a
   SCRIE b
   REPETA 10
      c = a + b
      a = b
      b = c
      SCRIE c
   STOP
STOP

gcl.out

12

Exemplul 2

gcl.in

2
INCEPE
   n = 10
   k = 1
   REPETA 9
      n = n + k
      SCRIE n
      k = 3 – k
   STOP
STOP

gcl.out

n = 11
n = 13
n = 14
n = 16
n = 17
n = 19
n = 20
n = 22
n = 23

Exemplul 3

gcl.in

2
INCEPE
   x = 1
   REPETA 10
      x = 2x
   STOP
   SCRIE x
STOP

gcl.out

x = 1024

Log in or sign up to be able to send submissions!