0057 - N Suma: Difference between revisions
Dragos1234 (talk | contribs) |
Dragos1234 (talk | contribs) |
||
Line 39: | Line 39: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | #0057 | ||
def validate_input(n, numbers): | def validate_input(n, numbers): | ||
if | if n < 0 or n > 1000: | ||
return False | |||
for num in numbers: | for num in numbers: | ||
if | if abs(num) >= 1000: | ||
return False | |||
return True | |||
def | def n_suma(): | ||
with open( | with open("n_suma.in", "r") as istr, open("n_suma.out", "w") as ostr: | ||
n = int( | n = int(istr.readline()) | ||
numbers = | numbers = [] | ||
for i in range(1, n + 1): | |||
num = int(istr.readline()) | |||
numbers.append(num) | |||
if not validate_input(n, numbers): | |||
ostr.write("Date de intrare invalide") | |||
return | |||
s = sum(numbers) | |||
ostr.write(str(s)) | |||
n_suma() | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 17:39, 2 April 2023
Sursa: [1]
Cerinţa
Să se scrie un program care să citească n numere întregi și să calculeze suma lor.
Date de intrare
Fișierul de intrare n_suma.in conține pe prima linie numărul n, iar pe următoarele linii n numere întregi.
Date de ieșire
Fișierul de ieșire relativ.out va conține pe prima linie numărul k, reprezentând numărul termenilor din şir care sunt minime relative, iar pe a doua linie maximul sumei elementelor dintr-o secvenţă cuprinsă între două minime relative consecutive din şir, inclusiv acestea.
Restricţii şi precizări
- 0 < n < 1000
- valoarea absolută a celor n numere citite va fi mai mică decât 1000.
Exemplul 1
- Intrare
- 5
- 1
- 2
- 3
- 4
- 5
- Ieșire
- 15
Exemplul 2
- Intrare
- 3
- 3
- 5
- 9
- 2
- 7
- Ieșire
- 17
Rezolvare
<syntaxhighlight lang="python" line>
- 0057
def validate_input(n, numbers):
if n < 0 or n > 1000: return False for num in numbers: if abs(num) >= 1000: return False return True
def n_suma():
with open("n_suma.in", "r") as istr, open("n_suma.out", "w") as ostr: n = int(istr.readline()) numbers = [] for i in range(1, n + 1): num = int(istr.readline()) numbers.append(num)
if not validate_input(n, numbers): ostr.write("Date de intrare invalide") return
s = sum(numbers) ostr.write(str(s))
n_suma()
</syntaxhighlight>
Explicatie rezolvare
Acest program citeste un numar intreg n din fisierul n_suma.in si o lista de numere intregi numbers de lungime n, apoi calculeaza suma tuturor numerelor din lista si o scrie in fisierul n_suma.out.
Inainte de a efectua calculele, programul verifica daca datele de intrare sunt valide, folosind functia validate_input(n, numbers). Aceasta functie returneaza False daca n este negativ sau depaseste 1000 sau daca orice element din numbers are o valoare absoluta mai mare sau egala cu 1000. Daca datele de intrare nu sunt valide, programul scrie mesajul "Date de intrare invalide" in fisierul "n_suma.out" si se opreste prin instructiunea return.
Daca datele de intrare sunt valide, programul calculeaza suma elementelor din numbers cu functia sum() si scrie valoarea in fisierul n_suma.out cu ostr.write().