3973 - Logaritm
Cerinţa[edit | edit source]
Dându-se un număr real x, să se scrie un program care calculează ln(x) cu 6 zecimale exacte.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul real x.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran rezultatul cu 6 zecimale exacte.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ x ⩽ 2.000.000.000.
- x va avea cel mult 6 zecimale.
- Nu se vor folosi funcțiile logaritmice ale limbajului C++
Exemplu 1[edit | edit source]
- Intrare
5.12
- Ieșire
Datele de intrare corespund restrictiilor impuse 1.633154
Exemplu 2[edit | edit source]
- Intrare
-1
- Ieșire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import math
def ln(x):
# Precizia pe care o dorim epsilon = 1e-10
# Inițializăm limitele intervalului pentru metoda bisecției low = 0 high = x if x > 1 else 1
# Aplicăm metoda bisecției while high - low > epsilon: mid = (low + high) / 2 if math.exp(mid) < x: low = mid else: high = mid
# Returnăm rezultatul cu 6 zecimale exacte return round((low + high) / 2, 6)
def validare(x):
if not 1 <= x <= 2_000_000_000: return False, "Datele de intrare nu corespund restrictiilor impuse" return True, "Datele de intrare corespund restrictiilor impuse"
def main():
print("Introduceți numărul real x:") x = float(input())
valid, message = validare(x) print(message) if not valid: return
print("ln(x) calculat cu 6 zecimale exacte este:") print(ln(x))
if __name__ == "__main__":
main()
</syntaxhighlight>