0899 – OrdonareF

De la Universitas MediaWiki

Sursa: OrdonareF


Cerinţă

Se dă un șir cu n elemente întregi. Să se ordoneze crescător elementele vectorului.

Date de intrare

Programul va citi de la tastatură valoarean, apoi n numere întregi reprezentând elementele șirului.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa noul vector, obținut în urma ordonării crescătoare a tuturor elementelor vectorului. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

Restricţii şi precizări

  • 1 <= n <= 1000
  • valorile elementelor șirului vor fi < 1.000.000.000

Exemple

Exemplul 1

Intrare
Introduceti numarul de elemente a sirului: 6
Introduceti 6 numere separate prin spatiu:63 273 9 83 93 123
Ieșire
Datele introduse sunt corecte!
Noul vector este: [9, 63, 83, 93, 123, 273]

Exemplul 2

Intrare
Introduceti numarul de elemente a sirului: 123456
Ieșire
Datele introduse sunt incorecte!

Exemplul 3

Intrare
Introduceti numarul de elemente a sirului: 5
Introduceti 5 numere separate prin spatiu:13 1 31 31 1 3 1
Ieșire
Datele introduse sunt incorecte!

Rezolvare

def is_integer(value):
    return value.isdigit()


def verificare_nr_elemente(n):
    if is_integer(n):
        if 0 < int(n) <= 1000:
            return n
        else:
            print("Datele introduse sunt incorecte!")
            exit()
    else:
        print("Datele introduse sunt incorecte!")
        exit()


def verificare_vector(n, vector):
    if len(vector) != int(n):
        print("Datele introduse sunt incorecte!")
        exit()
    else:
        for i in vector:
            if is_integer(i):
                if int(i) < 1000000000:
                    continue
                else:
                    print("Datele introduse sunt incorecte!")
                    exit()
            else:
                print("Datele introduse sunt incorecte!")
                exit()


def ordonare_crescator(sir):
    lista_sortata = sorted(sir)
    print("Noul vector este:",lista_sortata)


if __name__ == '__main__':
    n = input("Introduceti numarul de elemente a sirului: ")
    verificare_nr_elemente(n)
    elem = input(f"Introduceti {n} numere separate prin spatiu:").split()
    verificare_vector(n, elem)
    lst_int = list(map(int, elem))
    print("Datele introduse sunt corecte!")
    ordonare_crescator(lst_int)

Explicație rezolvare

Acest program primește ca intrare un șir de numere întregi și le sortează în ordine crescătoare.

Funcția is_integer(value) este o funcție simplă care primește o valoare și returnează adevărat dacă valoarea este un număr întreg sau fals în caz contrar.

Funcția verificare_nr_elemente(n) verifică dacă n este un număr întreg valid și dacă este între 1 și 1000. Dacă n nu este valid sau nu este în intervalul specificat, programul afișează "Datele introduse sunt incorecte!" și se termină prin apelul funcției exit().

Funcția verificare_vector(n, vector) verifică dacă vectorul are lungimea corectă și dacă toate elementele sale sunt numere întregi valide și mai mici decât 1 miliard. Dacă vectorul nu are lungimea corectă sau conține elemente invalide, programul afișează "Datele introduse sunt incorecte!" și se termină prin apelul funcției exit().

Funcția ordonare_crescator(sir) primește ca argument o listă sir de numere întregi și returnează lista sortată în ordine crescătoare utilizând funcția built-in sorted().

În funcția principală, programul primește input-ul de la utilizator pentru n și elem și apoi verifică validitatea acestor intrări utilizând funcțiile verificare_nr_elemente(n) și verificare_vector(n, elem). Dacă toate intrările sunt valide, programul afișează "Datele introduse sunt corecte!" și apoi se continuă cu apelul funcției ordonare_crescator(lst_int). La final, programul afișează lista sortată crescător.