1399 - Sortare in Trepte

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se citește un șir cu n numere întregi. Să se rearanjeze elementele șirului astfel ca numerele negative să fie ordonate descrescător. Apoi să urmeze elementele nule, urmate de numerele pozitive ordonate descrescător.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieşire[edit | edit source]

Programul va afișa pe ecran pe prima linie șirul ordonat conform cerinței.

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

  • 1 ⩽ n ⩽ 1000
  • -10000 ⩽ elementele șirului ⩽ 10000

Exemplul 1[edit | edit source]

Intare
7
1 -41 8 -3 4 8 0
Ieșire
Datele introduse corespund restricțiilor impuse.
-3 -41 0 8 8 4 1


Exemplul 2[edit | edit source]

Intare
2
-100000
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1399 Sortare in Trepte
  1. Definim funcția de verificare a valorii n și a elementelor șirului

def verificare(numar_valoare, sir_val):

   # Verificăm dacă n respectă restricțiile problemei
   if 1 <= numar_valoare <= 1000:
       # Verificăm dacă fiecare element al șirului respectă restricțiile problemei
       for element in sir_val:
           if not (-10000 <= element <= 10000):
               # Dacă un element nu respectă restricțiile, ridicăm o excepție
               raise ValueError
       # Dacă toate valorile sunt valide, returnăm True
       return True
   else:
       # Dacă valoarea n nu este validă, ridicăm o excepție
       raise ValueError


  1. Definim funcția pentru sortarea șirului

def sortare(sir_val):

   # Separam numerele în funcție de semn
   negative = [x for x in sir_val if x < 0]
   zero = [x for x in sir_val if x == 0]
   pozitive = [x for x in sir_val if x > 0]
   # Sortăm fiecare listă în mod corespunzător
   negative.sort(reverse=True)
   pozitive.sort(reverse=True)
   # Concatenăm listele pentru a obține șirul final
   sir_final = negative + zero + pozitive
   # Returnăm șirul sortat
   return sir_final


  1. Verificăm dacă acest script este rulat direct (nu este importat ca modul)

if __name__ == '__main__':

   try:
       # Citim numărul de elemente din șir
       n = int(input("Introduceti numarul de elemente din sir: "))
       # Citim elementele șirului
       sir = list(map(int, input("Introduceti elementele sirului, separate prin spatii: ").split()))
       # Verificăm dacă datele introduse sunt valide
       if verificare(n, sir):
           # Dacă datele sunt valide, afișăm un mesaj de confirmare
           print("Datele introduse corespund restricțiilor impuse.")
       # Sortăm și afișăm șirul
       print(' '.join(map(str, sortare(sir))))
   # Tratăm cazul în care datele introduse nu sunt valide
   except ValueError:
       # Afișăm un mesaj de eroare
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>