Doseg
Županijsko natjecanje iz informatike 2017. / Srednja škola / Druga podskupina (3. i 4. razred) - 3. zadatak
Razmatramo pravila deklaracije i dosega varijabli u jednostavnom programskom jeziku sintaksom sličnom Pascal-u.
Program u ovom jeziku se sastoji od linija, gdje svaka linija sadrži jednu od sljedećih naredbi:
Blok naredbi započinje naredbom “begin”, sadrži nula, jednu ili više linija te uvijek završava naredbom “end”.
Blokovi također mogu sadržavati druge blokove, koji opet mogu sadržavati druge blokove itd.
Tijelo bloka A je skup svih naredbi koje se nalaze direktno unutar tog bloka (dakle nisu uključene naredbe koje se nalaze unutar nekog bloka B unutar A).
Neka je D deklaracija “var c = k” u tijelu bloka A. Doseg deklaracije D je skup svih naredbi koje se nalaze (direktno ili indirektno) unutar bloka A, a u programu dolaze nakon D.
U našem primjeru, doseg deklaracije “var b = 4” iz linije 3 programa je skup svih naredbi između linija 4 i 19, dok je doseg deklaracije “var b = 6” iz linije 8 samo naredba u liniji 9.
Neka je C naredba “write c”. Varijabla c u ovoj naredbi je deklrarirana naredbom D ako se C nalazi u dosegu od D (te naravno D deklarira upravo varijablu c).
Ukoliko postoji više takvih deklaracija D, onda prioritet ima ona koja se pojavljuje najkasnije u programu.
Tako je, na primjer, varijabla “b” u liniji 9 deklarirana u liniji 8, dok je ista varijabla u liniji 11 deklarirana u liniji 3.
Naredba “write c” ispisuje vrijednost koja je pridružena varijabli c u njenoj deklaraciji.
Program je jedan blok naredbi.
Za zadani program odredite izlaz svake od njegovih “write” naredbi.
Možete pretpostaviti da je program ispravan te da je svaka varijabla deklarirana u trenutku korištenja.
Primijetite da je dopušteno deklarirati istu varijablu više puta unutar tijela jednog bloka.
Ulazni podaci
U prvom redu nalazi se prirodni broj n (n ≤ 1 000) — broj linija u programu. U j-tom od sljedećih n redova nalazi se j-ta linija programa.
Svaka linija sadrži jednu od četiri naredbe iz teksta zadataka.
Oznaka varijable c u naredbama je uvijek malo slovo engleske abecede, dok je k prirodni broj manji od 1 000. Prije oznake varijable c, broja k te znaka “=” dolazi točno jedan razmak.
Možete pretpostaviti da je program ispravan prema pravilima iz teksta zadatka.
Izlazni podaci
Ispišite m redova gdje je m ukupan broj “write” naredbi u programu.
U j-ti red ispišite prirodni broj koji je bi ispisala j-ta po redu “write” naredba u programu.
Primjeri test podataka
Ulaz
10
begin
var a = 4
var x = 6
var z = 1
write a
write z
write x
var a = 5
write a
end
Izlaz
4
1
6
5
Ulaz
20
begin
var a = 3
var b = 4
begin
write a
var a = 5
write a
var b = 6
write b
end
write b
begin
write b
begin
var a = 10
write a
end
write a
end
end
Izlaz
3
5
6
4
4
10
3
Ulaz
21
begin
begin
var t = 5
write t
var a = 1
end
begin
var t = 4
write t
begin
var t = 3
end
write t
end
begin
begin
end
begin
end
end
end
Izlaz
5
4
4
Comments