Треугольники в декартовой системе - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дано действительные

координаты четырех точек на плоскости.

Узнать , какие "тройки" из них создают треугольники и найти площадь большего треугольника, создав для этого функцию нахождения длинны отрезка и площади треугольника. (Т.П.Караванова 2002г № 453) функцию для нахождения периметра треугольника (через формулу Герона) написана :
#include <stdio.h>
#include <math.h>
int S(int x1,int x2,int x3,int y1,int y2,int y3)
{int f1,p,s1,s2,s3;
s1=sqrt(pow((x2-x1),2)+pow(y2-y1,2));
s2=sqrt(pow((x3-x2),2)+pow(y3-y2,2));
s3=sqrt(pow((x3-x1),2)+pow(y3-y1,2));
p=s1+s2+s3/2;
f1=sqrt(p*(p-s1)*(p-s2)*(p-s3));
return (f1);}
Не могу сообразить как в основной программе произвести проверку на существования треугольника, и запихнуть ее в цикл. Как я понимаю нужно отталкиваться от: a+b>c or a+c>b or c+b>a.

Решение задачи: «Треугольники в декартовой системе»

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
 
struct POINT
{   int x,y;
}p[4];
 
struct TRIANGLE
{   POINT p[3];
    double side[3],per,s;
    int exist;
}t[4];
 
double d(POINT u, POINT v)
{   return sqrt(1.0*(u.x-v.x)*(u.x-v.x) + (u.y-v.y)*(u.y-v.y));
}
 
int main()
{   int i,j,k,m,z, numMax=-1;
    double max = 0.;
    srand(time(NULL));
 
    for(i=0;i<4;i++)
    {   p[i].x = rand()%3-rand()%3;
        p[i].y = rand()%3-rand()%3;
        printf("Point %d: x = %d, y = %d\n", i+1, p[i].x, p[i].y);
    }
 
    printf("<br>\n");
    for(i=0, m =0;i<4;i++)
        for(j=i+1;j<4;j++)
            for(k=j+1;k<4;k++)
            {   t[m].p[0]=p[i];
                t[m].p[1]=p[j];
                t[m].p[2]=p[k];
                printf("Trianle %d: points %d, %d, %d; ",m+1,i+1,j+1,k+1);
                t[m].side[0]=d(t[m].p[0],t[m].p[1]);
                t[m].side[1]=d(t[m].p[0],t[m].p[2]);
                t[m].side[2]=d(t[m].p[1],t[m].p[2]);
                
                for(z=0,t[m].per = 0;z<3;z++)
                    t[m].per += t[m].side[z];
                t[m].per /= 2.0;
 
                for(z=0, t[m].exist=1;z<3;z++)
                    if(t[m].per-t[m].side[z]<=0) t[m].exist=0;
 
                printf("existance %d\n", t[m].exist); 
 
                m++;
            };
    
    printf("<br>\n");
    for(i=0;i<4;i++)
        if (t[i].exist)
        {   for(z=0, t[i].s=t[i].per; z<3;z++)
                t[i].s *= t[i].per-t[i].side[z];
            t[i].s = sqrt(t[i].s);
 
            if (t[i].s>max)
            {   max = t[i].s;
                numMax = i+1;
            }
        }
    printf("Maximum area %1.3f, triangle No %d",max, numMax);
    
    getchar();
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы