2274 - Limite: Difference between revisions
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 ''' | 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 ''' | 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''' | ||
== | == Exemplul 1 == | ||
; | ; limitein.txt | ||
5 | |||
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> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | # Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat | ||
def tip_date( | def validare(n_validare, numere_validare): | ||
if | # 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 | elif numar_date <= 255: # Dacă numărul poate fi stocat într-un unsigned char | ||
return 'unsigned char' | return 'unsigned char' | ||
elif | elif numar_date <= 32767: # Dacă numărul poate fi stocat într-un short | ||
return 'short' | return 'short' | ||
elif | elif numar_date <= 65535: # Dacă numărul poate fi stocat într-un unsigned short | ||
return 'unsigned short' | return 'unsigned short' | ||
elif | elif numar_date <= 2147483647: # Dacă numărul poate fi stocat într-un int | ||
return 'int' | return 'int' | ||
elif | elif numar_date <= 4294967295: # Dacă numărul poate fi stocat într-un unsigned int | ||
return 'unsigned int' | return 'unsigned int' | ||
elif | 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 | ||
return 'unsigned long long' | |||
return 'unsigned long long' | |||
if __name__ == '__main__': | |||
file_in = open("limitein.txt", "r") | |||
file_out = open("limiteout.txt", "w") | |||
# Pentru fiecare număr, determinăm tipul de date minim și îl | 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> | </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>
- 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")
- 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>