0914 - Half Sort 1: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Tag: visualeditor
Line 1: Line 1:
== Cerință ==
== Cerință ==
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 dă un vector cu '''n elemente numere întreg'''i, '''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:
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
'''citire''', care citește valoarea lui n și cele n elemente ale tabloului
sortare, care ordonează elementele vectorului cuprinse între doi indici transmiși ca parametru. Criteriul de ordonare (crescător/descrescător) va fi transmis ca parametru.
 
'''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 ==
== Date de intrare ==
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.
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.
Line 10: Line 14:
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.
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.
== Restricții de precizări ==
== Restricții de precizări ==
*1 ⩽ n ⩽ 1000
*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
*valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 1.000.000.00


Line 20: Line 24:
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 2 8 9 7 5 4
: 2 8 9 7 5 4
<br>
== Exemplul 2==
; 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 ==
== Rezolvare ver. 1 ==
<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>

Revision as of 13:32, 26 April 2023

Cerință

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

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

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.

Restricții de precizări

  • 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

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

Exemplul 2

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

<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>