0900 – OrdonareF1

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Sursa: OrdonareF1


Cerinţă

Se dă un șir cu n elemente întregi. Să se ordoneze descrescă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 descrescă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: [273, 123, 93, 83, 63, 9]

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_descrescator(sir):
    lista_sortata = sorted(sir, reverse=True)
    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_descrescator(lst_int)

Explicație rezolvare

Acest program primește ca intrare un șir de numere întregi și le sortează în ordine descrescă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_descrescator(sir) primește ca argument o listă sir de numere întregi și returnează lista sortată în ordine descrescătoare utilizând funcția built-in sorted() cu parametrul reverse=True.

Î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_descrescator(lst_int). La final, programul afișează lista sortată descrescător.