Площадь выпуклого прямоугольника - C (СИ)
Формулировка задачи:
. Площадь треугольника, заданного координатами своих вершин, находится по формуле
S = 0.5 * |x1y2 + x2y3 + x3y1 - x1y3 - x2y1 -x3y2|.
Используя функцию для вычисления площади треугольника, определить площадь выпуклого четырехугольника ABCD, заданного координатами своих вершин.
совершенно не понимаю как вызываются функции. да и программа после ввода координат х и у завершает работу
#include<conio.h>
#include<math.h>
#include<stdio.h>
void main()
{
float x1,x2,x3,x4,y1,y2,y3,y4;
float S3(int,int,int,int,int,int);
float S4(int,int,int,int,int,int,int,int);
puts("Vvedite koordinati verwini - x1");
scanf("%f",&x1);
puts("Vvedite koordinati verwini - x2");
scanf("%f",&x2);
puts("Vvedite koordinati verwini - x3");
scanf("%f",&x3);
puts("Vvedite koordinati verwini - x4");
scanf("%f",&x4);
puts("Vvedite koordinati verwini - y1");
scanf("%f",&x1);
puts("Vvedite koordinati verwini - y2");
scanf("%f",&y2);
puts("Vvedite koordinati verwini - y3");
scanf("%f",&y3);
puts("Vvedite koordinati verwini - y4");
scanf("%f",&y4);
getch();
}
float S3(int x1, int x2,int x3, int y1, int y2, int y3)
{
int a = fabs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);
float S3 = 0.5* a ;
printf("S 3 = %f",S3);
return S3;
}
float S4(int x1, int x2,int x3, int x4,int y1, int y2, int y3,int y4)
{
float S1=S3(x1,x2,x3,y1,y2,y3);
float l1,l2,l3,S2;
l1=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
l2=sqrt(((x3-x2)*(x3-x2))+((y3-y2)*(y3-y2)));
l3=sqrt(((x3-x1)*(x3-x1))+((y3-y1)*(y3-y1)));
if ((l1>l2) && (l1>l3)) S2=S3(x4,x2,x3,y4,y2,y3);
if ((l2>l1) && (l2>l3)) S2=S3(x4,x1,x3,y4,y1,y3);
if ((l3>l1) && (l3>l2)) S2=S3(x4,x1,x2,y4,y1,y2);
float S4=S1+S2;
printf(" S4 = %f",S4);
return S4;
}Решение задачи: «Площадь выпуклого прямоугольника»
textual
Листинг программы
#include<conio.h>
#include<math.h>
#include<stdio.h>
//float s3,s4;
void main()
{
int x1,x2,x3,x4,y1,y2,y3,y4;
float s3,s4;
float S3(int,int,int,int,int,int);
float S4(int,int,int,int,int,int,int,int);
puts("Vvedite koordinati verwini - x1");
scanf("%f",&x1);
puts("Vvedite koordinati verwini - x2");
scanf("%f",&x2);
puts("Vvedite koordinati verwini - x3");
scanf("%f",&x3);
puts("Vvedite koordinati verwini - x4");
scanf("%f",&x4);
puts("Vvedite koordinati verwini - y1");
scanf("%f",&x1);
puts("Vvedite koordinati verwini - y2");
scanf("%f",&y2);
puts("Vvedite koordinati verwini - y3");
scanf("%f",&y3);
puts("Vvedite koordinati verwini - y4");
scanf("%f",&y4);
s3=S3(x1,x2,x3,y1,y2,y3);
s4=S4(x1,x2,x3,x4,y1,y2,y3,y4);
printf("S3 = %.f\nS4 = %.f\n",s3,s4);
getch();
}
float S3(int x1, int x2,int x3, int y1, int y2, int y3)
{
int a = fabs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);
float S3 = 0.5*a ;
//printf("S 3 = %f",S3);
return S3;
}
float S4(int x1, int x2,int x3, int x4,int y1, int y2, int y3,int y4)
{
float S1=S3(x1,x2,x3,y1,y2,y3);
float l1,l2,l3,S2;
l1=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
l2=sqrt(((x3-x2)*(x3-x2))+((y3-y2)*(y3-y2)));
l3=sqrt(((x3-x1)*(x3-x1))+((y3-y1)*(y3-y1)));
if ((l1>l2) && (l1>l3)) S2=S3(x4,x2,x3,y4,y2,y3);
if ((l2>l1) && (l2>l3)) S2=S3(x4,x1,x3,y4,y1,y3);
if ((l3>l1) && (l3>l2)) S2=S3(x4,x1,x2,y4,y1,y2);
float S4=S1+S2;
//printf(" S4 = %f",S4);
return S4;
}
Объяснение кода листинга программы
В этом коде выполняется вычисление площади выпуклого прямоугольника по его вершинам с использованием формулы Герона. Список действий:
- Ввод координат вершин прямоугольника (x1,y1) и (x2,y2) с помощью функции scanf.
- Вычисление площади треугольника по формуле Герона с помощью функции S3, которая принимает координаты вершин треугольника (x1,y1), (x2,y2), (x3,y3) и возвращает его площадь.
- Вычисление длин сторон треугольника (x1-x2), (x2-x3), (x3-x1), (y1-y2), (y2-y3), (y3-y1) с помощью функции sqrt из библиотеки math.h.
- Вычисление площади треугольника по формуле Герона с помощью функции S4, которая принимает координаты вершин прямоугольника (x1,y1), (x2,y2), (x3,y3), (x4,y4) и возвращает его площадь.
- Вывод значений площадей S3 и S4 с помощью функции printf.
- Ввод значения 0 для завершения программы с помощью функции getch. Примечание: значения переменных x1,x2,x3,x4,y1,y2,y3,y4,s3,s4 не выводились на экран в данном коде.