0914 - Half Sort 1

From Bitnami MediaWiki
Revision as of 11:46, 30 April 2023 by Vardai Erwin (talk | contribs) (→‎Date de ieșire)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerință[edit | edit source]

Se dă un vector cu n elemente numere întregi, n fiind număr par. Să se ordoneze crescător elementele din prima jumătate a vectorului și descrescător elementele din a doua jumătate.

Se vor defini și apela următoarele subprograme:

citire, care citește valoarea lui n și cele n elemente ale tabloului

afisare, care afișează elementele tabloului, separate prin exact un spațiu

sortare, care ordonează elementele vectorului cuprinse între doi indici transmiși ca parametru.

Date de intrare[edit | edit source]

Fişierul de intrare halfsort1.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[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Fişierul de ieşire halfsort1.out va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări[edit | edit source]

  • 1 ⩽ n ⩽ 1000
  • valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 1.000.000.00

Exemplul 1[edit | edit source]

Intrare
6
8 2 9 4 5 7
Ieșire
Datele introduse corespund restricțiilor impuse.
2 8 9 7 5 4

Exemplul 2[edit | edit source]

Intrare
6
2 4 3 9 5 8
Ieșire
Datele introduse corespund restricțiilor impuse.
2 3 4 9 8 5

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1"> def validare(n, a):

   # Verifică dacă n este de tip int, este mai mare decât 1, mai mic sau egal cu 100 și toate elementele din a sunt de tip int
   return isinstance(n, int) and n > 1 and n <= 100 and all(isinstance(x, int) for x in a)


def sortare(n, a, st, dr, ch):

   if ch == 'c':
       # Sortare crescătoare (crescent)
       for i in range(st, dr):
           for j in range(i + 1, dr):
               if a[i] > a[j]:
                   a[i], a[j] = a[j], a[i]
   else:
       # Sortare descrescătoare (descendent)
       for i in range(st, dr):
           for j in range(i + 1, dr):
               if a[i] < a[j]:
                   a[i], a[j] = a[j], a[i]


def afisare(n, a):

   # Afișează elementele listei a
   for i in range(n):
       print(a[i], end=' ')

if __name__ == "__main__":

   n = 0
   a = []
   # Citire date de intrare
   n = int(input("Introduceți numărul de elemente: "))
   for i in range(n):
       a.append(int(input(f"Introduceți elementul {i + 1}: ")))
   # Verificare validitate date de intrare
   if validare(n, a):
       print("Datele introduse corespund restricțiilor impuse.")
       # Sortare
       sortare(n, a, 0, n // 2 + n % 2, 'c')
       sortare(n, a, n // 2 + n % 2, n, 'd')
       # Afisare rezultat
       print("Lista sortată:")
       afisare(n, a)
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>