0876 - Coada: Difference between revisions
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) | ||
== | ==Exemplul 1:== | ||
;Intrare | ;Intrare | ||
12 | |||
push 5 | |||
push 4 | |||
front | |||
push 7 | |||
push -5 | |||
pop | |||
front | |||
pop | |||
front | |||
push 11 | |||
front | |||
pop | |||
;Ieșire | ;Ieșire | ||
Datele de intrare corespund restrictiilor impuse. | |||
5 | |||
4 | |||
: | 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 | 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 | # 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 | ||
print(self.queue[0]) # Afisam primul element | |||
else: | |||
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.") | ||
# 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> | </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">
- 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>