3062 - Vas: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(16 intermediate revisions by the same user not shown)
Line 5: Line 5:


== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numerele naturale '''x, t și y.'''
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 ==  
== Date de ieșire ==  
Programul va afișa pe ecran,  mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
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, programul va rula.
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 cazul în care datele nu respectă restricțiile, se va afișa pe ecran: ''' "Datele nu corespund restricțiilor impuse.".'''
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
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 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 4
: Introduceti cantitatea initiala de apa (in litri): 100
; Ieșire
: Introduceti intervalul de timp (in minute): 15
: Datele corespund cerințelor.
: Introduceti cantitatea minima de apa ramasa in vas (in litri): 20
: 576
; Datele de ieșire
: Datele sunt introduse corect.
: Dupa 90 minute vor ramane in vas cel mult 20 litri de apa.
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#3062
def patrate_perfecte(n):
def time_to_reach_minimum_water_level(initial_water_amount, time_per_evaporation, minimum_water_amount):
     patrate = []
     time_elapsed = 0
    i = 1
     while initial_water_amount > minimum_water_amount:
     while len(patrate) < n:
         initial_water_amount -= initial_water_amount/4  # amount evaporated
         patrat = i * i
         time_elapsed += time_per_evaporation
        patrate.append(patrat)
     return time_elapsed
         i += 1
    return patrate
 
 
def calculeaza(numbers):
    product = 1
    for number in numbers:
        product *= number
     return product




def validare_numar(n):
def validate_input(initial_water_amount, time_per_evaporation, minimum_water_amount):
     if n < 1 or n > 10:
     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 54: Line 45:


if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introduceți numărul n: "))
     initial_water_amount = int(input("Introduceti cantitatea initiala de apa (in litri): "))
     if not validare_numar(n):
    time_per_evaporation = int(input("Introduceti intervalul de timp (in minute): "))
         print("Datele introduse nu corespund cerintelor.")
    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:
     else:
         squares = patrate_perfecte(n)
         time_elapsed = time_to_reach_minimum_water_level(initial_water_amount, time_per_evaporation, minimum_water_amount)
        product = calculeaza(squares)
         print("Datele sunt introduse corect.")
         print("Datele introduse corespund cerintelor.")
         print("Dupa", time_elapsed, "minute vor ramane in vas cel mult", minimum_water_amount, "litri de apa.")
         print(product)




</syntaxhighlight>
</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.

Latest revision as of 09:35, 28 April 2023

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.