3166 - Vas 1: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
Line 36: Line 36:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#3166
#3166
def calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate):
def calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):
     remaining_water = initial_water
     remaining_water = apa_initiala
     elapsed_time = 0
     elapsed_time = 0
     while remaining_water > minimum_water:
     while remaining_water>rata_evaporare:
         evaporated_water = remaining_water / evaporation_rate
         evaporated_water = remaining_water / rata_evaporare
         remaining_water -= evaporated_water
         remaining_water -= evaporated_water
         elapsed_time += evaporation_time
         elapsed_time += timp_evaporare
     return elapsed_time
     return elapsed_time


def validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):
def validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):
     if not (1 <= initial_water <= 1000000000 and 1 <= evaporation_time <= 1000000000 and 1 <= minimum_water <= 1000000000 and 2 <= evaporation_rate <= 100):
     if not (1 <= apa_initiala <= 1000000000 and 1 <= timp_evaporare <= 1000000000 and 1 <= apa_minima <= 1000000000 and 2 <= rata_evaporare <= 100):
         return False
         return False
     return True
     return True


if __name__ == '__main__':
if __name__ == '__main__':
     initial_water, evaporation_time, minimum_water, evaporation_rate = map(int, input("Introduceti X T Y I, separate prin spatiu: ").split())
     apa_initiala, timp_evaporare, apa_minima, rata_evaporare = map(int, input("Introduceti X T Y I, separate prin spatiu: ").split())
     if not validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):
     if not validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):
         print("Datele introduse nu sunt valide.")
         print("Datele introduse nu corespund restrictiilor impuse.")
     else:
     else:
         elapsed_time = calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate)
         elapsed_time = calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare)
         print("Datele introduse sunt valide.")
         print("Datele sunt introduse corect.")
         print("Dupa", elapsed_time, "minute, vor ramane in vas cel mult", minimum_water, "litri de apa.")
         print("Dupa", elapsed_time, "minute, vor ramane in vas cel mult", apa_minima, "liapa_initiala")
 
</syntaxhighlight>
</syntaxhighlight>


'''Explicatie cod:'''
'''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.
Acest cod are rolul de a calcula timpul necesar pentru ca cantitatea de apa dintr-un vas sa ajunga la o cantitate minima dupa evaporare, pe baza datelor de intrare: cantitatea initiala de apa din vas, timpul de evaporare pentru fiecare unitate de apa, cantitatea minima de apa pe care dorim sa o lasam in vas si rata de evaporare.
 
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 calculate_remaining_water_time primește ca parametri cantitatea inițială de apă, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Ea calculează timpul necesar pentru ca cantitatea de apă din vas să ajungă la cantitatea minimă prin scăderea continuă a cantității de apă evaporată de rata 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.
Funcția validate_input primește ca parametri datele de intrare și returnează True dacă acestea respectă restricțiile impuse (cantitățile de apă trebuie să fie între 1 și 1.000.000.000, timpul de evaporare între 1 și 1.000.000.000, cantitatea minimă de apă între 1 și 1.000.000.000 și rata de evaporare între 2 și 100), altfel returnează False.


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.
În secțiunea principală, se cere utilizatorului să introducă cantitatea inițială de apă din vas, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Se validează datele de intrare cu ajutorul funcției validate_input, iar dacă acestea sunt valide, se calculează timpul necesar pentru evaporare cu ajutorul funcției calculate_remaining_water_time și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.

Revision as of 09:31, 29 April 2023

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,timp_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>

  1. 3166

def calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):

   remaining_water = apa_initiala
   elapsed_time = 0
   while remaining_water>rata_evaporare:
       evaporated_water = remaining_water / rata_evaporare
       remaining_water -= evaporated_water
       elapsed_time += timp_evaporare
   return elapsed_time

def validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):

   if not (1 <= apa_initiala <= 1000000000 and 1 <= timp_evaporare <= 1000000000 and 1 <= apa_minima <= 1000000000 and 2 <= rata_evaporare <= 100):
       return False
   return True

if __name__ == '__main__':

   apa_initiala, timp_evaporare, apa_minima, rata_evaporare = map(int, input("Introduceti X T Y I, separate prin spatiu: ").split())
   if not validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):
       print("Datele introduse nu corespund restrictiilor impuse.")
   else:
       elapsed_time = calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare)
       print("Datele sunt introduse corect.")
       print("Dupa", elapsed_time, "minute, vor ramane in vas cel mult", apa_minima, "liapa_initiala")

</syntaxhighlight>

Explicatie cod:

Acest cod are rolul de a calcula timpul necesar pentru ca cantitatea de apa dintr-un vas sa ajunga la o cantitate minima dupa evaporare, pe baza datelor de intrare: cantitatea initiala de apa din vas, timpul de evaporare pentru fiecare unitate de apa, cantitatea minima de apa pe care dorim sa o lasam in vas si rata de evaporare.

Funcția calculate_remaining_water_time primește ca parametri cantitatea inițială de apă, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Ea calculează timpul necesar pentru ca cantitatea de apă din vas să ajungă la cantitatea minimă prin scăderea continuă a cantității de apă evaporată de rata de evaporare.

Funcția validate_input primește ca parametri datele de intrare și returnează True dacă acestea respectă restricțiile impuse (cantitățile de apă trebuie să fie între 1 și 1.000.000.000, timpul de evaporare între 1 și 1.000.000.000, cantitatea minimă de apă între 1 și 1.000.000.000 și rata de evaporare între 2 și 100), altfel returnează False.

În secțiunea principală, se cere utilizatorului să introducă cantitatea inițială de apă din vas, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Se validează datele de intrare cu ajutorul funcției validate_input, iar dacă acestea sunt valide, se calculează timpul necesar pentru evaporare cu ajutorul funcției calculate_remaining_water_time și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.