[ONI][Clasa IX] Limbaj
0Definim un limbaj de programare, cu instructiuni de atribuire si de decizie. Sintaxa instructiunilor este:
Instructiunea de atribuire
variabila=variabila
Instructiunea de decizie
if
semn variabila variabila
{da
instructiuni}
{nu
instructiuni}
fi
Variabilele limbajului sunt identificate printr-un singur caracter, litera mica, din alfabetul englez. Valorile variabilelor sunt de tip intreg.
Semn este unul din caracterele ‘< ’ , ‘>’ sau ‘=’.
Liniile instructiunilor nu contin spatii.
Instructiunile din {} pot lipsi.
Cerinta
Daca se dau valorile initiale ale tuturor variabilelor (de la a la z), in ordine alfabetica incepand cu a. Se cer valorile tuturor variabilelor de la a la z, dupa executia secventei de program.
ONI 2006
Date de intrare
Fisier de intrare: limbaj.in
Linia 1: Va Vb ….Vz – Valorile initiale ale variabilelor, de la a la z, separate prin cate un spatiu.
Linia 2: linie de program – Urmatoarele linii, pana la sfarsitul fisierului contin linii de program,
Linia 3: linie de program cu instructiuni corecte din punct de vedere sintactic.
….
Date de iesire
Fisier de iesire: limbaj.out
Linia 1: Va Vb ….Vz – Åžirul valorilor variabilelor, de la a la z, in ordine alfabetica, pe un rand, separate prin cate un spatiu.
Restrictii
• -30000< a,b, ..,z < 30000
• Numarul liniilor de program este mai mic decat 10000
• Limbajul este case sensitive. (se folosesc doar litere mici de la a la z)
Exemplu
limbaj.in
1 3 5 7 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
if
=ab
nu
if
b=d
fi
f=d
fi
limbaj.out
1 7 5 7 4 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Timp maxim de executie: 0.5 secunde
Soluție oficiala:
Timp execuție : O(n)
Memorie folosita : O(1)
Soluție :
Aceasta problema mi s-a parut interesanta datorita faptului ca este o problema cu aplicabilitate in realitate.Practic consta intr-un limbaj basic de programare cu cateva instrucțiuni.
Soluția mea se bazeaza pe citirea valorilor variabilelor si setarea fiecareia in parte cu valoarea inițiala citita din fisierul de intrare, dupa care are loc evaluarea intregului algoritm prin funcția eval().
FuncÈ›ia eval() lucreaza astfel : Algoritmul in sine este considerat „acÈ›iunile ce au loc intr-o condiÈ›ie(daca aceasta este adevarata)”, astfel el considera algoritmul intreg acÈ›iunea ce trebuie sa o faca.Daca gaseste pe una din linii pe primele doua poziÈ›ii ale sirului de caractere „if” atunci testeaza acel if prin funcÈ›ia ifeval().Daca condiÈ›ia este adevarata ruleaza o noua instanÈ›a a funcÈ›iei eval() la condiÈ›ia „da” si evalueaza sub-expresia,in caz contrar trece peste condiÈ›ia neadevarata si ruleaza o noua instanÈ›a a funcÈ›iei eval() la condiÈ›ia „nu”.Daca funcÈ›ia eval intalneste sfarsitul de condiÈ›ie (fi,da,nu) se opreste din execuÈ›ie.
Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!