2083 – Ordon123

De la Universitas MediaWiki

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.