3062 - Vas: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp] == Cerinţa == Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == 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 prog...
 
Sinn Erich (talk | contribs)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
Î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 ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
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):
def validate_input(initial_water_amount, time_per_evaporation, minimum_water_amount):
     product = 1
     if not (1 <= initial_water_amount <= 1000000000 and 1 <= time_per_evaporation <= 1000000000 and 1 <= minimum_water_amount <= 1000000000):
    for number in numbers:
        product *= number
    return product
 
 
def validare_numar(n):
    if n < 1 or n > 10:
         return False
         return False
     return True
     return True
Line 51: 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.