0874 - Atomi

From Bitnami MediaWiki
Revision as of 17:37, 2 June 2024 by Benzar Ioan (talk | contribs) (Pagină nouă: == Cerința == Într-un laborator de fizică atomică, oamenii de știință lucrează cu o serie de atomi pe care trebuie să-i organizeze folosind structuri de date liniare, în special stive. Atomii sunt reprezentați de litere, și pentru a realiza diverse experimente, trebuie să proceseze acești atomi conform unor operațiuni de adăugare și eliminare. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei stive. == Date de intrar...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Într-un laborator de fizică atomică, oamenii de știință lucrează cu o serie de atomi pe care trebuie să-i organizeze folosind structuri de date liniare, în special stive. Atomii sunt reprezentați de litere, și pentru a realiza diverse experimente, trebuie să proceseze acești atomi conform unor operațiuni de adăugare și eliminare. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei stive.

Date de intrare

Programul citește de la tastatură:

Un număr întreg n reprezentând numărul de operațiuni. O listă de n operațiuni, fiecare operațiune fiind de forma "PUSH X" (unde X este o literă) sau "POP".

Date de ieșire

Pe ecran se va afișa stiva rezultată după efectuarea tuturor operațiunilor. Dacă o operațiune "POP" este efectuată pe o stivă goală, se va afișa mesajul "Eroare: stivă goală".

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • 1 'x' este întotdeauna o literă a alfabetului englez

Exemplu 1

Intrare

5
PUSH A
PUSH B
POP
PUSH C
PUSH D

Iesire

['A', 'C', 'D']

Exemplu 2

Intrare

4
PUSH X
POP
POP
PUSH Y

Iesire

Eroare: stivă goală ['Y']

Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

<syntaxhighlight lang="python" line> def citeste_date():

   try:
       n = int(input("Introduceți numărul de operațiuni (n): "))
       operatiuni = []
       for _ in range(n):
           operatiune = input().strip()
           operatiuni.append(operatiune)
       return n, operatiuni
   except ValueError:
       return None, None

def valideaza_date(n, operatiuni):

   if not (1 <= n <= 100):
       return False
   for operatiune in operatiuni:
       if not (operatiune.startswith("PUSH ") or operatiune == "POP"):
           return False
       if operatiune.startswith("PUSH ") and len(operatiune.split()) != 2:
           return False
       if operatiune.startswith("PUSH ") and not operatiune.split()[1].isalpha():
           return False
   return True

def proceseaza_operatiuni(n, operatiuni):

   stiva = []
   for operatiune in operatiuni:
       if operatiune.startswith("PUSH "):
           _, valoare = operatiune.split()
           stiva.append(valoare)
       elif operatiune == "POP":
           if stiva:
               stiva.pop()
           else:
               print("Eroare: stivă goală")
   return stiva

def main():

   n, operatiuni = citeste_date()
   
   if n is None or operatiuni is None or not valideaza_date(n, operatiuni):
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return
   
   print("Datele de intrare corespund restricțiilor impuse.")
   rezultat = proceseaza_operatiuni(n, operatiuni)
   print(rezultat)

if __name__ == "__main__":

   main()

</syntaxhighlight>