0073 – FSum Vec Min

From Bitnami MediaWiki

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

<syntaxhighlight lang="python" line="1"> 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)


</syntaxhighlight>

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.