0802 – Sum Imp K
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.
is_integer(value)
: Verifică dacă valoarea introdusă este un număr întreg.verificare_nr_elemente(n)
: Verifică dacăn
este un număr întreg între 3 și 49. Dacă nu, programul se oprește.k_valid(k, n)
: Verifică dacăk
este un număr întreg mai mic sau egal cun
. Dacă nu, afișează un mesaj de eroare.verificare_vector(n, vector)
: Verifică dacă lungimea vectorului este egală cun
și dacă toate elementele din vector sunt numere întregi mai mici sau egale cu 10000. Dacă nu, programul se oprește.suma_primele_k_elemente_impare(lst, k)
: Calculează suma primelork
elemente impare din listalst
. 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:
- Preia numărul
n
de elemente de la utilizator și verifică dacă este valid. - Preia
n
numere de la utilizator, separate prin spațiu, și verifică dacă sunt valide. - Convertește elementele în numere întregi și le stochează în lista
lst_int
. - Preia numărul
k
de la utilizator și verifică dacă este valid. - Afișează un mesaj care indică faptul că datele introduse sunt corecte.
- Calculează și afișează suma primelor
k
elemente impare din listalst_int
.