Informatică, întrebare adresată de TheOwlPenny, 8 ani în urmă

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ăspunsuri la întrebare

Răspuns de andrei750238
22

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;

}

Anexe:

popemma88: Foarte bun răspunsul! Mulțumim!
TheOwlPenny: Mulțumesc !:)
andrei750238: Cu placere ♥
Răspuns de lucaciucandrei
12

#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));

}


TheOwlPenny: Mulțumesc!=)
lucaciucandrei: cu placere!
Alte întrebări interesante