3291 - Memory010: Difference between revisions

From Bitnami MediaWiki
Line 25: Line 25:
def validare(nr, bare1):  # functia de validare a datelor de intrare
def validare(nr, bare1):  # functia de validare a datelor de intrare


     if len(bare1) != nr:
     if len(bare1) != nr or bare1[-1] != 0:
         raise ValueError
         raise ValueError


Line 31: Line 31:
         raise ValueError
         raise ValueError


     for bara1 in bare1:
     for bara1 in bare1[:-1]:
         if not isinstance(bara1, int) or bara1 < 0 or bara1 > 1000:
         if not isinstance(bara1, int) or bara1 < 0 or bara1 > 1000:
             raise ValueError
             raise ValueError
Line 55: Line 55:


         validare(n, numere)  # apelul functiei de validare
         validare(n, numere)  # apelul functiei de validare
         duplicat = find_duplicate(numere)  # apelul functiei de rezolvare
         duplicat = find_duplicate(numere[:-1])  # apelul functiei de rezolvare


         if duplicat is not None:  # Dacă am găsit un duplicat
         if duplicat is not None:  # Dacă am găsit un duplicat

Revision as of 08:44, 12 November 2023

Cerinţa

Se citesc numere naturale cuprinse între 1 și 30.000.000 până la întâlnirea numărului 0. Să se afișeze valoarea duplicat.

Date de intrare

Programul citește de la tastatură maxim 1.000.000 de numere cuprinse între 1 și 30.000.000.

Date de ieșire

Programul va afișa pe ecran numărul d, reprezentând valoarea duplicată.

Restricţii şi precizări

  • între numerele citite se află cu siguranță un număr duplicat

Exemplu

Intrare
12 3 8 10 5 8 2 0
Iesire
Datele de intrare corespund restrictiilor impuse
8


Exemplu

Intrare
12 3 8 10 5 8 2 a
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python" line> def validare(nr, bare1): # functia de validare a datelor de intrare

   if len(bare1) != nr or bare1[-1] != 0:
       raise ValueError
   if nr > 1000000:
       raise ValueError
   for bara1 in bare1[:-1]:
       if not isinstance(bara1, int) or bara1 < 0 or bara1 > 1000:
           raise ValueError
   print("Datele de intrare corespund restrictiilor impuse")


def find_duplicate(numere1):

   numere_intalnite = set()  # Creăm un set pentru a urmări numerele întâlnite
   for numar in numere1:
       if numar in numere_intalnite:  # Dacă numărul a fost întâlnit deja
           return numar  # Returnăm numărul duplicat
       numere_intalnite.add(numar)  # Altfel, adăugăm numărul în set
   return None  # Dacă nu găsim niciun număr duplicat, returnăm None


if __name__ == '__main__':

   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       numere = list(map(int, input("Introduceți numerele, separate prin spații (terminați cu 0): ").split()))
       n = len(numere)
       validare(n, numere)  # apelul functiei de validare
       duplicat = find_duplicate(numere[:-1])  # apelul functiei de rezolvare
       if duplicat is not None:  # Dacă am găsit un duplicat
           print("Valoarea duplicată este:", duplicat)
       else:
           print("Nu s-a găsit niciun număr duplicat.")  # Altfel, afișăm un mesaj
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse")


</syntaxhighlight>