Треугольники в декартовой системе - C (СИ)
Формулировка задачи:
Дано действительные Не могу сообразить как в основной программе произвести проверку на существования треугольника, и запихнуть ее в цикл.
Как я понимаю нужно отталкиваться от: a+b>c or a+c>b or c+b>a.
координаты четырех точек на плоскости.
Узнать , какие "тройки" из них создают треугольники и найти площадь большего треугольника, создав для этого функцию нахождения длинны отрезка и площади треугольника. (Т.П.Караванова 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);}
Решение задачи: «Треугольники в декартовой системе»
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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д