3550 - liceu

De la Universitas MediaWiki
Versiunea din 2 iunie 2024 18:14, autor: Benzar Ioan (discuție | contribuții) (Pagină nouă: == Cerința == La un liceu, elevii trebuie să se alinieze pentru a se înregistra la diverse activități extracurriculare. Pentru a gestiona această coadă, se folosesc operațiuni de tip coadă, unde elevii pot adăuga sau elimina o înregistrare. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei cozi de înregistrare. == Date de intrare == Programul citește de la tastatură: Un număr întreg n reprezentând numărul de oper...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

La un liceu, elevii trebuie să se alinieze pentru a se înregistra la diverse activități extracurriculare. Pentru a gestiona această coadă, se folosesc operațiuni de tip coadă, unde elevii pot adăuga sau elimina o înregistrare. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei cozi de înregistrare.


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 "ENQUEUE X" (unde X este numele unui elev) sau "DEQUEUE".

Date de ieșire

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

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • 'x' este întotdeauna un nume de elev reprezentat printr-un șir de caractere.

Exemplu 1

Intrare

5
ENQUEUE Maria
ENQUEUE Andrei
DEQUEUE
ENQUEUE Ioana
ENQUEUE Alexandru

Iesire

['Andrei', 'Ioana', 'Alexandru']

Exemplu 2

Intrare

4
ENQUEUE George
DEQUEUE
DEQUEUE
ENQUEUE Ana

Iesire

Eroare: coada goală ['Ana']

Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

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("ENQUEUE ") or operatiune == "DEQUEUE"):
            return False
        if operatiune.startswith("ENQUEUE ") and len(operatiune.split()) != 2:
            return False
        if operatiune.startswith("ENQUEUE ") and not operatiune.split()[1].isalpha():
            return False
    return True

def proceseaza_operatiuni(n, operatiuni):
    coada = []
    for operatiune in operatiuni:
        if operatiune.startswith("ENQUEUE "):
            _, nume = operatiune.split()
            coada.append(nume)
        elif operatiune == "DEQUEUE":
            if coada:
                coada.pop(0)
            else:
                print("Eroare: coada goală")
    return coada

def main():
    n, operatiuni = citeste_date()
    
    if n is None or operatiuni are 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()