0073 – FSum Vec Min

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: FSum Vec Min


Cerinţă

Se dă un șir cu n elemente întregi. Programul returnează suma celor mai mici m elemente din tabloul de n elemente.

Date de intrare

Programul va citi de la tastatură două valori n m, cu semnificația precizată, 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 suma primelor m elemente cele mai mici ale șirului. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

Restricţii şi precizări

  • 0 < m <= n <= 100
  • valorile elementelor șirului vor fi cuprinse între -1.000.000 și 1.000.000

Exemple

Exemplul 1

Intrare
Introduceti numarul de elemente: 8
Introduceti numarul m: 3
Introduceti 8 numere separate prin spatiu:1321 123 22 312 1 12 2 1
Ieșire
Datele introduse sunt corecte!
Suma este: 4

Exemplul 2

Intrare
Introduceti numarul de elemente: 123
Ieșire
Datele introduse sunt incorecte!

Exemplul 3

Intrare
Introduceti numarul de elemente: 5
Introduceti numarul m: 6
Ieșire
Datele introduse sunt incorecte!

Rezolvare

def is_integer(value):
    return value.isdigit()


def verificare_nr_elemente(n):
    if is_integer(n):
        if 1 <= int(n) <= 1500:
            return n
        else:
            print("Datele introduse sunt incorecte!")
            exit()
    else:
        print("Datele introduse sunt incorecte!")
        exit()


def verificare_pozitie_de_sters(p, n):
    if is_integer(p):
        if 1 <= int(p) <= int(n):
            return p
        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 -1000000 <= int(i) <= 1000000:
                    continue
                else:
                    print("Datele introduse sunt incorecte!")
                    exit()
            else:
                print("Datele introduse sunt incorecte!")
                exit()


def eliminare_elem_p(vector, p):
    print("Datele introduse sunt corecte!")
    vector.pop(int(p) - 1)
    print("Noul vector este:", vector)


if __name__ == '__main__':
    n = input("Introduceti numarul de elemente: ")
    verificare_nr_elemente(n)
    p = input("Introduceti pozitia de sters: ")
    verificare_pozitie_de_sters(p, n)
    elem = input(f"Introduceti {n} elem separate prin spatiu:").split()
    verificare_vector(n, elem)
    eliminare_elem_p(elem, p)

Explicație rezolvare

Acest program preia un număr n de elemente, un număr m și n numere separate prin spațiu. Apoi, calculează suma celor mai mici m numere dintre cele n numere introduse. Programul verifică și validează datele introduse înainte de a efectua operațiunea de calcul a sumei.

  1. is_integer(value): Verifică dacă valoarea introdusă este un număr întreg.
  2. verificare_nr_elemente(n): Verifică dacă n este un număr întreg între 0 și 100. Dacă nu, programul se oprește.
  3. verificare_m(m, n): Verifică dacă m este un număr întreg între 1 și n. Dacă nu, programul se oprește.
  4. verificare_vector(n, vector): Verifică dacă lungimea vectorului este egală cu n și dacă toate elementele din vector sunt numere întregi mai mici sau egale cu 10000. Dacă nu, programul se oprește.
  5. suma_celor_m_mai_mici(sir, m): Calculează suma celor mai mici m numere din lista sir și afișează suma.

În secțiunea if __name__ == '__main__', programul execută următoarele acțiuni:

  1. Preia numărul n de elemente de la utilizator și verifică dacă este valid.
  2. Preia numărul m de la utilizator și verifică dacă este valid în raport cu n.
  3. Preia n numere de la utilizator, separate prin spațiu, și verifică dacă sunt valide.
  4. Convertește elementele în numere întregi și le stochează în lista lst_int.
  5. Afișează un mesaj care indică faptul că datele introduse sunt corecte.
  6. Apelează funcția suma_celor_m_mai_mici(lst_int, m) pentru a calcula și afișa suma celor mai mici m numere din lista lst_int.