3260 - Invers: Difference between revisions

From Bitnami MediaWiki
Gabi (talk | contribs)
Pagină nouă: == Cerința == Veșnicul Gigel vrea să dea la Facultatea de Informatică din Iași pentru că e #ceaMaiTare. De asta s-a apucat de probleme pe pbinfo și a dat peste următoarea problema ce i-a plăcut atât de mult încât vă provoacă și pe voi să o rezolvați: Se dă funcția  și o valoare . Știind că funcția este strict crescătoare pe intervalul , se cere să se gasească pentru ce  avem că  (aproximare cu 8 zecimale). == Date de intrare == Se citește de l...
 
Gabii (talk | contribs)
No edit summary
 
(3 intermediate revisions by one other user not shown)
Line 2: Line 2:
Veșnicul Gigel vrea să dea la Facultatea de Informatică din Iași pentru că e #ceaMaiTare. De asta s-a apucat de probleme pe pbinfo și a dat peste următoarea problema ce i-a plăcut atât de mult încât vă provoacă și pe voi să o rezolvați:
Veșnicul Gigel vrea să dea la Facultatea de Informatică din Iași pentru că e #ceaMaiTare. De asta s-a apucat de probleme pe pbinfo și a dat peste următoarea problema ce i-a plăcut atât de mult încât vă provoacă și pe voi să o rezolvați:


Se dă funcția  și o valoare . Știind că funcția este strict crescătoare pe intervalul , se cere să se gasească pentru ce  avem  (aproximare cu 8 zecimale).
Se dă funcția f(x)=sin(x) + sin(2*x) + x și o valoare y. Știind că funcția este strict crescătoare pe intervalul [0,1), se cere să se gasească pentru ce  x∈[0,1) avem f(x)≈y (aproximare cu 8 zecimale).


== Date de intrare ==
== Date de intrare ==
Line 14: Line 14:
* pentru orice 0<=y<2.7 vom avea ca 0<=x<1  
* pentru orice 0<=y<2.7 vom avea ca 0<=x<1  


== Exemplu 1 ==
== Exemplul 1 ==
Intrare 1.34
Intrare:
1.34


Ieșire 0.35083179
Ieșire:
0.35083179


== Exemplu 2 ==
== Explicație ==
Intrare 3
Considerand f(x)=sin(x)+sin(2∗x)+x  avem ca:


Ieșire Valoarea lui y nu respectă restricțiile.<syntaxhighlight lang="python3" line="1">
• f(0.35083177) = 1.33999994
 
• f(0.35083178) = 1.33999998
 
• f(0.35083179) = 1.34000001
 
• f(0.35083180) = 1.34000005
 
După cum se observă, valoarea cea mai apropiată de  în aproximarea cu 8 zecimale este , valoare ce este considerată a fi corectă (deși imprecisă, este cea mai apropiată valoare ce ar putea fi dată lui x pentru ca ).
 
== Exemplul 2 ==
Intrare
3
 
Ieșire
Valoarea lui y nu respectă restricțiile.
<syntaxhighlight lang="python3" line="1">
import math
import math



Latest revision as of 20:33, 9 December 2023

Cerința[edit | edit source]

Veșnicul Gigel vrea să dea la Facultatea de Informatică din Iași pentru că e #ceaMaiTare. De asta s-a apucat de probleme pe pbinfo și a dat peste următoarea problema ce i-a plăcut atât de mult încât vă provoacă și pe voi să o rezolvați:

Se dă funcția f(x)=sin(x) + sin(2*x) + x și o valoare y. Știind că funcția este strict crescătoare pe intervalul [0,1), se cere să se gasească pentru ce  x∈[0,1) avem că f(x)≈y (aproximare cu 8 zecimale).

Date de intrare[edit | edit source]

Se citește de la tastatura valoarea .

Date de ieșire[edit | edit source]

0<= x <1 afișat cu o aproximare de 8 zecimale precise.

Restricții și precizări[edit | edit source]

  • pentru orice 0<=y<2.7 vom avea ca 0<=x<1

Exemplul 1[edit | edit source]

Intrare:

1.34

Ieșire:

0.35083179

Explicație[edit | edit source]

Considerand f(x)=sin(x)+sin(2∗x)+x  avem ca:

• f(0.35083177) = 1.33999994

• f(0.35083178) = 1.33999998

• f(0.35083179) = 1.34000001

• f(0.35083180) = 1.34000005

După cum se observă, valoarea cea mai apropiată de  în aproximarea cu 8 zecimale este , valoare ce este considerată a fi corectă (deși imprecisă, este cea mai apropiată valoare ce ar putea fi dată lui x pentru ca ).

Exemplul 2[edit | edit source]

Intrare

3

Ieșire

Valoarea lui y nu respectă restricțiile.

<syntaxhighlight lang="python3" line="1"> import math

def f(x):

   return math.sin(x) + math.sin(2*x) + x

def verifica_restrictie(y):

   return 0 <= y <= 2.7

def aproximare_bisectie(y):

   epsilon = 1e-8  # Precizia dorită
   a, b = 0, 1  # Intervalul [0, 1)
   while b - a > epsilon:
       mid = (a + b) / 2
       if f(mid) < y:
           a = mid
       else:
           b = mid
   return (a + b) / 2

def main():

   y = float(input("Introduceți valoarea y: "))
   
   if verifica_restrictie(y):
       rezultat = aproximare_bisectie(y)
       print(f"{rezultat:.8f}")
   else:
       print("Valoarea lui y nu respectă restricțiile.")

if __name__ == "__main__":

   main()

</syntaxhighlight>