3814 - Arie Patrulater Inscriptibil
Cerinţa
Se dau lungimile laturilor patrulaterului inscriptibil ABCD. Aflati aria acestuia.
Date de intrare
Programul citește de la tastatură lungimile laturilor AB, BC, CD, AD.
Date de ieşire
Programul va afișa pe ecran aria patrulaterului, cu 3 zecimale exacte.
Restricții și precizări
- 1 ⩽ AB, BC, CD, AD ⩽ 1000
Exemplul 1
- Intrare
- 13
- 14
- 3
- 13
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 100.123
Exemplul 2
- Intrare
- 13
- 14
- 3
- n
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line> def calculeaza_radical(n):
"""Calculează rădăcina pătrată a unui număr.""" # ridicăm numărul la puterea 0.5 pentru a calcula rădăcina pătrată return n ** 0.5
def valideaza_date(l_1, l_2, l_3, l_4):
"""Verifică dacă datele de intrare sunt valide.""" try: # încercăm să convertim datele de intrare la float l_1 = float(l_1) l_2 = float(l_2) l_3 = float(l_3) l_4 = float(l_4) # dacă conversia a reușit, afișăm un mesaj de succes print("Datele de intrare corespund restricțiilor impuse.") return l_1, l_2, l_3, l_4 except ValueError: # dacă conversia a eșuat, afișăm un mesaj de eroare print("Datele de intrare nu corespund restricțiilor impuse.") return None
def calculeaza_arie_perimetru(l_1, l_2, l_3, l_4):
"""Calculează aria și perimetrul.""" # Semiperimetrul s_perimetru = (l_1 + l_2 + l_3 + l_4) / 2
# Aria patrulaterului aria = calculeaza_radical((s_perimetru - l_1) * (s_perimetru - l_2) * (s_perimetru - l_3) * (s_perimetru - l_4))
# Rotunjim suma obținută la 3 zecimale return round(aria, 3)
- Testăm problema
if __name__ == "__main__":
# citim datele de intrare de la utilizator lat_1 = input() lat_2 = input() lat_3 = input() lat_4 = input() # validăm datele de intrare date = valideaza_date(lat_1, lat_2, lat_3, lat_4) # dacă datele sunt valide, calculăm aria și perimetrul if date is not None: print(calculeaza_arie_perimetru(*date))
</syntaxhighlight>