2274 - Limite: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale. Afișați tipul de date C++ minim ca număr de octeți permite memorarea fiecărui număr. Dacă un număr încape și în tipul cu semn și în tipul fără semn, se afișează tipul cu semn. == Date de intrare == Fișierul de intrare '''limite.in''' conține numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații. == Date de ieşire == Fișierul de ieșire '''limite.out''' va conține '''n''' șiruri de caract...
 
No edit summary
 
Line 2: Line 2:
Se dau '''n''' numere naturale. Afișați tipul de date C++ minim ca număr de octeți permite memorarea fiecărui număr. Dacă un număr încape și în tipul cu semn și în tipul fără semn, se afișează tipul cu semn.
Se dau '''n''' numere naturale. Afișați tipul de date C++ minim ca număr de octeți permite memorarea fiecărui număr. Dacă un număr încape și în tipul cu semn și în tipul fără semn, se afișează tipul cu semn.
== Date de intrare ==
== Date de intrare ==
Fișierul de intrare '''limite.in''' conține numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații.
Fișierul de intrare '''limitein.txt''' conține numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații.
== Date de ieşire ==
== Date de ieşire ==
Fișierul de ieșire '''limite.out''' va conține '''n''' șiruri de caractere, pe '''n''' rânduri, reprezentând tipurile de date cerute, dintre '''char, unsigned char, short, unsigned short, int, unsigned int, long long, unsigned long long'''.
Fișierul de ieșire '''limiteout.txt''' va conține '''n''' șiruri de caractere, pe '''n''' rânduri, reprezentând tipurile de date cerute, dintre '''char, unsigned char, short, unsigned short, int, unsigned int, long long, unsigned long long'''.
== Restricții și precizări ==
== Restricții și precizări ==
* 1 ⩽ n ⩽ 10000
* 1 ⩽ n ⩽ 10000
* cele n numere citite vor fi mai mici sau egale cu '''18446744073709551615'''
* cele n numere citite vor fi mai mici sau egale cu '''18446744073709551615'''
== Exemplu ==
== Exemplul 1 ==
; limite.in
; limitein.txt
: 5
5
: 10 18446744073709551615 32767 127 65535
10 18446744073709551615 32767 127 65535
; limiteout.txt
Datele de intrare corespund restrictiilor impuse
char
unsigned long long
short
char
unsigned short
<br>
== Exemplul 2 ==
; limitein.txt
gghrguhrkf
; limiteout.txt
Datele de intrare corespund restrictiilor impuse
<br>
<br>
; limite.out
: char
: unsigned long long
: short
: char
: unsigned short
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# Definim o funcție care determină tipul de date minim necesar pentru a stoca un număr
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def tip_date(numar):
def validare(n_validare, numere_validare):
     if numar <= 127: # Verificăm dacă numărul poate fi stocat într-un char
    # Verificăm dacă n este în intervalul 1-10000
    if n_validare < 1 or n_validare > 10000:
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000
    for numar_validare in numere_validare:    # Parcurgem lista de numere
        # Verificăm dacă numărul este în intervalul 0-2^64-1
        if numar_validare < 0 or numar_validare > 2**64-1:
            raise ValueError
    file_out.write("Datele de intrare corespund restrictiilor impuse\n")
 
 
# Funcția tip_date determină tipul de date C++ minim necesar pentru a stoca un număr
def tip_date(numar_date):
     if numar_date <= 127: # Dacă numărul poate fi stocat într-un char
         return 'char'
         return 'char'
     elif numar <= 255: # Verificăm dacă numărul poate fi stocat într-un unsigned char
     elif numar_date <= 255: # Dacă numărul poate fi stocat într-un unsigned char
         return 'unsigned char'
         return 'unsigned char'
     elif numar <= 32767: # Verificăm dacă numărul poate fi stocat într-un short
     elif numar_date <= 32767: # Dacă numărul poate fi stocat într-un short
         return 'short'
         return 'short'
     elif numar <= 65535: # Verificăm dacă numărul poate fi stocat într-un unsigned short
     elif numar_date <= 65535: # Dacă numărul poate fi stocat într-un unsigned short
         return 'unsigned short'
         return 'unsigned short'
     elif numar <= 2147483647: # Verificăm dacă numărul poate fi stocat într-un int
     elif numar_date <= 2147483647: # Dacă numărul poate fi stocat într-un int
         return 'int'
         return 'int'
     elif numar <= 4294967295: # Verificăm dacă numărul poate fi stocat într-un unsigned int
     elif numar_date <= 4294967295: # Dacă numărul poate fi stocat într-un unsigned int
         return 'unsigned int'
         return 'unsigned int'
     elif numar <= 9223372036854775807: # Verificăm dacă numărul poate fi stocat într-un long long
     elif numar_date <= 9223372036854775807: # Dacă numărul poate fi stocat într-un long long
         return 'long long'
         return 'long long'
     # Dacă numărul este mai mare, atunci trebuie să fie stocat într-un unsigned long long
     else:  # Dacă numărul este mai mare, atunci trebuie să fie stocat într-un unsigned long long
    else:
         return 'unsigned long long'
         return 'unsigned long long'  
 


