0802 – Sum Imp K

From Bitnami MediaWiki

Sursa: SumImpK


Cerinţă[edit | edit source]

Se dă un șir cu n elemente întregi. Să se facă suma primelor k numere impare din șir. Dacă nu există k elemente impare în șir se va returna un mesaj de eroare.

Date de intrare[edit | edit source]

Programul va citi de la tastatură două valori n k cu semnificația precizată, apoi n numere întregi reprezentând elementele șirului.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa suma primelor k elemente impare, dacă exsită k elemente impare în șir. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

Restricţii şi precizări[edit | edit source]

  • 2 < n < 50
  • valorile elementelor șirului vor fi < 10.000
  • 0 < k <= n

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
Introduceti numarul de elemente: 5
Introduceti 5 numere de maxim 4 cifre separate prin spatiu:1 1 1 1 1
Introduceti un nr k: 3
Ieșire
Datele introduse sunt corecte!
Suma este:  3

Exemplul 2[edit | edit source]

Intrare
Introduceti numarul de elemente: 5
Introduceti 5 numere de maxim 4 cifre separate prin spatiu:1 3 2 6 4
Introduceti un nr k: 3
Ieșire
Datele introduse sunt corecte!
Nu exista destule elemente impare

Exemplul 3[edit | edit source]

Intrare
Introduceti numarul de elemente: 5
Introduceti 5 numere de maxim 4 cifre separate prin spatiu:1 56 3 1 21
Introduceti un nr k: 6
Ieșire
Datele introduse sunt incorecte!

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def is_integer(value):

   return value.isdigit()


def verificare_nr_elemente(n):

   if is_integer(n):
       if 3 <= int(n) <= 49:
           return n
       else:
           print("Datele introduse sunt incorecte!")
           exit()
   else:
       print("Datele introduse sunt incorecte!")
       exit()


def k_valid(k, n):

   if is_integer(k):
       if int(k) <= int(n):
           return True
       else:
           print("Datele introduse sunt incorecte!")
   else:
       print("Datele introduse sunt incorecte!")


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) <= 10000:
                   continue
               else:
                   print("Datele introduse sunt incorecte!")
                   exit()
           else:
               print("Datele introduse sunt incorecte!")
               exit()


def suma_primele_k_elemente_impare(lst, k):

   count = 0
   suma = 0
   for num in lst:
       if num % 2 == 1:
           suma += num
           count += 1
       if count == int(k):
           print("Suma este: ", suma)
           exit()
   if count < int(k):
       print("Nu exista destule elemente impare")


if __name__ == '__main__':

   n = input("Introduceti numarul de elemente: ")
   verificare_nr_elemente(n)
   elem = input(f"Introduceti {n} numere de maxim 4 cifre separate prin spatiu:").split()
   verificare_vector(n, elem)
   lst_int = list(map(int, elem))
   k = input("Introduceti un nr k: ")
   k_valid(k, n)
   print("Datele introduse sunt corecte!")
   suma_primele_k_elemente_impare(lst_int, k)


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acest program preia ca intrare un număr n de elemente, n numere separate prin spațiu și un număr k. Programul calculează suma primelor k elemente impare dintre cele n numere introduse. Programul conține mai multe funcții care validează și verifică dacă datele introduse sunt corecte, înainte de a efectua operația 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 3 și 49. Dacă nu, programul se oprește.
  3. k_valid(k, n): Verifică dacă k este un număr întreg mai mic sau egal cu n. Dacă nu, afișează un mesaj de eroare.
  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_primele_k_elemente_impare(lst, k): Calculează suma primelor k elemente impare din lista lst. Dacă nu există suficiente elemente impare în lista, afișează un mesaj corespunzător.

Î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 n numere de la utilizator, separate prin spațiu, și verifică dacă sunt valide.
  3. Convertește elementele în numere întregi și le stochează în lista lst_int.
  4. Preia numărul k de la utilizator și verifică dacă este valid.
  5. Afișează un mesaj care indică faptul că datele introduse sunt corecte.
  6. Calculează și afișează suma primelor k elemente impare din lista lst_int.