3291 - Memory010: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == 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 sigura...
 
 
(3 intermediate revisions by the same user not shown)
Line 11: Line 11:
: 12 3 8 10 5 8 2 0
: 12 3 8 10 5 8 2 0
; Iesire
; Iesire
: Datele de intrare corespund restrictiilor impuse
: 8
: 8
<br>
== Exemplu 2 ==
; Intrare
: 12 3 8 10 5 8 2 a
; Iesire
: Datele de intrare nu corespund restrictiilor impuse
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def find_duplicate(numbers):
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
     numere_intalnite = set()  # Creăm un set pentru a urmări numerele întâlnite
     for numar in numbers:
     for numar in numere1:
         if numar in numere_intalnite:  # Dacă numărul a fost întâlnit deja
         if numar in numere_intalnite:  # Dacă numărul a fost întâlnit deja
             return numar  # Returnăm numărul duplicat
             return numar  # Returnăm numărul duplicat
Line 22: Line 46:
     return None  # Dacă nu găsim niciun număr duplicat, returnăm None
     return None  # Dacă nu găsim niciun număr duplicat, returnăm None


def main():
    numere = []
    while True:
        numar = int(input("Introduceți un număr (0 pentru a opri citirea): "))
        if numar == 0:
            break  # Ieșim din buclă dacă se introduce 0
        numere.append(numar)  # Adăugăm numărul în lista numere


     duplicat = find_duplicate(numere)  # Căutăm valoarea duplicat
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


     if duplicat is not None: # Dacă am găsit un duplicat
     except ValueError:
         print("Valoarea duplicat este:", duplicat)
         print("Datele de intrare nu corespund restrictiilor impuse")
     else:
     except IndexError:
         print("Nu s-a găsit niciun număr duplicat.") # Altfel, afișăm un mesaj
         print("Datele de intrare nu corespund restrictiilor impuse")


if __name__ == "__main__":
    main()


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 08:44, 12 November 2023

Cerinţa[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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

Restricţii şi precizări[edit | edit source]

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

Exemplu[edit | edit source]

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


Exemplu 2[edit | edit source]

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


Rezolvare[edit | edit source]

<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>