3260 - Invers: Difference between revisions
No edit summary |
|||
(One intermediate revision 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 | 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 == | == Date de intrare == | ||
Line 20: | Line 20: | ||
Ieșire: | Ieșire: | ||
0.35083179 | 0.35083179 | ||
== Explicație == | |||
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 == | == Exemplul 2 == | ||
Line 26: | Line 39: | ||
Ieșire | Ieșire | ||
Valoarea lui y nu respectă restricțiile.<syntaxhighlight lang="python3" line="1"> | 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>