3166 - Vas 1
Sursa: [1]
Cerinţa
Într-un vas sunt apa_initiala litri de apă (apa_initiala>0). După fiecare t minute, apa_initiala\rata_evaporare din cantitatea de apă rămasă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult apa_minima litri de apă.
Date de intrare
Programul citește de la tastatură patru numere naturale apa_initiala,timp_evaporare,apa_minima,rata_evaporare.
Date de ieșire
Programul va afișa pe ecran numărul de minute necesare astfel încât in vas sa rămână cel mult apa_minima litri de apa.
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 apa_minima litri de apă.
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Restricţii şi precizări
1 ≤ apa_initiala,timpul_evaporare,apa_minima ≤ 1.000.000.000
2 ≤ rata_evaporare ≤ 100
Exemplul 1
- Datele de intrare
- Apa initiala este:
- 100
- Timpul de evaporare este:
- 15
- Apa minima este:
- 20
- Rata de evaporare este:
- 5
- Datele de ieșire
- Datele sunt introduse corect.
- Dupa 120 minute vor ramane in vas cel mult 20 litri de apa.
Rezolvare
<syntaxhighlight lang="python" line>
- 3166
def calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate):
remaining_water = initial_water elapsed_time = 0 while remaining_water > minimum_water: evaporated_water = remaining_water / evaporation_rate remaining_water -= evaporated_water elapsed_time += evaporation_time return elapsed_time
def validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):
if not (1 <= initial_water <= 1000000000 and 1 <= evaporation_time <= 1000000000 and 1 <= minimum_water <= 1000000000 and 2 <= evaporation_rate <= 100): return False return True
if __name__ == '__main__':
initial_water, evaporation_time, minimum_water, evaporation_rate = map(int, input("Introduceti X T Y I, separate prin spatiu: ").split()) if not validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate): print("Datele introduse nu sunt valide.") else: elapsed_time = calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate) print("Datele introduse sunt valide.") print("Dupa", elapsed_time, "minute, vor ramane in vas cel mult", minimum_water, "litri de apa.")
</syntaxhighlight>
Explicatie cod:
Acest cod este un program Python care calculează timpul rămas până când va rămâne o anumită cantitate minimă de apă într-un vas, ținând cont de timpul de evaporare și de rata de evaporare a apei din vas.
Funcția calculate_remaining_water_time() primește patru argumente: initial_water (cantitatea inițială de apă din vas), evaporation_time (timpul necesar evaporării unei unități de apă), minimum_water (cantitatea minimă de apă care trebuie să rămână în vas) și evaporation_rate (rata de evaporare a apei din vas).
Funcția utilizează o buclă while pentru a calcula timpul rămas până când cantitatea de apă din vas ajunge la valoarea minimă specificată. În fiecare iterație a buclei, se calculează cantitatea de apă care s-a evaporat într-un interval de timp și se actualizează cantitatea rămasă în vas. Variabila elapsed_time este folosită pentru a calcula timpul total de evaporare.
Funcția validate_input() este utilizată pentru a verifica dacă argumentele primite de calculate_remaining_water_time() sunt valide. Dacă nu sunt valide, funcția returnează False, altfel returnează True.
Blocul if __name__ == '__main__': este folosit pentru a verifica dacă acest script este rulat direct sau importat ca modul într-un alt script Python. Dacă este rulat direct, utilizatorul va fi rugat să introducă valorile pentru initial_water, evaporation_time, minimum_water și evaporation_rate. Aceste valori sunt separate prin spațiu și sunt convertite la integer folosind funcția map(). Dacă valorile introduse sunt invalide, este afișat un mesaj corespunzător. Altfel, timpul rămas până când va rămâne cantitatea minimă de apă este calculat folosind funcția calculate_remaining_water_time(), iar rezultatul este afișat.