pcod
Ionel si-a definit, intr-un
moment de plictiseala, urmatorul limbaj pseudocod simplificat. Cerinta
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.
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. Restrictii
Exemplu
pcod.in
pcod.out
Explicatii
let s = 0 undefined symbol
se detecteaza o variabila
(w) nedeclarata
let p=1 6
let p=1 runtime error
Algoritmul cicleaza
la infinit deoarece valoarea variabilei t
nu se modifica in timpul executiei
let x=2 nesting error
Primul ciclu while
nu are un corespondent endwhile
Timp maxim de executie/test:
0.3 secunde prof. Alin
Burta
Mesajele de eroare pot fi:
(cu semnificatia: s-a utilizat o variabila nedefinita)
(cu
semnificatia:
eroare la imbricarea instructiunilor while)
(cu semnificatia:
algoritmul cicleaza infinit)
let p= 1
let t=1
inc t,p
inc s,t
write s
write w
let s=0
let n=4
let t=1
while t<n
inc s,t
inc t,p
endwhile
write s
write n
4
let s=0
let n=4
let t=1
while t<n
inc s,t
endwhile
write s
let y=0
let z=0
while y<x
inc y,x
let z=0
while z<x
inc z,x
endwhile
write y
Colegiul National
"B.P. Hasdeu" Buzau
Contact:
allbu2003@yahoo.com