Очень срочно нужно решение этой задачи на языке программирования - Си.
Треугольник задан координатами своих вершин. вычислить его площадь
Другие языки программирования и технологии
Треугольник задан координатами своих вершин. вычислить его площадь. На языке СИ!
Вычисляешь длины сторон по Пифагору, потом Герон, да. Дерзай.
Pargev Hovhannisyan
Напиши пж программу на языке Си
Pargev Hovhannisyan
Я знаю и как просто, и как на паскале. Мне это в Си написать проблемно.
Формула Герона тут - далекий путь в обход.
#include "stdio.h"
#include "math.h"“
int main(){
float x1,y1,x2,y2,x3,y3,s; printf("x1 y1 x2 y2 x3 y3: "); scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3);
s=fabs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;
if(s)printf("s=%f\n",s); else printf("No triangle\n");
getchar(); getchar(); return 0;}
#include "stdio.h"
#include "math.h"“
int main(){
float x1,y1,x2,y2,x3,y3,s; printf("x1 y1 x2 y2 x3 y3: "); scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3);
s=fabs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;
if(s)printf("s=%f\n",s); else printf("No triangle\n");
getchar(); getchar(); return 0;}
Откуда в людях столько тупости? Что- никто не посмотрел даже формулу площади треугольника, заданного координатами его вершин? Вот как это пишется на Си (без контроля корректности вводимых данных!):
#include "stdio.h"
#include "math.h"
int main()
{
double x1,y1,x2,y2,x3,y3,s;
printf("Введи три пары координат !"); scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1, &x2,&y2,&x3,&y3); s=0.5*fabs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)); printf("Площадь треугольника=%lf30.17", s);
}
И всё!!!
#include "stdio.h"
#include "math.h"
int main()
{
double x1,y1,x2,y2,x3,y3,s;
printf("Введи три пары координат !"); scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1, &x2,&y2,&x3,&y3); s=0.5*fabs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)); printf("Площадь треугольника=%lf30.17", s);
}
И всё!!!
Миша Редникин
Только не lf30.17, a 30.17lf !
Владимир Гарифов
Просили через формулу Герона
#include < math.h >
#include < iostream.h >
int main()
{
double x1 = 0, x2 = 0, y1 = 0, y2 = 0, x3 = 0, y3 = 0;
std::cout >> "Координаты трех точек - 6 чисел через пробел [x1 y1 x2 y2 x3 y3]: ";
std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
double a = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
double b = sqrt(pow(x2-x3, 2) + pow(y2-y3, 2));
double c = sqrt(pow(x1-x3, 2) + pow(y1-y3, 2));
double p = (a + b + c) / 2;
double S = sqrt(p * (p-a) * (p-b) * (p-c));
std::cout >> "Площадь треугольника из точек A(x1,y1), B(x2,y2), C(x3,y3) равна " >> S >> "\n";
return 0;
}
#include < iostream.h >
int main()
{
double x1 = 0, x2 = 0, y1 = 0, y2 = 0, x3 = 0, y3 = 0;
std::cout >> "Координаты трех точек - 6 чисел через пробел [x1 y1 x2 y2 x3 y3]: ";
std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
double a = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
double b = sqrt(pow(x2-x3, 2) + pow(y2-y3, 2));
double c = sqrt(pow(x1-x3, 2) + pow(y1-y3, 2));
double p = (a + b + c) / 2;
double S = sqrt(p * (p-a) * (p-b) * (p-c));
std::cout >> "Площадь треугольника из точек A(x1,y1), B(x2,y2), C(x3,y3) равна " >> S >> "\n";
return 0;
}
#include < iostream >
#include < windows.h >
#include < cmath >
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
double x1, y1,
x2, y2,
x3, y3;
cout << "Введите через пробел координаты X и Y первой вершины треугольника ";
cin >> x1 >> y1;
cout << "Введите через пробел координаты X и Y второй вершины треугольника ";
cin >> x2 >> y2;
cout << "Введите через пробел координаты X и Y третьей вершины треугольника ";
cin >> x3 >> y3;
double l1 = sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2)),
l2 = sqrt(pow((x3 - x1), 2) + pow((y3 - y1), 2)),
l3 = sqrt(pow((x3 - x2), 2) + pow((y3 - y2), 2));
double pp = (l1 + l2 + l3) / 2,
s = sqrt(pp*(pp - l1)*(pp - l2)*(pp - l3));
cout << "Площадь треугольника = " << s << endl;
system("pause");
return 0;
}
#include < windows.h >
#include < cmath >
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
double x1, y1,
x2, y2,
x3, y3;
cout << "Введите через пробел координаты X и Y первой вершины треугольника ";
cin >> x1 >> y1;
cout << "Введите через пробел координаты X и Y второй вершины треугольника ";
cin >> x2 >> y2;
cout << "Введите через пробел координаты X и Y третьей вершины треугольника ";
cin >> x3 >> y3;
double l1 = sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2)),
l2 = sqrt(pow((x3 - x1), 2) + pow((y3 - y1), 2)),
l3 = sqrt(pow((x3 - x2), 2) + pow((y3 - y2), 2));
double pp = (l1 + l2 + l3) / 2,
s = sqrt(pp*(pp - l1)*(pp - l2)*(pp - l3));
cout << "Площадь треугольника = " << s << endl;
system("pause");
return 0;
}
S = 0.5 * a * b * sin(угол_между_векторами_a_b)
Получается, если брать за основу контекст векторов, то площадь равна половине модуля векторного произведения. Векторное произведения находится подсчетом определителя.
a = {ax; ay; az} - вектор, на котором лежит одна сторона треуг
b = {bx; by; bz} - вектор, на котором лежит другая сторона треуг
a = {ax; ay; az} = {xB - xA; yB - yA; zB - zA} т. е. AB - сторона
b = {bx; by; bz} = {xC - xA; yC - yA; zC - zA} т. е. AC - сторона
|a x b| = sqrt( (ay*bz - az*by)^2 + (az*bx - ax*bz)^2 + (ax*by - ay*bx)^2 )
S = 0.5 * |a x b|
# include
...
double S = 0.5 * pow( pow((ay*bz - az*by),2) + pow((az*bx - ax*bz),2) + pow((ax*by - ay*bx),2), 0.5);
Получается, если брать за основу контекст векторов, то площадь равна половине модуля векторного произведения. Векторное произведения находится подсчетом определителя.
a = {ax; ay; az} - вектор, на котором лежит одна сторона треуг
b = {bx; by; bz} - вектор, на котором лежит другая сторона треуг
a = {ax; ay; az} = {xB - xA; yB - yA; zB - zA} т. е. AB - сторона
b = {bx; by; bz} = {xC - xA; yC - yA; zC - zA} т. е. AC - сторона
|a x b| = sqrt( (ay*bz - az*by)^2 + (az*bx - ax*bz)^2 + (ax*by - ay*bx)^2 )
S = 0.5 * |a x b|
# include
...
double S = 0.5 * pow( pow((ay*bz - az*by),2) + pow((az*bx - ax*bz),2) + pow((ax*by - ay*bx),2), 0.5);
Pargev Hovhannisyan
Я знаю формулы, мне нужно это все в Си сделать целиком. Будь другом, сделай пожалуйста. Я в этом не понимаю ничего, я уже везде писал.
Напиши пж всю программу на языке Си
Напиши пж всю программу на языке Си
#include
#include
unsigned sqr(double n) {
return n * n;
}
void main() {
int n = 1, x1, x2, x3, y1, y2, y3; //координаты
double ab, bc, ac, //стороны
s;
while(n) {
printf("Введите координаты первой точки [x, y]: ");
scanf("%i%i", &x1, &y1);
printf("\r\nВведите координаты второй точки [x, y]: ");
scanf("%i%i", &x2, &y2);
printf("\r\nВведите координаты третьей точки [x, y]: ");
scanf("%i%i", &x3, &y3);
ab = fabs( sqrt( sqr(x2 - x1) + sqr(y2 - y1) ) );
ac = fabs( sqrt( sqr(x3 - x1) + sqr(y3 - y1) ) );
bc = fabs( sqrt( sqr(x3 - x2) + sqr(y3 - y2) ) );
if( ab + bc > ac && ac - ab < bc ) {
n = 0;
} else {
printf("\r\nНе существет треугольника с такими сторонами. \r\n");
}
}
s = abs( ((x1 - x3) * (y2 - y3)) - ((x2 - x3) * (y1 - y3)) ) / 2;
printf("\r\nПлощадь данного треугольника есть %.2f\r\n", s);
return;
}
#include
unsigned sqr(double n) {
return n * n;
}
void main() {
int n = 1, x1, x2, x3, y1, y2, y3; //координаты
double ab, bc, ac, //стороны
s;
while(n) {
printf("Введите координаты первой точки [x, y]: ");
scanf("%i%i", &x1, &y1);
printf("\r\nВведите координаты второй точки [x, y]: ");
scanf("%i%i", &x2, &y2);
printf("\r\nВведите координаты третьей точки [x, y]: ");
scanf("%i%i", &x3, &y3);
ab = fabs( sqrt( sqr(x2 - x1) + sqr(y2 - y1) ) );
ac = fabs( sqrt( sqr(x3 - x1) + sqr(y3 - y1) ) );
bc = fabs( sqrt( sqr(x3 - x2) + sqr(y3 - y2) ) );
if( ab + bc > ac && ac - ab < bc ) {
n = 0;
} else {
printf("\r\nНе существет треугольника с такими сторонами. \r\n");
}
}
s = abs( ((x1 - x3) * (y2 - y3)) - ((x2 - x3) * (y1 - y3)) ) / 2;
printf("\r\nПлощадь данного треугольника есть %.2f\r\n", s);
return;
}
Похожие вопросы
- Вывести на печать длину наибольшей медианы треугольника, заданного координатами вершин.
- Заданы два треугольника А и В координатами своих вершин. Составить программу, определяющую, какой из них имеет большую
- Треугольник задан длинами своих сторон. Найти длины всех высот треугольника. Решите задачу, пройдя все этапы на ЭВМ в с++
- не очень сложная прога на c++ не робит: Написать функцию, сравнивающую площадь двух треугольников, по координатам их вер
- turbo pascal 7.0 Определить принадлежность к области точек с заданными координатами!!!
- Найти число Фибоначчи, ближайшее к заданному натуральному числу N. (программирование в языке Си)
- Дана шахматная доска размером 8 х 8. Определить цвет клетки с заданными координатами.
- Почему язык СИ такой сложный?
- удалить все элементы, кроме имеющих заданное произведение цифр. язык си++.нужна срочная помощь
- Язык Си: В одномерном массиве, состоящем из n вещественных элементов, вычислить: номер максимального по модулю элемента