3973 - Logaritm: Difference between revisions
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 | |||
; Ieșire | ; Ieșire | ||
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 | |||
def ln(x): | def ln(x): | ||
Line 39: | Line 45: | ||
return round((low + high) / 2, 6) | return round((low + high) / 2, 6) | ||
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>