3062 - Vas: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
Line 30: | Line 30: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#3062 | #3062 | ||
def | def time_to_reach_minimum_water_level(initial_water_amount, time_per_evaporation, minimum_water_amount): | ||
time_elapsed = 0 | |||
while | while initial_water_amount > minimum_water_amount: | ||
initial_water_amount -= initial_water_amount/4 # amount evaporated | |||
time_elapsed += time_per_evaporation | |||
return | return time_elapsed | ||
def | def validate_input(initial_water_amount, time_per_evaporation, minimum_water_amount): | ||
if not (1 <= | if not (1 <= initial_water_amount <= 1000000000 and 1 <= time_per_evaporation <= 1000000000 and 1 <= minimum_water_amount <= 1000000000): | ||
return False | return False | ||
return True | return True | ||
Line 45: | Line 45: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
initial_water_amount = int(input("Introduceti cantitatea initiala de apa (in litri): ")) | |||
time_per_evaporation = int(input("Introduceti intervalul de timp (in minute): ")) | |||
minimum_water_amount = int(input("Introduceti cantitatea minima de apa ramasa in vas (in litri): ")) | |||
if not | if not validate_input(initial_water_amount, time_per_evaporation, minimum_water_amount): | ||
print("Datele nu corespund restricțiilor impuse.") | print("Datele nu corespund restricțiilor impuse.") | ||
else: | else: | ||
time_elapsed = time_to_reach_minimum_water_level(initial_water_amount, time_per_evaporation, minimum_water_amount) | |||
print("Datele sunt introduse corect.") | print("Datele sunt introduse corect.") | ||
print("Dupa", | print("Dupa", time_elapsed, "minute vor ramane in vas cel mult", minimum_water_amount, "litri de apa.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 09:29, 28 April 2023
Sursa: [1]
Cerinţa
Într-un vas sunt x litri de apă (x>0). După fiecare t minute, un sfert din cantitatea de apă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult y litri de apă.
Date de intrare
Programul citește de la tastatură cantitatea initiala de apa (in litri), intervalul de timp (in minute), cantitatea minima de apa ramasa in vas (in litri).
Date de ieșire
Programul va afișa pe ecran un număr natural Introduceti cantitatea initiala de apa (in litri): , Introduceti intervalul de timp (in minute): ,Introduceti cantitatea minima de apa ramasa in vas (in litri): litri de apă.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează după câte minute vor rămâne în vas cel mult y litri de apă.
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Restricţii şi precizări
1 ≤ cantitatea initiala de apa (in litri),intervalul de timp (in minute),cantitatea minima de apa ramasa in vas (in litri) ≤ 1.000.000.000
Exemplul 1
- Datele de intrare
- Introduceti cantitatea initiala de apa (in litri): 100
- Introduceti intervalul de timp (in minute): 15
- Introduceti cantitatea minima de apa ramasa in vas (in litri): 20
- Datele de ieșire
- Datele sunt introduse corect.
- Dupa 90 minute vor ramane in vas cel mult 20 litri de apa.
Rezolvare
<syntaxhighlight lang="python" line>
- 3062
def time_to_reach_minimum_water_level(initial_water_amount, time_per_evaporation, minimum_water_amount):
time_elapsed = 0 while initial_water_amount > minimum_water_amount: initial_water_amount -= initial_water_amount/4 # amount evaporated time_elapsed += time_per_evaporation return time_elapsed
def validate_input(initial_water_amount, time_per_evaporation, minimum_water_amount):
if not (1 <= initial_water_amount <= 1000000000 and 1 <= time_per_evaporation <= 1000000000 and 1 <= minimum_water_amount <= 1000000000): return False return True
if __name__ == '__main__':
initial_water_amount = int(input("Introduceti cantitatea initiala de apa (in litri): ")) time_per_evaporation = int(input("Introduceti intervalul de timp (in minute): ")) minimum_water_amount = int(input("Introduceti cantitatea minima de apa ramasa in vas (in litri): "))
if not validate_input(initial_water_amount, time_per_evaporation, minimum_water_amount): print("Datele nu corespund restricțiilor impuse.") else: time_elapsed = time_to_reach_minimum_water_level(initial_water_amount, time_per_evaporation, minimum_water_amount) print("Datele sunt introduse corect.") print("Dupa", time_elapsed, "minute vor ramane in vas cel mult", minimum_water_amount, "litri de apa.")
</syntaxhighlight>
Explicatie cod:
Această implementare Python definește o funcție numită cantitatea_de_apa_ramasa care primește trei parametri: x, t și y. Parametrul x reprezintă cantitatea inițială de apă din vas (în litri), t reprezintă intervalul de timp (în minute) și y reprezintă cantitatea minimă de apă care trebuie să rămână în vas (în litri).
Funcția cantitatea_de_apa_ramasa calculează timpul necesar până când cantitatea de apă din vas scade sub cantitatea minimă (y) și returnează acest timp exprimat în minute.
De asemenea, există o funcție suplimentară numită validare_input care primește aceiași parametri ca și cantitatea_de_apa_ramasa și validează dacă valorile lor se încadrează în intervalul permis (1 <= x, t, y <= 1.000.000.000). În cazul în care valorile nu sunt valide, funcția returnează False, altfel returnează True.
Funcția principală main citește valorile pentru x, t și y de la utilizator prin intermediul funcției input, validează valorile prin apelul funcției validare_input și afișează timpul necesar pentru ca cantitatea de apă din vas să scadă sub cantitatea minimă.