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.

Restricții și precizări
1 ≤ a, b, c ≤ 1000
Exemplul 1:
Intrare

3 5 4
Ieșire

4.21 2.42 3.35
Exemplul 2:
Intrare

4 5 10
Ieșire

Imposibil

-----
Cu explicații dacă se poate :)


Răspuns :

Explicatii :

1. Pentru calcularea bisectoarei folosim formula din imaginea atasata, scrisa intr-o forma in care poate fi inteleasa de computer.

2. Pentru a verifica daca triunghiul este valid verificam daca suma a oricare doua laturi e mai mare decat cea de-a treia latura. In cazul in care conditia nu e indeplinita sa va afisa mesajul "nu exista" iar programul se va incheia (return 0).

3. Pentru a pastra doar primele doua zecimale a unui numar real (float sau double) x :

  • Inmultim x cu 100 si salvam rezultatul expresiei intr-o variabila auxiliara.
  • Transformam valoarea variabilei auxiliare in numar real (Type Casting - explicit conversion ) si impartim valoarea acesteia la 100.
  • Pentru a ne asigura ca la afisarea valorii vor fi afisate exact 2 zecimale folosim cout fixed setprecision(2).

Cod C++ :

#include <iostream>

#include <cmath>  // sqrt

#include <iomanip>      // setprecision

using namespace std;

int main(){

//Declarare variabile (nr naturale)

double a,b,c;

double ba,bb,bc;

//Citire date

cin >> a >> b >> c;

//Verificare daca triunghiul este valid

 if((a > b + c) || (b > a + c) || (c > a + b)){

  cout << "Imposibil";

  return 0;

 }

//Calculare semiperimetru

double p=(a+b+c)/2;

//Calculare lungime bisectoare

ba = sqrt((4*b*c)/((b+c)*(b+c)) * p*(p-a));

bb = sqrt((4*a*c)/((a+c)*(a+c)) * p*(p-b));

bc = sqrt((4*a*b)/((a+b)*(a+b)) * p*(p-c));

//Pastrarea doar primelor 2 zecimale

int aux;

aux=ba*100;

ba=(double)aux/100;

aux=bb*100;

bb=(double)aux/100;

aux=bc*100;

bc=(double)aux/100;

//Afisarea rezultatului

cout << fixed << setprecision(2) << ba << " "  << bb << " " << bc;

}

Vezi imaginea Andrei750238
Vezi imaginea Andrei750238

#include<iostream>

#include<cmath>

#include<iomanip>

using namespace std;

int main() {

float a, b, c;

cin >> a >> b >> c;

if ((a > b + c) || (b > a + c) || (c > a + b)) {

cout << "Imposibil";

return 0;

}

cout << fixed << setprecision(2) << sqrt((4 * b * c) / ((b + c) * (b + c)) * ((a + b + c) / 2) * (((a + b + c) / 2) - b)) << ' ' << sqrt((4 * a * c) / ((a + c) * (a + c)) * ((a + b + c) / 2) * (((a + b + c) / 2) - b)) << ' ' << sqrt((4 * a * b) / ((a + b) * (a + b)) * ((a + b + c) / 2) * (((a + b + c) / 2) - c));

}