[C] Wyznaczenie kątów w trójkącie prostokątym


(Witekk932) #1

Witam, jestem studentem I roku i na informatyce dostałem program do napisania. Oto polecenie:

Napisz program liczący pole trójkąta według wzoru Herona.

Użytkownik podaje współrzędne wierzchołków trójkąta [x1, y1, x2, y2, x3, y3].

Na podstawie tej informacji obliczane jest pole figury według wzoru:

P=Ö{Obw(Obw-a)(Obw-b)(Obw-c)}, gdzie:

Obw - połowa obwodu trójkąta;

a, b, c - długości boków trójkąta (do ich obliczenia wykorzystać tw. Pitagoras'a).

Przed przystąpieniem do obliczenia pola figury należy sprawdzić czy z podanych punktów możliwa jest budowa trójkąta.

W przypadku trójkąta prostokątnego należy wyznaczyć kąty pomiędzy przeciwprostokątnymi a przyprostokątnymi i wypisać je w stopniach.

Mam pierwszą część programu ale nie wiem jak napisać część z trójkątem porstokatym, jak wyznaycz miary kątów. Proszę o pomoc

#include 

#include 

#include 


int main(int argc, char *argv[]){

float x1,x2,x3,y1,y2,y3,a,b,c,Obw;

printf("podaj wspolzedne wiezcholkow: x1,y1, x2,y2, x3,y3\n");

scanf("%f %f %f %f %f %f",&x1,&y1,&x2,&y2,&x3,&y3);

a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

b=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));

c=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));

if(a+b
{

  printf("Niepoprawne dane, nie da sie zbudawac trojkata\n");  

   return 0;

}

else

{

  Obw=(a+b+c)/2;  

printf("Pole trojkata wynosi: %.2f\n",sqrt(Obw*(Obw-a)*(Obw-b)*(Obw-c)));



  }

system("PAUSE");

return 0;

#2

ino , proszę zapoznaj się z tą stroną oraz tym tematem, a następnie, używając przycisku image.php?album_id=20&image_id=4038


([alex]) #3
#include 

#include 


int main()

  {

   double ax,ay,bx,by,cx,cy,Area,A,B,C;

   for(;;)

     {

      printf("podaj wspolzedne wiezcholkow: Ax Ay Bx By Cx Cy: ");

      if(scanf("%lf%lf%lf%lf%lf%lf",&ax,&ay,&bx,&by,&cx,&cy)!=6) break;

      Area=fabs((ax-cx)*(by-cy)-(ay-cy)*(bx-cx))/2;

      if(!Area) printf("Trojkat zwyrodnialy do kreski\n");

      else

        {

         printf("Pole trojkata wynosi: %.2lf\n",Area);

         A=180*(atan2(by-ay,bx-ax)-atan2(cy-ay,cx-ax))/M_PI;

         B=180*(atan2(cy-by,cx-bx)-atan2(ay-by,ax-bx))/M_PI;

         C=180*(atan2(ay-cy,ax-cx)-atan2(by-cy,bx-cx))/M_PI;

         if(A>180) A=360-A;

         if(B>180) B=360-B;

         if(C>180) C=360-C;

         if(A<0) A=fabs(A);

         if(B<0) B=fabs(B);

         if(C<0) C=fabs(C);

         printf("katy: %.2lf %.2lf %.2lf Suma: %.2lf\n",A,B,C,A+B+C);

        }

     }

   return 0;

  }

Coś mogłem pochrzanić - pisano z palca.


(Witekk932) #4

Dzięki, że to napisałeś ale mógłbyś napisać to prostszym językiem? Ja dopiero zacząłem programowanie w C i jak pokażę to gościowi od ćwiczeń to nie uwierzy, że sam to robiłem, nie miałem czegoś takiego jak "atan2", "Area=fabs", "break", "double".


(Drobok) #5

atan2->arkus tangens x1/x2 :stuck_out_tongue:

fabs -> wartość bezwzględna liczby zmiennoprzecinkowej

double typ zmiennej zmiennoprzecinkowej

Może sam się wysilisz i coś napiszesz ?