0119 - 2 Maxim

De la Universitas MediaWiki

Sursă: [1]

Cerință

Să se scrie un program care citește un șir de n numere naturale şi determină cele mai mari două numere din şir.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale nenule.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.".Programul afișează pe ecran numerele x y, reprezentând valorile cerute, separate prin exact un spaţiu.În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 2 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 2.000.000.000
  • valorile afişate respectă relaţia x ≥ y

Exemple

Exemplu 1

Intrare
5
72 30 12 15 17
Ieșire
75 72

Exemplu 2

Intrare
1
7 10 2 15 17
Ieșire
Datele nu sunt comform restricțiilor impuse

Exemplu 3

Intrare
a
b f c d g
Ieșire
Datele nu sunt comform restricțiilor impuse

Rezolvare

def citeste_n():
    while True:
        try:
            n = int(input("Introduceti numarul de valori: "))
            if n >= 2 and n <= 1000:
                print("Datele sunt corecte.")
                return n
            else:
                print("Datele nu sunt conform restricțiilor impuse.")
        except ValueError:
            print("Trebuie introduse doar numere intregi.")


def citeste_valori(n):
    valori = []
    for i in range(n):
        while True:
            try:
                valoare = int(input("Introduceti o valoare: "))
                if valoare <= 2000000000:
                    print("Datele sunt corecte.")
                    valori.append(valoare)
                    break
                else:
                    print("Datele nu sunt conform restricțiilor impuse.")
            except ValueError:
                print("Trebuie introduse doar valori naturale cu mai putin de 10 cifre.")

    return valori


def numere_maxime(valori):
    # Sortarea valorilor in ordine descrescatoare
    valori.sort(reverse=True)
    # Returnarea celor doua valori maxime
    return valori[0], valori[1]


if __name__ == '__main__':
    n = citeste_n()
    valori = citeste_valori(n)
    x, y = numere_maxime(valori)
    print("Cele mai mari numere sunt:", x, "și", y)

Explicații

Acest cod constă dintr-o funcție pentru a citi un număr de valori, o funcție pentru a citi acele valori, o funcție pentru a sorta valorile în ordine descrescătoare, și o funcție pentru a găsi cele două numere maxime.
Funcția citeste_n() citește un număr întreg de la tastatură și îl verifică să fie între 2 și 1000. Dacă numărul este corect, acesta este returnat, altfel se afișează un mesaj de eroare și se începe din nou citirea.
Funcția citeste_valori(n) citește n valori întregi de la tastatură și le stochează într-o listă. Fiecare valoare este verificată să fie mai mică sau egală cu 2000000000. Dacă valoarea este corectă, aceasta este adăugată la lista de valori. Dacă nu, se afișează un mesaj de eroare și se cere o nouă valoare.
Funcția sortare(n, v) sortează lista v de valori în ordine descrescătoare utilizând algoritmul de sortare a bulelor. Lista sortată este returnată.
Funcția numere_maxime(valori) primește lista de valori și găsește cele două valori maxime utilizând funcția sortare(n, v) pentru a sorta lista în ordine descrescătoare. După sortare, primele două valori din lista sortată sunt returnate.

În funcția principală (_main_), se citesc numărul de valori și valorile într-o listă folosind funcțiile citeste_n() și citeste_valori(n). Apoi, cele două numere maxime sunt găsite utilizând funcția numere_maxime(valori) și sunt afișate pe ecran.