3811 - Bisectoare1

De la Universitas MediaWiki

Cerinţa

Se dau lungimile laturilor unui triunghi ABC. Aflati lungimile bisectoarelor duse din C, A, B.

Date de intrare

Programul citește de la tastatură numerele a, b, c, reprezentand lungimile laturilor AB, BC, AC.

Date de ieșire

Programul va afișa pe ecran lungimile bisectoarelor cu 2 zecimale exacte daca triunghiul este valid, altfel se afiseaza mesajul Imposibil. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu respecta cerintele impuse." , iar daca se indeplinesc, se afiseaza mesajul "Datele de intrare respecta cerintele impuse."

Restricţii şi precizări

  • 1 ⩽ a, b, c ⩽ 100

Exemplul 1

Intrare
3
5
4
Ieșire
Datele de intrare respectă cerințele impuse.
3.20
2.14
2.54



Exemplul 2

Intrare
0
1
2
Ieșire
Imposibil
Datele de intrare nu respectă cerințele impuse.

Rezolvare

def citeste_laturi():
    a = float(input())  # Citirea valorii pentru latura AB
    b = float(input())  # Citirea valorii pentru latura BC
    c = float(input())  # Citirea valorii pentru latura AC
    return a, b, c

def sunt_lungimi_valide(a, b, c):
    return 1 <= a <= 100 and 1 <= b <= 100 and 1 <= c <= 100

def este_triunghi_valid(a, b, c):
    return a + b > c and a + c > b and b + c > a

def calculeaza_bisectoare(a, b, c):
    s = (a + b + c) / 2
    bisectoare_c = 2 * (s * b * c / (2 * s * s - b * b)) ** 0.5
    bisectoare_a = 2 * (s * a * c / (2 * s * s - a * a)) ** 0.5
    bisectoare_b = 2 * (s * a * b / (2 * s * s - c * c)) ** 0.5
    return bisectoare_c, bisectoare_a, bisectoare_b

if __name__ == "__main__":
    a, b, c = citeste_laturi()

    if sunt_lungimi_valide(a, b, c) and este_triunghi_valid(a, b, c):
        bisectoare_c, bisectoare_a, bisectoare_b = calculeaza_bisectoare(a, b, c)
        print("{:.2f} {:.2f} {:.2f}".format(bisectoare_c, bisectoare_a, bisectoare_b))
        print("Datele de intrare respectă cerințele impuse.")
    else:
        print("Imposibil")
        print("Datele de intrare nu respectă cerințele impuse.")

Explicație rezolvare

Primul pas implică citirea lungimilor laturilor triunghiului (a, b, c) de la tastatură Funcția sunt_lungimi_valide(a, b, c) returnează True dacă lungimile sunt valide și False în caz contrar. Funcția este_triunghi_valid (a, b, c) returnează True dacă acestea formează un triunghi valid și False în caz contrar. Pasul 4 presupune calculul lungimilor bisectoarelor și le returnează sub formă de tuplă (bisectoare_c, bisectoare_a, bisectoare_b). Ultimul pas implică afișarea lungimilor bisectoarelor cu 2 zecimale exacte.