3973 - Logaritm: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Dându-se un număr real '''x''', să se scrie un program care calculează '''ln(x)''' cu '''6''' zecimale exacte. == Date de intrare == Programul citește de la tastatură numărul real '''x'''. == Date de ieșire == Programul va afișa pe ecran rezultatul cu '''6''' zecimale exacte. == Restricţii şi precizări == * 1 ⩽ x ⩽ 2.000.000.000. * '''x''' va avea cel mult '''6''' zecimale. * Nu se vor folosi funcțiile logaritmice ale limbajului C++ == Exem...
 
No edit summary
 
Line 10: Line 10:
* '''x''' va avea cel mult '''6''' zecimale.
* '''x''' va avea cel mult '''6''' zecimale.
* Nu se vor folosi funcțiile logaritmice ale limbajului C++
* Nu se vor folosi funcțiile logaritmice ale limbajului C++
== Exemplu ==
== Exemplu 1==
; Intrare
; Intrare
: 5.12
5.12
; Ieșire
; Ieșire
: 1.633154
Datele de intrare corespund restrictiilor impuse
1.633154
== Exemplu 2==
; Intrare
-1
; Ieșire
Datele de intrare nu corespund restrictiilor impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
import math


import math


def ln(x):
def ln(x):
Line 39: Line 45:
     return round((low + high) / 2, 6)
     return round((low + high) / 2, 6)


# Citirea datelor de intrare
x = float(input())


# Calcularea și afișarea rezultatului
def validare(x):
print(ln(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>
</syntaxhighlight>

Latest revision as of 16:51, 12 December 2023

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>