3062 - Vas

From Bitnami MediaWiki

Sursa: [1]

Cerinţa[edit | edit source]

Î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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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:

Acesta este un program Python care calculează timpul necesar pentru evaporarea unei cantități de apă date până la atingerea unei cantități minime.

Programul este compus din două funcții: time_to_reach_minimum_water_level și validate_input.

time_to_reach_minimum_water_level primește trei argumente: initial_water_amount, time_per_evaporation și minimum_water_amount. În primul rând, initializează time_elapsed la 0, care va urmări timpul total care a trecut în timpul procesului de evaporare.

Apoi intră într-un ciclu while care continuă atâta timp cât initial_water_amount este mai mare decât minimum_water_amount. În fiecare iterație a buclei, initial_water_amount este scăzut cu o pătrime (adică initial_water_amount/4) pentru a ține cont de cantitatea de apă care s-a evaporat în intervalul de timp time_per_evaporation. De asemenea, variabila time_elapsed este crescută cu time_per_evaporation. Odată ce initial_water_amount este mai mic sau egal cu minimum_water_amount, bucla se termină și time_elapsed este returnat.

validate_input primește aceiași trei argumente ca time_to_reach_minimum_water_level și verifică dacă fiecare valoare se află între 1 și 1.000.000.000 (inclusiv). Dacă o valoare este în afara acestui interval, funcția returnează False. În caz contrar, returnează True.

În cele din urmă, în partea principală a programului, utilizatorului i se solicită să introducă cantitatea inițială de apă, intervalul de timp per evaporare și cantitatea minimă de apă. Dacă aceste intrări nu îndeplinesc condițiile necesare (verificate de validate_input), se afișează un mesaj de eroare. În caz contrar, programul apelează time_to_reach_minimum_water_level cu intrările date și afișează timpul rezultat împreună cu un mesaj de confirmare.