.campion
conectare | înregistrare | căutare
Pagina principală » Probleme » sl

ultima problemă
grupă: mică
sursă: OMI 2016
ultimul articol
autor: Prof. Radu Vişinescu
ultimul software
autor: Prof. Emanuela Cerchez
.campion
sl


Timp maxim de execuţie/test:
0.1 secunde
Memorie totala disponibilă/stivă:
16 MB/1 MB

Limbajul SL (Stack Language) lucrează cu o stivă (iniţial vidă) şi un singur registru (care iniţial conţine valoarea 0). Un program în limbajul SL este format dintr-o succesiune de instrucţiuni, câte o instrucţiune pe o linie. În program instrucţiunile sunt numerotate de la 0. Executarea unui program începe cu prima instrucţiune a programului.
Instrucţiunile limbajului SL sunt:

Instrucţiune Efect Exemplu
PUSH x Introduce valoarea întreagă x în stivă De exemplu, dacă stiva este:
1
2
3
după ce executăm PUSH 4 stiva va arăta astfel:
4
1
2
3
STORE Valoarea de la vârful stivei este extrasă şi este plasată în registru De exemplu, dacă stiva este:
1
2
3

şi executam STORE va arăta astfel:
2
3

iar în registru se află valoarea 1.
LOAD Conţinutul registrului este copiat şi introdus în stivă De exemplu, dacă registrul conţine valoarea 4, iar stiva este
1
2
3

după executarea operaţiei LOAD registrul va conţine în continuare valoarea 4, iar stiva va arăta astfel:
4
1
2
3
PLUS Extrage din stivă două valori (cele de la vârf), le adună şi introduce în stivă rezultatul. De exemplu, dacă stiva este:
4
10
20

şi executăm PLUS stiva va arăta astfel:
14
20
TIMES Extrage din stivă două valori (cele de la vârf), le înmulţeşte şi introduce în stivă rezultatul De exemplu, dacă stiva este:
4
10
20
şi executăm TIMES stiva va arăta astfel:
40
20

