3791 – Interclas No Memory

De la Universitas MediaWiki

Sursa: Interclas No Memory


Cerinţă

Se dau două șiruri de numere naturale, cu n, respectiv m elemente, ordonate crescător. Să se scrie definiția funcției interclasare care nu are parametri și nu întoarce niciun rezultat, și care să determine al treilea șir care să conţină, în ordine crescătoare, elementele din primele două şiruri.

Date de intrare

Programul va citi de la tastatură o valoare n, urmată de n numere întregi, după care va citi o valoare m, urmată de m numere întregi.

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 prin ordonarea elementelor obținute prin alăturarea celor doi vectori. Î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, m <= 100.000
  • valorile elementelor șirului vor fi < 1.000.000.000

Exemple

Exemplul 1

Intrare
Introduceti numarul de elemente pentru primul sir: 3
Introduceti 3 numere separate prin spatiu:12 1 1
Introduceti numarul de elemente pentru cel de al doilea sir: 4
Introduceti 4 numere separate prin spatiu:123 12 24 56
Ieșire
Datele introduse sunt corecte!
Vectorul nou este: [1, 1, 12, 12, 24, 56, 123]

Exemplul 2

Intrare
Introduceti numarul de elemente pentru primul sir: 4 Introduceti 4 numere separate prin spatiu:12 1 31 12 2
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) < 100000:
            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 reuneste_si_ordoneaza(lista1, lista2):
    lista_combinata = lista1 + lista2
    lista_sortata = sorted(lista_combinata)
    print("Vectorul nou este:",lista_sortata)


if __name__ == '__main__':
    n = input("Introduceti numarul de elemente pentru primul sir: ")
    verificare_nr_elemente(n)
    elem = input(f"Introduceti {n} numere separate prin spatiu:").split()
    verificare_vector(n, elem)
    lst_int1 = list(map(int, elem))
    m = input("Introduceti numarul de elemente pentru cel de al doilea sir: ")
    verificare_nr_elemente(m)
    elem2 = input(f"Introduceti {m} numere separate prin spatiu:").split()
    verificare_vector(m, elem2)
    lst_int2 = list(map(int, elem2))
    print("Datele introduse sunt corecte!")
    reuneste_si_ordoneaza(lst_int1, lst_int2)

Explicație rezolvare

Acest program conține funcții pentru a verifica și procesa două siruri de numere introduse de utilizator. După ce utilizatorul introduce numerele, programul combină și sortează cele două siruri de numere în ordine crescătoare.

  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 9. 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 mai mici sau egale cu 1.000.000.000. Dacă nu, afișează un mesaj de eroare și închide programul.
  4. reuneste_si_ordoneaza(lista1, lista2) - Primește două liste de numere întregi, le combină și le sortează în ordine crescătoare, apoi afișează lista sortată.

În secțiunea __main__, programul solicită utilizatorului să introducă numărul de elemente și elementele pentru fiecare dintre cele două siruri, apoi verifică datele introduse. Dacă datele sunt corecte, programul apelează funcția reuneste_si_ordoneaza() pentru a combina și sorta cele două siruri și afișează rezultatul.