Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Suguru
3 / 3 / 0
Регистрация: 10.06.2013
Сообщений: 28
1

Найти периметр и площадь четырехугольника

19.09.2013, 21:44. Просмотров 834. Ответов 5
Метки нет (Все метки)

Даны координаты вершин произвольного четыреугольника.
Найти периметр четыреугольника использовать функцию для вычисления длины одной стороны
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 21:44
Ответы с готовыми решениями:

Из паскаля в си: Даны координаты вершин некоторого четырехугольника, найти его площадь по формуле Герона
Переведите пожалуйста код задачи из паскаля в СИ, спасибо. Условие:Даны...

Найти периметр и площадь треугольника
Begin21 ◦.Даныкоординатытрехвершинтреугольника:(x1,y1),(x2,y2),(x3,y3). Найти...

Найти периметр и площадь равнобедренной трапеции
Найти периметр и площадь равнобедренной трапеции с основаниями a и b (a > b) и...

Даны стороны прямоугольника a и b. Найти его площадь и периметр
Даны стороны прямоугольника a и b. Найти его площадь и периметр

Вычислить площадь и периметр прямоугольника
Вычислить площадь ,периметр прямоугольника ,оформить расчеты как...

5
MansMI
1449 / 1158 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
20.09.2013, 00:12 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
struct point
{
    double x,y;
};
 
double side(point a, point b)
{
    double dx,dy;
 
    dx=a.x-b.x;
    dy=a.y-b.y;
    return sqrt(dx*dx+dy*dy);
}
 
int main(int argc, char* argv[])
{   //о последовательном порядке точек обеспокойтесь сами
    point a[4]={{1,3},{7,10},{9,-5},{5,0}};
    double p=0;
    
    for(int i=0;i<4;i++) p+=side(a[i],a[(i+1)%4]);
    printf("P=%f\n",p);
 
    getch();
    return 0;
}
для площади данных недостаточно
0
Qwertiy
821 / 629 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
20.09.2013, 00:27 3
Цитата Сообщение от MansMI Посмотреть сообщение
для площади данных недостаточно
Да ладно
0
MansMI
1449 / 1158 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
20.09.2013, 00:35 4
вполне достаточно, не прав

Добавлено через 3 минуты
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
struct point
{
    double x,y;
};
 
double side(point a, point b)
{
    double dx,dy;
 
    dx=a.x-b.x;
    dy=a.y-b.y;
    return sqrt(dx*dx+dy*dy);
}
 
int main(int argc, char* argv[])
{   //Г® ïîñëåäîâГ*òåëüГ*îì ïîðÿäêå òî÷åê îáåñïîêîéòåñü Г±Г*ìè
    point a[4]={{1,3},{7,10},{9,-5},{5,0}};
    double b[4], p=0, hp, d, s;
    
    for(int i=0;i<4;i++)
    {
        b[i]=side(a[i],a[(i+1)%4]);
        p+=b[i];
    }
    printf("P=%f\n",p);
    
    d=side(a[0],a[2]);
    hp=(b[0]+b[1]+d)/2;
    s=sqrt(hp*(hp-b[0])*(hp-b[1])*(hp-d));
    hp=(b[2]+b[3]+d)/2;
    s+=sqrt(hp*(hp-b[2])*(hp-b[3])*(hp-d));
    printf("S=%f\n",s);
 
    getch();
    return 0;
}
0
palva
3115 / 2245 / 452
Регистрация: 08.06.2007
Сообщений: 8,161
Записей в блоге: 4
20.09.2013, 01:12 5
У вас четрехугольник невыпуклый. Поэтому площадь вычисляет неправильно. Правильный ответ 48, а не 56.
Чтобы не анализировать выпуклость проще использовать не формулу Герона, а вычисление через определитель, тем более, что точки заданы своими координатами. А формула через определитель учитывает ориентацию треугольника и дает площадь с нужным знаком. Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
struct point
{
    double x,y;
};
 
double side(point a, point b)
{
    double dx,dy;
 
    dx=a.x-b.x;
    dy=a.y-b.y;
    return sqrt(dx*dx+dy*dy);
}
 
double square3(point a, point b, point c) {
    return (a.x*b.y+a.y*c.x+b.x*c.y
           -b.y*c.x-a.y*b.x-a.x*c.y)/2.0;
}
int main(int argc, char* argv[])
{   //о последовательном порядке точек обеспокойтесь сами
    point a[4]={{1,3},{7,10},{9,-5},{5,0}};
    double b[4], p=0, hp, d, s;
    
    for(int i=0;i<4;i++)
    {
        b[i]=side(a[i],a[(i+1)%4]);
        p+=b[i];
    }
    printf("P=%f\n",p);
    
    s=abs(square3(a[0],a[1],a[2])+square3(a[0],a[2],a[3]));
    printf("S=%f\n",s);
 
    getch();
    return 0;
}
1
Qwertiy
821 / 629 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
20.09.2013, 01:32 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
double s=0;
 
for(unsigned q=1; q<=4; ++q)
  s += (a[q&3].x-a[(q-1)&3].x) * (a[q&3].y+a[(q-1)&3].y);
 
s = fabs(s/2);
Или так:
C
1
2
3
4
5
6
double s=0;
 
for(unsigned q=0; q<4; ++q)
  s += (a[q].x-a[(q-1)&3].x) * (a[q].y+a[(q-1)&3].y);
 
s = fabs(s/2);
0
20.09.2013, 01:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 01:32

Вычислить периметр и площадь треугольника
Описать процедуру TrianglePS(a,P,S), вычисляющую по стороне а равностороннего...

Вычислить периметр и площадь треугольника по известным сторонам
Написать программу, вычисляющую периметр и площадь треугольника по известным...

Вычислить периметр и площадь прямоугольного треугольника с катетами a и b
Прохожу простые задачки ,помогите улучшить решение ,хотя бы совет :) // ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru