0131 - Sort Cif 2: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Se dă un vector cu '''n''' elemente numere întregi. == Cerinţa == Să se ordoneze crescător elementele unui vector crescător după prima cifră. == Date de intrare == Fişierul de intrare '''sortcif2.in''' conţine pe prima linie numărul '''n''' si pe a doua linie '''n''' numere întregi separate prin spaţii. == Date de ieşire == Fişierul de ieşire '''sortcif2.out''' va conţine pe prima linie cele '''n''' elemente ale vectorului, ordonate conform cerinței, separat...
 
No edit summary
 
Line 3: Line 3:
Să se ordoneze crescător elementele unui vector crescător după prima cifră.
Să se ordoneze crescător elementele unui vector crescător după prima cifră.
== Date de intrare ==
== Date de intrare ==
Fişierul de intrare '''sortcif2.in''' conţine pe prima linie numărul '''n''' si pe a doua linie '''n''' numere întregi separate prin spaţii.
Fişierul de intrare '''sortcif2in.txt''' conţine pe prima linie numărul '''n''' si pe a doua linie '''n''' numere întregi separate prin spaţii.
== Date de ieşire ==
== Date de ieşire ==
Fişierul de ieşire '''sortcif2.out''' va conţine pe prima linie cele '''n''' elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.
Fişierul de ieşire '''sortcif2out.txt''' va conţine pe prima linie cele '''n''' elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.
== Restricții și precizări ==
== Restricții și precizări ==
* 0 < n &les; 100
* 0 < n &les; 100
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât '''2 <sup> 30 </sup>'''  
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât '''2 <sup> 30 </sup>'''  
== Exemplu ==
== Exemplul 1 ==
; sortcif2.in
; sortcif2in.txt
: 6
6
: 89 2246 91 4005 51 721
89 2246 91 4005 51 721
; sortcif2.out
; sortcif2out.txt
: 2246 4005 51 721 89 91
Datele de intrare corespund restrictiilor impuse
2246 4005 51 721 89 91
== Exemplul 2 ==
; sortcif2in.txt
-1
101
; sortcif2out.txt
Datele de intrare nu corespund restrictiilor impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def sort_numbers():
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
     with open('sortcif2.in', 'r') as fin:
def validare(validare_cif, numere_validare):
         n = int(fin.readline()) # Citim numărul n de la tastatură
     # Verificăm dacă n este în intervalul 0-100
         numbers = list(map(int, fin.readline().split()))  # Citim cele n numere de la tastatură
    if validare_cif <= 0 or validare_cif > 100:
         raise ValueError # Ridicăm o eroare dacă n nu este în intervalul 0-100
    for numar in numere_validare:    # Parcurgem lista de numere
         # Verificăm dacă valoarea absolută a numărului este mai mică decât 2^30
        if abs(numar) >= 2**30:
            raise ValueError
    file_out.write("Datele de intrare corespund restrictiilor impuse\n")


# Funcția sort_numbers sortează numerele în funcție de prima cifră
def sort_numbers(numere):
     # Sortăm numerele în funcție de prima cifră
     # Sortăm numerele în funcție de prima cifră
     numbers.sort(key=lambda x: int(str(abs(x))[0]))
     numere.sort(key=lambda x: int(str(abs(x))[0]))
    return numere
 
 
if __name__ == '__main__':
    file_in = open("sortcif2in.txt", "r")
    file_out = open("sortcif2out.txt", "w")


     with open('sortcif2.out', 'w') as fout:
     try:
         fout.write(' '.join(map(str, numbers))) # Scriem numerele în fișier, separate printr-un spațiu
        # 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)
        # Sortăm numerele în funcție de prima cifră
        numere_sortate = sort_numbers(numere_main)
         # Scriem numerele sortate în fișierul de ieșire
        file_out.write(' '.join(map(str, numere_sortate)) + '\n')


sort_numbers()
    # 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 15:16, 27 November 2023

Se dă un vector cu n elemente numere întregi.

Cerinţa[edit | edit source]

Să se ordoneze crescător elementele unui vector crescător după prima cifră.

Date de intrare[edit | edit source]

Fişierul de intrare sortcif2in.txt conţine pe prima linie numărul n si pe a doua linie n numere întregi separate prin spaţii.

Date de ieşire[edit | edit source]

Fişierul de ieşire sortcif2out.txt va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

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

  • 0 < n ⩽ 100
  • valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 2 30

Exemplul 1[edit | edit source]

sortcif2in.txt
6
89 2246 91 4005 51 721
sortcif2out.txt
Datele de intrare corespund restrictiilor impuse
2246 4005 51 721 89 91

Exemplul 2[edit | edit source]

sortcif2in.txt
-1
101
sortcif2out.txt
Datele de intrare nu 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(validare_cif, numere_validare):

   # Verificăm dacă n este în intervalul 0-100
   if validare_cif <= 0 or validare_cif > 100:
       raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 0-100
   for numar in numere_validare:    # Parcurgem lista de numere
       # Verificăm dacă valoarea absolută a numărului este mai mică decât 2^30
       if abs(numar) >= 2**30:
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


  1. Funcția sort_numbers sortează numerele în funcție de prima cifră

def sort_numbers(numere):

   # Sortăm numerele în funcție de prima cifră
   numere.sort(key=lambda x: int(str(abs(x))[0]))
   return numere


if __name__ == '__main__':

   file_in = open("sortcif2in.txt", "r")
   file_out = open("sortcif2out.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)
       # Sortăm numerele în funcție de prima cifră
       numere_sortate = sort_numbers(numere_main)
       # Scriem numerele sortate în fișierul de ieșire
       file_out.write(' '.join(map(str, numere_sortate)) + '\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>