0914 - Half Sort 1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: <nowiki>== Cerință ==</nowiki> 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ă elemente...
 
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
<nowiki>== Cerință ==</nowiki>
== Cerință ==
 
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 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:
Se vor defini și apela următoarele subprograme:


* citire, care     citește valoarea lui n și cele n elemente     ale tabloului
'''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. Criteriul de ordonare (crescător/descrescător) va fi transmis    ca parametru.
 
<nowiki>== Date de intrare ==</nowiki>
 
Fişierul de intrare <code>halfsort1.in</code> conţine pe prima linie numărul <code>n</code> si pe a doua linie <code>n</code> numere întregi separate prin spaţii.
 
<nowiki>== Date de ieșire ==</nowiki>
 
Fişierul de ieşire <code>halfsort1.out</code> va conţine pe prima linie cele <code>n</code> elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.
 
<nowiki>== Restricții de precizări ==</nowiki>
 
<nowiki>*</nowiki>1 <nowiki>&</nowiki>les; n <nowiki>&</nowiki>les; 1000
 
<nowiki>*</nowiki>valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 1.000.000.00


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


<nowiki>== Exemplul 1==</nowiki>
'''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 ==
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."


<nowiki>;</nowiki> Intrare
== Restricții de precizări ==
*1 &les; '''n''' &les; 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


<nowiki>:</nowiki> 6
== 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)


<nowiki>:</nowiki> 8 2  9 4 5 7


<nowiki>;</nowiki> Ieșire
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]


<nowiki>:</nowiki> Datele introduse corespund restricțiilor impuse.


<nowiki>:</nowiki> 2 8 9 7 5 4
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.")


<nowiki><br></nowiki>
</syntaxhighlight>

Latest revision as of 11:46, 30 April 2023

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>