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
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++
Exemplu 1
- Intrare
5.12
- Ieșire
Datele de intrare corespund restrictiilor impuse 1.633154
Exemplu 2
- Intrare
-1
- Ieșire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare
<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>