3166 - Vas 1

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

Într-un vas sunt x litri de apă (x>0). După fiecare t minute, x/i din cantitatea de apă rămasă 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ă patru numere naturale x t y i.

Date de ieșire

Programul va afișa pe ecran un număr T, ce reprezintă numărul de minute necesare astfel încât in vas sa rămână cel mult y 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 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 ≤ x,t,y ≤ 1.000.000.000

2 ≤ i ≤ 100

Exemplul 1

Datele de intrare
Numerele naturale X T Y I, separate prin spatiu sunt:
100 15 20 5
Datele sunt introduse corect.
Datele de ieșire
Dupa 120 minute vor ramane in vas cel mult 20 litri de apa.


Rezolvare

#3166
def cantitatea_de_apa_ramasa(x, t, y, i):
    remaining_water = x
    minutes = 0
    while remaining_water > y:
        evaporated_water = remaining_water / i
        remaining_water -= evaporated_water
        minutes += t
    return minutes

def validare_input(x, t, y, i):
    if not (1 <= x <= 1000000000 and 1 <= t <= 1000000000 and 1 <= y <= 1000000000 and 2 <= i <= 100):
        return False
    return True

def main():
    x, t, y, i = map(int, input("Numerele naturale X T Y I, separate prin spatiu sunt: ").split())
    if not validare_input(x, t, y, i):
        print("Datele nu corespund restricțiilor impuse.")
    else:
        T = cantitatea_de_apa_ramasa(x, t, y, i)
        print("Datele sunt introduse corect.")
        print("Dupa", T, "minute vor ramane in vas cel mult", y, "litri de apa.")

if __name__ == '__main__':
    main()

Explicatie cod:

Acest cod reprezintă o soluție la o problemă care cere determinarea timpului necesar pentru ca într-un vas să rămână cel mult o anumită cantitate de apă, în condițiile în care o anumită proporție din cantitatea rămasă se evaporă la fiecare interval de timp dat.

Funcția cantitatea_de_apa_ramasa primește patru argumente: x, t, y și i, reprezentând cantitatea inițială de apă din vas, intervalul de timp la care se face evaporația, cantitatea minimă de apă ce trebuie să rămână în vas și proporția de apă care se evaporă la fiecare interval de timp.

Această funcție realizează calculele necesare pentru a determina numărul de minute necesare până când în vas va rămâne cel mult cantitatea minimă de apă y. Într-un while loop se calculează cantitatea de apă evaporată la fiecare pas de timp și se actualizează cantitatea de apă rămasă în vas prin scăderea cantității evaporate. În același timp, variabila minutes este actualizată cu intervalul de timp t. Procesul se repetă până când cantitatea de apă rămasă în vas este mai mică sau egală cu cantitatea minimă y.

Funcția validare_input verifică dacă argumentele date sunt valide, conform cerințelor problemei.

Funcția main primește de la tastatură valorile pentru x, t, y și i, le validează apelând funcția validare_input, apoi apelează funcția cantitatea_de_apa_ramasa și afișează rezultatul pe ecran. Acest cod respectă convenția de a pune codul care utilizează funcțiile definite înainte de definiția funcțiilor în sine, și utilizează construcția if __name__ == '__main__' pentru a se asigura că codul din funcția main este executat doar dacă fișierul curent este rulat ca program principal, nu dacă este importat ca modul într-un alt program.