2083 – Ordon123

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


Cerinţă

Se dă un șir cu n elemente întregi de tipul 1, 2 sau 3. Să se ordoneze elementele în ordine crescătoare.

Date de intrare

Programul va citi de la tastatură valoarea n, 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 elementelor. Î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 <= 1.000.000
  • valorile elementelor șirului vor fi cuprinse în intervalul [1, 3]

Exemple

Exemplul 1

Intrare
Introduceti numarul de elemente a sirului: 8 Introduceti 8 numere separate prin spatiu:1 2 3 1 2 3 1 2
Ieșire
Datele introduse sunt corecte!
Noul vector este: [1, 1, 1, 2, 2, 2, 3, 3]

Exemplul 2

Intrare
Introduceti numarul de elemente a sirului: 123456789
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) <= 1000000:
            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 1 <= int(i) <= 3:
                    continue
                else:
                    print("Datele introduse sunt incorecte!")
                    exit()
            else:
                print("Datele introduse sunt incorecte!")
                exit()


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


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 este conceput pentru a ordona crescător un sir de numere introdus de utilizator. Programul conține mai multe funcții pentru a verifica și procesa datele introduse:

  1. is_integer(value) - Verifică dacă un șir de caractere conține doar cifre și returnează True în acest caz sau False în caz contrar.
  2. verificare_nr_elemente(n) - Verifică dacă numărul de elemente introdus este un număr întreg între 1 și 1.000.000. Dacă nu este, afișează un mesaj de eroare și închide programul.
  3. verificare_vector(n, vector) - Verifică dacă lungimea vectorului introdus este egală cu n și dacă toate elementele sunt numere întregi între 1 și 3. Dacă nu, afișează un mesaj de eroare și închide programul.
  4. ordonare_crescator(sir) - Primește un sir de numere întregi, le sortează în ordine crescătoare și afișează sirul ordonat.

În secțiunea __main__, programul solicită utilizatorului să introducă numărul de elemente și elementele sirului, apoi verifică datele introduse. Dacă datele sunt corecte, programul apelează funcția ordonare_crescator() pentru a sorta sirul în ordine crescătoare și afișează rezultatul.