<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2228_-_expresie10</id>
	<title>2228 - expresie10 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2228_-_expresie10"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2228_-_expresie10&amp;action=history"/>
	<updated>2026-05-01T06:41:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2228_-_expresie10&amp;diff=9677&amp;oldid=prev</id>
		<title>Aurelia Raluca at 20:17, 23 February 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2228_-_expresie10&amp;diff=9677&amp;oldid=prev"/>
		<updated>2024-02-23T20:17:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=2228_-_expresie10&amp;amp;diff=9677&amp;amp;oldid=8231&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2228_-_expresie10&amp;diff=8231&amp;oldid=prev</id>
		<title>Aurelia Raluca: Pagină nouă: == Enunt ==   Se consideră o expresie formată din numere naturale şi perechi de paranteze drepte. Includerea între paranteze corespunde operației de calcul a câtului împărțirii întregi la 2 a valorii incluse între paranteze, iar alăturarea a două paranteze corespunde operației de adunare a valorilor subexpresiilor. Expresia poate fi calculată doar dacă este corectă, adică nu conține numere care să nu fie incluse între paranteze drepte, nu conține perechi...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2228_-_expresie10&amp;diff=8231&amp;oldid=prev"/>
		<updated>2023-12-17T21:05:25Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt ==   Se consideră o expresie formată din numere naturale şi perechi de paranteze drepte. Includerea între paranteze corespunde operației de calcul a câtului împărțirii întregi la 2 a valorii incluse între paranteze, iar alăturarea a două paranteze corespunde operației de adunare a valorilor subexpresiilor. Expresia poate fi calculată doar dacă este corectă, adică nu conține numere care să nu fie incluse între paranteze drepte, nu conține perechi...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt == &lt;br /&gt;
&lt;br /&gt;
Se consideră o expresie formată din numere naturale şi perechi de paranteze drepte. Includerea între paranteze corespunde operației de calcul a câtului împărțirii întregi la 2 a valorii incluse între paranteze, iar alăturarea a două paranteze corespunde operației de adunare a valorilor subexpresiilor. Expresia poate fi calculată doar dacă este corectă, adică nu conține numere care să nu fie incluse între paranteze drepte, nu conține perechi de paranteze care să nu includă nici un număr sau nici o altă subexpresie şi perechile de paranteze se închid corect.&lt;br /&gt;
&lt;br /&gt;
== Cerinta == &lt;br /&gt;
&lt;br /&gt;
Fiind dată o expresie construită conform descrierii să se decidă dacă este corectă şi în caz afirmativ să se calculeze valoarea acesteia.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare expresie10.in conține pe prima linie o expresie formata numai din paranteze drepte şi numere naturale.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire expresie10.out va conține pe prima linie valoarea expresiei în cazul în care aceasta este corectă. Dacă expresia din fişierul de intrare nu este corectă, atunci se va scrie mesajul expresie gresita.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări == &lt;br /&gt;
&lt;br /&gt;
*numerele care apar în expresii sunt întregi şi sunt cuprinse între 0 şi 30000&lt;br /&gt;
*expresia din fișierul de intrare este formată din cel mult 200 de caractere&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
; intrare &lt;br /&gt;
&lt;br /&gt;
:[[34][23[12][]&lt;br /&gt;
&lt;br /&gt;
; iesire &lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
:expresie gresita&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 == &lt;br /&gt;
&lt;br /&gt;
; intrare&lt;br /&gt;
&lt;br /&gt;
:[6][[8][-12]]&lt;br /&gt;
&lt;br /&gt;
; iesire&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def este_corecta(expresie):&lt;br /&gt;
    stiva = []&lt;br /&gt;
&lt;br /&gt;
    for caracter in expresie:&lt;br /&gt;
        if caracter.isdigit():&lt;br /&gt;
            # Dacă este un număr, adăugăm la stivă&lt;br /&gt;
            stiva.append(int(caracter))&lt;br /&gt;
        elif caracter == &amp;#039;[&amp;#039;:&lt;br /&gt;
            # Dacă este o paranteză dreaptă deschisă, adăugăm la stivă&lt;br /&gt;
            stiva.append(&amp;#039;[&amp;#039;)&lt;br /&gt;
        elif caracter == &amp;#039;]&amp;#039;:&lt;br /&gt;
            # Dacă este o paranteză dreaptă închisă, calculăm valoarea&lt;br /&gt;
            valoare = 0&lt;br /&gt;
&lt;br /&gt;
            while stiva and stiva[-1] != &amp;#039;[&amp;#039;:&lt;br /&gt;
                valoare += stiva.pop()&lt;br /&gt;
&lt;br /&gt;
            if not stiva or stiva.pop() != &amp;#039;[&amp;#039;:&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
            # Adăugăm valoarea calculată la stivă&lt;br /&gt;
            stiva.append(valoare)&lt;br /&gt;
&lt;br /&gt;
    # La final, trebuie să avem un singur rezultat pe stivă&lt;br /&gt;
    return len(stiva) == 1 and isinstance(stiva[0], int)&lt;br /&gt;
&lt;br /&gt;
def calculeaza_valoare(expresie):&lt;br /&gt;
    stiva = []&lt;br /&gt;
&lt;br /&gt;
    for caracter in expresie:&lt;br /&gt;
        if caracter.isdigit():&lt;br /&gt;
            # Dacă este un număr, adăugăm la stivă&lt;br /&gt;
            stiva.append(int(caracter))&lt;br /&gt;
        elif caracter == &amp;#039;[&amp;#039;:&lt;br /&gt;
            # Dacă este o paranteză dreaptă deschisă, adăugăm la stivă&lt;br /&gt;
            stiva.append(&amp;#039;[&amp;#039;)&lt;br /&gt;
        elif caracter == &amp;#039;]&amp;#039;:&lt;br /&gt;
            # Dacă este o paranteză dreaptă închisă, calculăm valoarea&lt;br /&gt;
            valoare = 0&lt;br /&gt;
&lt;br /&gt;
            while stiva and stiva[-1] != &amp;#039;[&amp;#039;:&lt;br /&gt;
                valoare += stiva.pop()&lt;br /&gt;
&lt;br /&gt;
            # Scoatem &amp;#039;[&amp;#039; de pe stivă&lt;br /&gt;
            stiva.pop()&lt;br /&gt;
&lt;br /&gt;
            # Adăugăm valoarea calculată la stivă&lt;br /&gt;
            stiva.append(valoare)&lt;br /&gt;
&lt;br /&gt;
    # La final, rezultatul este singurul element de pe stivă&lt;br /&gt;
    return stiva[0] if stiva else None&lt;br /&gt;
&lt;br /&gt;
if este_corecta(expresie1):&lt;br /&gt;
    rezultat1 = calculeaza_valoare(expresie1)&lt;br /&gt;
    print(f&amp;#039;Expresia este corectă, iar valoarea este: {rezultat1}&amp;#039;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;#039;Expresia nu este corectă.&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
if este_corecta(expresie2):&lt;br /&gt;
    rezultat2 = calculeaza_valoare(expresie2)&lt;br /&gt;
    print(f&amp;#039;Expresia este corectă, iar valoarea este: {rezultat2}&amp;#039;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;#039;Expresia nu este corectă.&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
</feed>