3973 - Logaritm

From Bitnami MediaWiki

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>