0875 - Stiva: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== Să se scrie un program care gestionează o stivă de numere întregi. Inițial stiva este vidă. Programul va citi de la tastatură o listă de operații, care pot fi: *'''push X''' – adaugă valoarea întreagă '''X''' pe stivă; *'''pop''' – elimină elementul din vârful stivei; *'''top''' – afișează elementul din vârful stivei. Programul va realiza asupra stivei operațiile citite, în ordine. Afișările se fac pe ecran, câte o valoare pe linie...
 
No edit summary
Line 24: Line 24:
*dacă la un moment dat se aplică operația '''top''' și stiva nu conține niciun element, operația nu are efect (nu se afișează nimic)
*dacă la un moment dat se aplică operația '''top''' și stiva nu conține niciun element, operația nu are efect (nu se afișează nimic)


==Exemplu:==
==Exemplul 1:==


;Intrare
;Intrare
Line 44: Line 44:
;Ieșire
;Ieșire


:Datele de intrare corespund restrictiilor impuse.
:4
:4
:7
:7
:4
:4
:11
:11
==Exemplul 2:==
;Intrare
:100000
;Ieșire
:Datele de intrare nu corespund restrictiilor impuse.


==Rezolvare==
==Rezolvare==
Line 53: Line 64:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


# Definim clasa Stack
class Stack:
class Stack:
     def __init__(self):
     def __init__(self):
         self.stack = []  # Initializam stiva ca lista goala
         self.stack = []  # Initializam stiva ca lista goala


    # Metoda pentru adaugarea unui element in stiva
     def push(self, x):
     def push(self, x):
         self.stack.append(x)  # Adaugam elementul la sfarsitul listei
         if len(self.stack) < 1000 and -1000000 <= x <= 1000000:  # Verificam daca stiva nu este plina si daca elementul este in intervalul specificat
            self.stack.append(x)  # Adaugam elementul la sfarsitul listei


    # Metoda pentru eliminarea unui element din stiva
     def pop(self):
     def pop(self):
         if len(self.stack) > 0:  # Verificam daca stiva nu este goala
         if len(self.stack) > 0:  # Verificam daca stiva nu este goala
             self.stack.pop()  # Eliminam ultimul element din lista
             self.stack.pop()  # Eliminam ultimul element din lista


    # Metoda pentru afisarea elementului din varful stivei
     def top(self):
     def top(self):
         if len(self.stack) > 0:  # Verificam daca stiva nu este goala
         if len(self.stack) > 0:  # Verificam daca stiva nu este goala
             print(self.stack[-1])  # Afisam ultimul element din lista
             print(self.stack[-1])  # Afisam ultimul element din lista


# Citim numarul de operatii
 
n = int(input())
def verificare_restrictii(nr_n):  # functia de verificare a datelor de intrare
# Cream o instanta a clasei Stack
    if 1 <= nr_n <= 1000:
s = Stack()
        return True
# Executam operatiile
    else:
for _ in range(n):
        return False
    operation = input().split()  # Citim operatia
 
    if operation[0] == 'push':  # Daca operatia este 'push'
 
        s.push(int(operation[1]))  # Adaugam numarul in stiva
if __name__ == '__main__':
    elif operation[0] == 'pop':  # Daca operatia este 'pop'
    try:
        s.pop()  # Eliminam numarul din stiva
        n = int(input("Introduceti numarul de operatii: ")) # Citim numarul de operatii
    elif operation[0] == 'top':  # Daca operatia este 'top'
 
        s.top()  # Afisam numarul din varful stivei
        if verificare_restrictii(n):  # verificam datele de intrare
            print("Datele de intrare corespund restrictiilor impuse.")
            s = Stack() # Cream o instanta a clasei Stack
            for _ in range(n):
                operation = input().split()  # Citim operatia
                if operation[0] == 'push':  # Daca operatia este 'push'
                    s.push(int(operation[1]))  # Adaugam numarul in stiva
                elif operation[0] == 'pop':  # Daca operatia este 'pop'
                    s.pop()  # Eliminam numarul din stiva
                elif operation[0] == 'top':  # Daca operatia este 'top'
                    s.top()  # Afisam numarul din varful stivei
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Revision as of 15:02, 12 November 2023

Cerința

Să se scrie un program care gestionează o stivă de numere întregi. Inițial stiva este vidă. Programul va citi de la tastatură o listă de operații, care pot fi:

  • push X – adaugă valoarea întreagă X pe stivă;
  • pop – elimină elementul din vârful stivei;
  • top – afișează elementul din vârful stivei.

Programul va realiza asupra stivei operațiile citite, în ordine. Afișările se fac pe ecran, câte o valoare pe linie.

Date de intrare

Programul citește de la tastatură un număr n, apoi cele n operații,

Date de ieșire

Programul va afișa pe ecran numere rezultat ale operațiilor top, câte unul pe o linie.

Restricții și precizări

  • stiva nu va conține la un moment dat mai mult de 1000 elemente
  • elementele stivei vor fi cuprinse între -1.000.000 și 1.000.000
  • dacă la un moment dat se aplică operația pop și stiva nu conține niciun element, operația nu are efect
  • dacă la un moment dat se aplică operația top și stiva nu conține niciun element, operația nu are efect (nu se afișează nimic)

Exemplul 1:

Intrare
12
push 5
push 4
top
push 7
push -5
pop
top
pop
top
push 11
top
pop
Ieșire
Datele de intrare corespund restrictiilor impuse.
4
7
4
11

Exemplul 2:

Intrare
100000
Ieșire
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare

<syntaxhighlight lang="python" line="1" start="1">

class Stack:

   def __init__(self):
       self.stack = []  # Initializam stiva ca lista goala
   def push(self, x):
       if len(self.stack) < 1000 and -1000000 <= x <= 1000000:  # Verificam daca stiva nu este plina si daca elementul este in intervalul specificat
           self.stack.append(x)  # Adaugam elementul la sfarsitul listei
   def pop(self):
       if len(self.stack) > 0:  # Verificam daca stiva nu este goala
           self.stack.pop()  # Eliminam ultimul element din lista
   def top(self):
       if len(self.stack) > 0:  # Verificam daca stiva nu este goala
           print(self.stack[-1])  # Afisam ultimul element din lista


def verificare_restrictii(nr_n): # functia de verificare a datelor de intrare

   if 1 <= nr_n <= 1000:
       return True
   else:
       return False


if __name__ == '__main__':

   try:
       n = int(input("Introduceti numarul de operatii: "))  # Citim numarul de operatii
       if verificare_restrictii(n):  # verificam datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           s = Stack()  # Cream o instanta a clasei Stack
           for _ in range(n):
               operation = input().split()  # Citim operatia
               if operation[0] == 'push':  # Daca operatia este 'push'
                   s.push(int(operation[1]))  # Adaugam numarul in stiva
               elif operation[0] == 'pop':  # Daca operatia este 'pop'
                   s.pop()  # Eliminam numarul din stiva
               elif operation[0] == 'top':  # Daca operatia este 'top'
                   s.top()  # Afisam numarul din varful stivei
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>