Ionel si-a definit, intr-un
moment de plictiseala, urmatorul limbaj pseudocod simplificat.
Identificatorul unei variabile este reprezentat de o litera mica a alfabetului
englez. Valorile unei variabile sunt numere intregi de maxim 9 cifre.
Variabilele trebuie definite inainte de utilizare printr-o operatie de atribuire.
Constantele sunt numere intregi de maxim 9 cifre.
Operatiile permise sunt : Atribuire :
let v = const
(variabila v ia valoarea constantei
const ) Afisare:
write v
(afiseaza valoarea variabilei v;
este echivalenta cu writeln(v)
sau cout<<v<<'\n';
sau printf("%ld\n",v);) Incrementare:
inc a, b
(valoarea variabilei a se mareste
cu valoarea variabilei b) Ciclu cu test initial:
while a < b
instructiune_1
instructiune_2
...
instructiune_n
endwhile
(cat timp expresia a<b
este adevarata se executa instructiunile instructiune_1,
. . . , instructiune_n )
unde:
a, b
- variabile
const - constanta
instructiune_1, instructiune_2,.
. ., instructiune_n - orice operatie
permisa (let, write,
inc sau while)
Din punct de vedere sintactic, Ionel scrie algoritmi corecti, doar cuvantul
cheie endwhile ii creeaza probleme
frecvente (il plaseaza gresit sau il foloseste de mai multe/putine ori decat
trebuie). De asemenea, Ionel uita sa defineasca toate variabilele pe care le
utilizeaza.
Cerinta
Scrieti un
program care sa interpreteze algoritmii scrisi in limbajul pseudocod simplificat,
determinind eventualele erori pe care le contin.
Date de intrare
Fisierul de intrare pcod.in
contine un algoritm scris in limbajul pseudocod simplificat.
Instructiunile sunt scrise doar cu litere mici si pot contine oricate spatii
separatoare.
Fiecare instructiune este scrisa pe o singura linie, cu exceptia instructiunii
while, care se scrie pe mai multe
linii.
Date de iesire
Fisierul de iesire pcod.out
va contine datele afisate de algoritm. Daca este detectata o eroare se va afisa
mesajul de eroare corespunzator, iar interpretarea algoritmului se incheie.
In acest caz, fisierul de iesire va contine doar mesajul de eroare.
Mesajele de eroare pot fi:
undefined
symbol
(cu semnificatia: s-a utilizat o variabila nedefinita)
nesting error
(cu
semnificatia:
eroare la imbricarea instructiunilor while)
runtime
error
(cu semnificatia:
algoritmul cicleaza infinit)
Restrictii
Numarul de linii dintr-un
algoritm este intre 1 si 100, inclusiv .
Se garanteaza ca o linie
a algoritmului nu depaseste 30 de caractere.
Valorile obtinute in urma efectuarii
operatiilor descrise in algoritm sunt numere intregi de maxim 9 cifre.
Fiecare linie scrisa
in fisierul de iesire se va termina cu marcajul de sfarsit de linie.
Intr-un algoritm nu pot aparea
alte erori decat cele specificate in enunt.
Exemple
pcod.in
pcod.out
Explicatii
let s = 0
let p= 1
let t=1
inc t,p
inc s,t
write s
write w
undefined symbol
se detecteaza o variabila
(w) nedeclarata
let p=1
let s=0
let n=4
let t=1
while t<n
inc s,t
inc t,p
endwhile
write s
write n
6
4
let p=1
let s=0
let n=4
let t=1
while t<n
inc s,t
endwhile
write s
runtime error
Algoritmul cicleaza
la infinit deoarece valoarea variabilei t
nu se modifica in timpul executiei
let x=2
let y=0
let z=0
while y<x
inc y,x
let z=0
while z<x
inc z,x
endwhile
write y
nesting error
Primul ciclu while
nu are un corespondent endwhile