# Deschidem fișierul de intrare pentru a citi datele
if __name__ == '__main__':
with open('limite.in', 'r') as intrare:
     file_in = open("limitein.txt", "r")
     n = int(intrare.readline())
     file_out = open("limiteout.txt", "w")
     # Citim numerele și le convertim la întregi
    numere = list(map(int, intrare.readline().split()))


# Pentru fiecare număr, determinăm tipul de date minim și îl adăugăm într-o listă
    try:
tipuri = [tip_date(numar) for numar in numere]
        # Citim numărul de numere
        n_main = int(file_in.readline())
        # Citim numerele
        numere_main = list(map(int, file_in.readline().split()))
        # Validăm datele de intrare
        validare(n_main, numere_main)
        # Pentru fiecare număr, determinăm tipul de date minim și îl scriem în fișierul de ieșire
        for numar in numere_main:
            file_out.write(tip_date(numar) + '\n')


# Deschidem fișierul de ieșire pentru a scrie rezultatele
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare
with open('limite.out', 'w') as iesire:
    except ValueError:
    iesire.write('\n'.join(tipuri)) # Scriem tipurile de date în fișierul de ieșire, fiecare pe o linie nouă
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare
    except IndexError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 13:16, 26 November 2023

Cerinţa[edit | edit source]

Se dau n numere naturale. Afișați tipul de date C++ minim ca număr de octeți permite memorarea fiecărui număr. Dacă un număr încape și în tipul cu semn și în tipul fără semn, se afișează tipul cu semn.

Date de intrare[edit | edit source]

Fișierul de intrare limitein.txt conține numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieşire[edit | edit source]

Fișierul de ieșire limiteout.txt va conține n șiruri de caractere, pe n rânduri, reprezentând tipurile de date cerute, dintre char, unsigned char, short, unsigned short, int, unsigned int, long long, unsigned long long.

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

  • 1 ⩽ n ⩽ 10000
  • cele n numere citite vor fi mai mici sau egale cu 18446744073709551615

Exemplul 1[edit | edit source]

limitein.txt
5
10 18446744073709551615 32767 127 65535
limiteout.txt
Datele de intrare corespund restrictiilor impuse
char
unsigned long long
short
char
unsigned short


Exemplul 2[edit | edit source]

limitein.txt
gghrguhrkf
limiteout.txt
Datele de intrare corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat

def validare(n_validare, numere_validare):

   # Verificăm dacă n este în intervalul 1-10000
   if n_validare < 1 or n_validare > 10000:
       raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000
   for numar_validare in numere_validare:    # Parcurgem lista de numere
       # Verificăm dacă numărul este în intervalul 0-2^64-1
       if numar_validare < 0 or numar_validare > 2**64-1:
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


  1. Funcția tip_date determină tipul de date C++ minim necesar pentru a stoca un număr

def tip_date(numar_date):

   if numar_date <= 127:  # Dacă numărul poate fi stocat într-un char
       return 'char'
   elif numar_date <= 255:  # Dacă numărul poate fi stocat într-un unsigned char
       return 'unsigned char'
   elif numar_date <= 32767:  # Dacă numărul poate fi stocat într-un short
       return 'short'
   elif numar_date <= 65535:  # Dacă numărul poate fi stocat într-un unsigned short
       return 'unsigned short'
   elif numar_date <= 2147483647:  # Dacă numărul poate fi stocat într-un int
       return 'int'
   elif numar_date <= 4294967295:  # Dacă numărul poate fi stocat într-un unsigned int
       return 'unsigned int'
   elif numar_date <= 9223372036854775807:  # Dacă numărul poate fi stocat într-un long long
       return 'long long'
   else:  # Dacă numărul este mai mare, atunci trebuie să fie stocat într-un unsigned long long
       return 'unsigned long long'


if __name__ == '__main__':

   file_in = open("limitein.txt", "r")
   file_out = open("limiteout.txt", "w")
   try:
       # Citim numărul de numere
       n_main = int(file_in.readline())
       # Citim numerele
       numere_main = list(map(int, file_in.readline().split()))
       # Validăm datele de intrare
       validare(n_main, numere_main)
       # Pentru fiecare număr, determinăm tipul de date minim și îl scriem în fișierul de ieșire
       for numar in numere_main:
           file_out.write(tip_date(numar) + '\n')
   # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>