0876 - Coada: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== Să se scrie un program care gestionează o coadă de numere întregi. Inițial coada este vidă. Programul va citi de la tastatură o listă de operații, care pot fi: *'''push X''' – adaugă valoarea întreagă '''X''' în coadă; *'''pop''' – elimină elementul din coadă; *'''front''' – afișează elementul de la începutul cozii. Programul va realiza asupra cozii 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 '''front''' și coada nu conține niciun element, operația nu are efect (nu se afișează nimic)
*dacă la un moment dat se aplică operația '''front''' și coada nu conține niciun element, operația nu are efect (nu se afișează nimic)


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


;Intrare
;Intrare


:12
12
:push 5
push 5
:push 4
push 4
:front  
front  
:push 7  
push 7  
:push -5
push -5
:pop
pop
:front
front
:pop
pop
:front
front
:push 11
push 11
:front
front
:pop
pop


;Ieșire
;Ieșire


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


==Rezolvare==
==Rezolvare==
Line 60: Line 71:
     # Metoda pentru adaugarea unui element in coada
     # Metoda pentru adaugarea unui element in coada
     def push(self, x):
     def push(self, x):
         self.queue.append(x)  # Adaugam elementul la sfarsitul cozii
         if len(self.queue) < 1000 and -1000000 <= x <= 1000000:  # Verificam daca coada nu este plina si daca elementul este in intervalul specificat
            self.queue.append(x)  # Adaugam elementul la sfarsitul cozii


     # Metoda pentru eliminarea unui element din coada
     # Metoda pentru eliminarea unui element din coada
     def pop(self):
     def pop(self):
         if len(self.queue) < 1:  # Verificam daca coada este goala
         if self.queue:  # Verificam daca coada nu este goala
             return None
             self.queue.pop(0)  # Eliminam primul element din coada
        return self.queue.pop(0)  # Eliminam primul element din coada


     # Metoda pentru a obtine primul element din coada
     # Metoda pentru a obtine primul element din coada
     def front(self):
     def front(self):
         if self.queue:  # Verificam daca coada nu este goala
         if self.queue:  # Verificam daca coada nu este goala
             return self.queue[0]  # Returnam primul element
             print(self.queue[0]) # Afisam primul element
         else:
 
            return None  # Daca coada este goala, returnam None
 
def verificare_restrictii(nr_n):    # functia de verificare a datelor de intrare
    if 1 <= nr_n <= 1000:
         return True
    else:
        return False
 


# Cream o instanta a clasei Queue
if __name__ == '__main__':
queue = Queue()
    try:
        # Cream o instanta a clasei Queue
        queue = Queue()


# Citim numarul de operatii
        # Citim numarul de operatii
n = int(input())
        n = int(input("Introduceti numarul de operatii: "))


# Executam operatiile
        if verificare_restrictii(n):  # verificam datele de intrare
for _ in range(n):
            print("Datele de intrare corespund restrictiilor impuse.")
    operation = input().split()  # Citim operatia
            # Executam operatiile
    if operation[0] == 'push':  # Daca operatia este 'push', adaugam elementul in coada
            for _ in range(n):
        queue.push(int(operation[1]))
                operation = input("Introduceti operatia: ").split()  # Citim operatia
    elif operation[0] == 'pop':  # Daca operatia este 'pop', eliminam elementul din coada
                if operation[0] == 'push':  # Daca operatia este 'push', adaugam elementul in coada
        queue.pop()
                    queue.push(int(operation[1]))
    elif operation[0] == 'front':  # Daca operatia este 'front', afisam primul element din coada
                elif operation[0] == 'pop':  # Daca operatia este 'pop', eliminam elementul din coada
        front = queue.front()
                    queue.pop()
         if front is not None: # Daca coada nu este goala, afisam elementul
                elif operation[0] == 'front':  # Daca operatia este 'front', afisam primul element din coada
            print(front)
                    queue.front()
         else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 19:11, 17 November 2023

Cerința[edit | edit source]

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

  • push X – adaugă valoarea întreagă X în coadă;
  • pop – elimină elementul din coadă;
  • front – afișează elementul de la începutul cozii.

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

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

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

Restricții și precizări[edit | edit source]

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

Exemplul 1:[edit | edit source]

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

Exemplul 2:[edit | edit source]

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

Rezolvare[edit | edit source]

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

  1. Definim clasa Queue

class Queue:

   def __init__(self):
       self.queue = []  # Initializam coada ca o lista goala
   # Metoda pentru adaugarea unui element in coada
   def push(self, x):
       if len(self.queue) < 1000 and -1000000 <= x <= 1000000:  # Verificam daca coada nu este plina si daca elementul este in intervalul specificat
           self.queue.append(x)  # Adaugam elementul la sfarsitul cozii
   # Metoda pentru eliminarea unui element din coada
   def pop(self):
       if self.queue:  # Verificam daca coada nu este goala
           self.queue.pop(0)  # Eliminam primul element din coada
   # Metoda pentru a obtine primul element din coada
   def front(self):
       if self.queue:  # Verificam daca coada nu este goala
           print(self.queue[0])  # Afisam primul element


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:
       # Cream o instanta a clasei Queue
       queue = Queue()
       # Citim numarul de operatii
       n = int(input("Introduceti numarul de operatii: "))
       if verificare_restrictii(n):  # verificam datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           # Executam operatiile
           for _ in range(n):
               operation = input("Introduceti operatia: ").split()  # Citim operatia
               if operation[0] == 'push':  # Daca operatia este 'push', adaugam elementul in coada
                   queue.push(int(operation[1]))
               elif operation[0] == 'pop':  # Daca operatia este 'pop', eliminam elementul din coada
                   queue.pop()
               elif operation[0] == 'front':  # Daca operatia este 'front', afisam primul element din coada
                   queue.front()
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>