IFZERO n
Dacă valoarea de la varful stivei este egală cu 0, atunci se sare la cea de a n-a instrucţiune din program (într-un program instrucţiunile sunt numerotate de la 0). În caz contrar, se continuă executarea programului cu instrucţiunea următoare.  
DONE afişează valoarea de la vârful stivei şi încheie execuţia programului (indiferent dacă mai există sau nu instrucţiuni în continuare  

Cerinţă

Scrieţi un program care să citească un program în limbajul SL şi să îl execute.

Date de intrare

Fişierul de intrare sl.in conţine pe prima linie un număr natural n reprezentând numărul de instrucţiuni din programul în limbajul SL care urmează. Următoarele n linii conţin cele n instrucţiuni ale programului, câte o instrucţiune pe o linie.

Date de ieşire

Fişierul de ieşire sl.out va conţine o singură linie pe care va fi scrisă valoarea afişată de programul SL din fişierul de intrare.

Restricţii

  • 2<=n<=1000
  • In cazul instrucţiunilor PUSH şi IFZERO există un singur spaţiu între numele instrucţiunii şi argument.
  • Argumentul instrucţiunii PUSH este un număr întreg din intervalul [-10000,10000]
  • Argumentul instrucţiunii IFZERO este un număr natural din intervalul [0,1000]
  • Programul din fişierul de intrare este corect (nu va conţine cicluri infinite, nu va extrage o valoare dintr-o stivă vidă)

Exemple

sl.in sl.out Explicaţie
14
PUSH 5
PUSH 3
PLUS
STORE
LOAD
IFZERO 11
PUSH 4
LOAD
PLUS
DONE
PUSH 10
LOAD
TIMES
DONE
12

Să executăm acest program pas cu pas, urmărind stiva şi registrul

Instrucţiune Efect Stiva Registru
PUSH 5 Se insereaza in stiva valoarea 5
5
0
PUSH 3 Se insereaza in stiva valoarea 3
3
5
0
PLUS Se extrag din stiva primele doua valori, se aduna, rezultatul de plaseaza in stiva
8
0
STORE Este extras elementul de la varful stivei si este plasat in registru.

 

8
LOAD Este copiat continutul registrului si inserat in stiva
8
8
IFZERO 11 Valoarea de la varful stivei nu este egala cu 0, deci se continua executia programului cu instructiunea urmatoare
8
8
PUSH 4 Se insereaza in stiva valoarea 4
4
8
8
LOAD Este copiat continutul registrului si inserat in stiva
8
4
8
8
PLUS Se extrag din stiva primele doua valori, se aduna, rezultatul de plaseaza in stiva
12
8
8
DONE Se afiseaza valoarea 12 si se termina executia programului
12
8
8
PUSH 10      
LOAD      
TIMES      
DONE      

prof. Emanuela Cerchez
Liceul de Informatică „Grigore Moisil” Iaşi
emanuela.cerchez@gmail.com
propunător: Prof. Emanuela Cerchez
emanuela.cerchez@gmail.com
Articole recomandate
Probleme recomandate
De la .campion 2008: celule, premii, cai, scp, forum, vedete, film, finala, ab, nice, supertri, mod3, degrade, fractii, balanta, inginer, camp, ozn, hora, trei, rebus, detinut, fbr, noroc, simetric, egal, manevre, connect3, gropi, nrcuv, ruleta, carti, pod, bonuri, tgv, fib, uscat, 2sir, atac, matrice2, zeratul, afise, an, dezbateri, test, miniasm, platforma, lac, vopsea, harta, nrbun2, barfa, nrbun, bunici, opmat, acop, tren, cub, picnic, cursa, rv, compus, comun, magic, votare, onu, tramvai, bipal, nspecial, retea, secvop
De acelaşi autor: celule, scp, vedete, film, ab, supertri, inginer, camp, detinut, simetric, egal, gropi, ruleta, carti, tgv, uscat, afise, dezbateri, bunici, rv, onu, nspecial, secvop, cadou, chimie, reteta, piticot, petrol, checkin, teanc, index, teren, pizza, ecran, drum, text, lbd, aven, spam, pluricex, tren2, gray, pasi, mgo, joc, anagrame, vecini, criptmat, maxim, cutie, party, friends, net, sablon, hd, pc, sir2, aztec, scara, nr, robot2, sah, formule, ed, bilete, hanoig, flood, matrice3, erdos, grup, cd, kfactor, np, cuc, radio, honest, ref, nr01, scor2, convert, auto2, compress, politics, pm, playlist, barbie, firma1, submatrix, ham, pizza1, exam, ants, teatru1, cifre1, bile1, caini, secvreg, pasune, remi, m01, sir23, tren1, joc5, pachete, aedaro, windows, renju, latime, mere1, piloti, peste, pitici, sirag1, stive, turn1, carti1, program1, spioni, kgb, lift, apel, lex, oras, homeless, subsir, dist, harta1, adevar, joc10, bare, zapezi, masina2, perechi1, raft, joc11, joc12, ferma, fni, tunel, lover, pepsi, transport, avion, monkey, premii1, garaj, carti2, tv, pact, fat, cafea, echipe1, secvente, petrom, peg, scara1, lant, ecuatii, stiva, bile4, jungla, rj, poli, text1, compus1, rez, politie, anag, codul, coment, muzeu, seti, basm, timer, secvsir, dp, placa, prod3, bursa, submdisj, sotron1, fazan, secvpar, joker, lego, medalii, cfr, antipatie, figura, links, segm, colorare, brazi, mobil, distsir, guess, greiere, pestera, conferinta, chei, ny, nx, ghinion, sumb, drenaj, telecomanda, grupuri, mahjong, rotund, viena, sport2, cos, monoton, micro, valet, nr0, maxviz, anagramabil, nrpal, lista, dame, consiliu, adprod, arme, deal, prodnr, compar, latin, interviu, vintage, prize, nrdiv, arrows, tdrept, agenda, reziston, vot2, tema, smiley, relatii, ech, scadere, nebuni, castig, expand, wb, prime2, virgule, b210
Despre şiruri de caractere: scp, ab, nrcuv, rv, kpal, chimie, reteta, replace, grad, index, cod, text, decript, spam, complex, cifre, anagrame, balbe, criptmat, mesaj, maxim, astre, sablon, formule, ed, balls, vocale, prop, bacan, novel, bitslang, text2, ref, scor2, convert, cod2, compress, pstring, sub, rima, program1, sms, circular, randuri, cezar, bifo, joc9, pal, bare, joc12, fractie, cod3, tunel, csir, top, ratina, cifru1, limbaj, adun, ecuatii, dir, paritate, virus, sir6, mesaj2, text1, sirul, ogorul, rez, sablon1, anag, sir8, seti, secvsir, dp, cuvant, strings, antipatie, fractie1, links, ordonare, text3, concat, codif, cheie, alfabetar, cuvinte2, comp, litere, mxl, mesaj3, expresie2, grad2, antic, zuma, expeval, combcuv, lgdrum, subtitrare, compresie, zigzag, azeval, fraze, subsecvente, showroom, rebus1, agenda, opmult, betisoare, reziston, clase, vot2, ecp, smiley, charlie, cript, scadere, spioni1, sablon3, expand, culori3, virgule
Despre stiva: teren, reactii, complex, auto, bile3, chimie2, vile, puncte1, masina3, matrice1, dir, stiva, munte2, perle, basm, predecesor, expresie1, telecab, expresie2, liste, intervale, jocs, expeval, copaci2, plus, azeval, unific, swap, stiva1, ecp, charlie
Software recomandat
Chestionare recomandate
surse trimise | ajutor