0875 - Stiva: Difference between revisions
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) | ||
== | ==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"> | ||
class Stack: | class Stack: | ||
def __init__(self): | def __init__(self): | ||
self.stack = [] # Initializam stiva ca lista goala | self.stack = [] # Initializam stiva ca lista goala | ||
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 | |||
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 | ||
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 | ||
# | |||
n = int(input()) | def verificare_restrictii(nr_n): # functia de verificare a datelor de intrare | ||
# | if 1 <= nr_n <= 1000: | ||
s = Stack() | return True | ||
# | else: | ||
for _ in range(n): | 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> | </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>