Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
1

Найти площадь многоугольника, вершины которого при некотором обходе имеют заданные координаты

17.05.2015, 20:47. Просмотров 1919. Ответов 20
Метки нет (Все метки)


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
41
42
43
44
45
46
47
48
49
50
51
namespace ConsoleApplication53
{
    class Program
    {
        static int[,] Input()
        {
            Console.Write("Введите количество вершин: ");
            int n = int.Parse(Console.ReadLine());
            var coord = new int[2, n];
            Console.WriteLine("***Кординаты вершины вводить через пробел***");
            for (int i = 0; i < n; i++)
            {
                Console.Write("Введите координаты вершины {0}: ", i + 1);
                var input = Console.ReadLine().Split(' ');
                coord[0, i] = int.Parse(input[0]);
                coord[1, i] = int.Parse(input[1]);
            }
            return coord;
        }
 
        static double Area(int[,] coord)
        {
         int x1,x2,x3,y1,y2,y3;
         double p, a, b, c, s;
            x1=coord[0,0];
            y1 = coord[0, 1];
          
 
            for (int i = 0; i < coord.GetLength(1)-1; i++)
            {
                x2=coord[i,0];
                y2 = coord[0, i];
                x3 = coord[i, 0];
                y3 = coord[0, i];
                a=Math.Sqrt(((x3-x2)*(x3-x2))+((y3-y2)*(y3-y2)));
                b=Math.Sqrt(((x3-x1)*(x3-x1))+((y3-y1)*(y3-y1)));
                c=Math.Sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
                p = (a + b + c) / 2; 
              
            }
            return s += Math.Sqrt(p * (p - a) * (p - b) * (p - c));
        }
        static void Main(string[] args)
        {
            int[,] coord = Input();
            var area = Area(coord);
            Console.WriteLine("Площадь многоугольника равна {0}", area);
            Console.ReadKey();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2015, 20:47
Ответы с готовыми решениями:

Найти площадь уголка, вершины которого при некотором последовательном обходе имеют координаты
Дано натуральное число n, действительные числа{x}_{1} {x}_{1},...,{x}_{n} {y}_{n}. Найти площадь...

Найти площадь пятиугольника, вершины которого имеют указанные координаты
Даны вещественные числа х1, у1, х2, у2,… х5, у5 – Найти площадь пятиугольника, вершины которого...

Найти площадь n-угольника, вершины которого при некотором последовательном обходе имеют заданные координаты
Даны натуральное число n, действительные числа х1,у1,х2,у2. Найти площадь n-угольника,вершины...

Найти площадь пятиугольника, вершины которого имеют указанные координаты
Даны вещественные числа х1, у1, х2, у2,… х5, у5 – Найти площадь пятиугольника, вершины которого...

20
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
17.05.2015, 20:49 2
Подсказка показывает:
double p, a, b, c, s; // не проинициализированы
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 20:53  [ТС] 3
Spiderman5, пробовал проинициализировать все равно не работает как надо помоги пожалуйста
0
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
17.05.2015, 21:33 4
Что выдаёт и что должно выдавать ?
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 21:34  [ТС] 5
ошибку выдает а формулировка такая задачи:Даны натуральное число n, действительные числа x(0), y(0), x(1), y(1),...,x(n), y(n). Найти площадь многоугольника, вершины которого при некотором последовательном обходе имеют координаты (x(0), y(0)), (x(1), y(1)),...,(x(n), y(n)). (Определить метод вычисления площади треугольника по координатам его вершин.)
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,213
17.05.2015, 21:46 6
Конечно сложно разобраться, не зная идеи и замысла , но в строке
Цитата Сообщение от andrey1993 Посмотреть сообщение
C#
1
var coord = new int[2, n];
создается массив, в котором по первому измерению можно выбрать X или Y, а по второму - номер точки.
Почему тогда в строках
Цитата Сообщение от andrey1993 Посмотреть сообщение
C#
1
2
x1=coord[0,0];
y1 = coord[0, 1];
все наоборот.
Также в строках 32-34 что-то напутано, как мне кажется.
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 21:54  [ТС] 7
Даценд, помогите пожалуйста как сделать .не могу не как разобраться
0
28 / 28 / 8
Регистрация: 16.10.2012
Сообщений: 170
17.05.2015, 22:10 8
попробуйте изменить var на определенный тип данных
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 22:32  [ТС] 9
Dot_mmoru, и что мне это даст?
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,213
17.05.2015, 22:40 10
andrey1993,
Я уже написал, что не понимая идеи сложно что-то подсказать.
Если предположить, что рассчитывается площадь треугольника, то вот расчет площади s по координатам 3-х первых точек массива.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int x1,x2,x3,y1,y2,y3;
double p, a, b, c, s; 
x1 = coord[0, 0];
y1 = coord[1, 0];
x2 = coord[0, 1];
y2 = coord[1, 1];
x3 = coord[0, 2];
y3 = coord[1, 2];
a=Math.Sqrt(((x3-x2)*(x3-x2))+((y3-y2)*(y3-y2)));
b=Math.Sqrt(((x3-x1)*(x3-x1))+((y3-y1)*(y3-y1)));
c=Math.Sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
p = (a + b + c) / 2; 
s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
Что касается многоугольника, то я не знаю как считать его площадь, но предполагаю, что можно его разбить на треугольники и найти сумму их площадей.
Кстати есть замечательный класс Point, у него 2 поля X и Y. Можно для хранения точек массив типа Point применить.
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 23:03  [ТС] 11
Даценд, да все правильно многоугольник разбиваем на треугольники находим площадь их а потом суммируем,ну я не могу понять как это сделать т.к начинающий ,выручи))
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,213
17.05.2015, 23:03 12
А попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static double Area(int[,] coord)
{
    int x1, x2, x3, y1, y2, y3;
    double p, a, b, c, s=0;
    x1 = coord[0, 0];
    y1 = coord[1, 0];
    for (int i = 1; i < coord.GetLength(1) - 1; i++)
    {
        x2 = coord[0, i];
        y2 = coord[1, i];
        x3 = coord[0, i+1];
        y3 = coord[1, i+1];
        a = Math.Sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
        b = Math.Sqrt(((x3 - x1) * (x3 - x1)) + ((y3 - y1) * (y3 - y1)));
        c = Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
        p = (a + b + c) / 2;
        s += Math.Sqrt(p * (p - a) * (p - b) * (p - c));
    }
    return s;
}
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 23:09  [ТС] 13
Даценд, как полностью она будет выглядеть?
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,213
17.05.2015, 23:12 14
Остальное без изменений
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 23:15  [ТС] 15
Даценд, не работает ошибки выдает
0
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
17.05.2015, 23:20 16
Цитата Сообщение от andrey1993 Посмотреть сообщение
как полностью она будет выглядеть?
Вычислить площадь произвольного многоугольника, нарисованного на форме
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,213
17.05.2015, 23:24 17
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication53
{
    class Program
    {
        static int[,] Input()
        {
            Console.Write("Введите количество вершин: ");
            int n = int.Parse(Console.ReadLine());
            var coord = new int[2, n];
            Console.WriteLine("***Кординаты вершины вводить через пробел***");
            for (int i = 0; i < n; i++)
            {
                Console.Write("Введите координаты вершины {0}: ", i + 1);
                var input = Console.ReadLine().Split(' ');
                coord[0, i] = int.Parse(input[0]);
                coord[1, i] = int.Parse(input[1]);
            }
            return coord;
        }
 
        static double Area(int[,] coord)
        {
            int x1, x2, x3, y1, y2, y3;
            double p, a, b, c, s = 0;
            x1 = coord[0, 0];
            y1 = coord[1, 0];
            for (int i = 1; i < coord.GetLength(1) - 1; i++)
            {
                x2 = coord[0, i];
                y2 = coord[1, i];
                x3 = coord[0, i + 1];
                y3 = coord[1, i + 1];
                a = Math.Sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
                b = Math.Sqrt(((x3 - x1) * (x3 - x1)) + ((y3 - y1) * (y3 - y1)));
                c = Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
                p = (a + b + c) / 2;
                s += Math.Sqrt(p * (p - a) * (p - b) * (p - c));
            }
            return s;
        }
 
        static void Main(string[] args)
        {
            int[,] coord = Input();
            var area = Area(coord);
            Console.WriteLine("Площадь многоугольника равна {0}", area);
            Console.ReadKey();
        }
    }
}
0
Миниатюры
Найти площадь многоугольника, вершины которого при некотором обходе имеют заданные координаты  
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
17.05.2015, 23:38  [ТС] 18
Даценд, спасибо очень помог ,еще один вопрос как происходит это деление на треугольники до конца не могу понять
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,213
17.05.2015, 23:46 19
По принципу веера. В каждом треугольнике первая точка, остальные выбираются в цикле.
Т.е. для шестиугольника получаются треугольники с вершинами
1 2 3
1 3 4
1 4 5
1 5 6
0
0 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 202
18.05.2015, 00:02  [ТС] 20
Даценд,
C#
1
var coord = new int[2, n];
у меня получаеться создаеться массив с 3 строчками и n -столбцов ,а это у меня получаеться первая точка
C#
1
2
 x1 = coord[0, 0];
            y1 = coord[1, 0];;
?

Добавлено через 5 минут
Даценд, если не сложно сделай ПОЖАЛУЙСТА комментарии к программе
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 00:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Найти периметр восьмиугольника, вершины которого имеют соответственно координаты (x1, y1), (x2, y2), …, (x8, y8)
Найти периметр восьмиугольника, вершины которого имеют соответственно координаты (x1, y1), (x2,...

Найти периметр четырехугольника, вершины которого имеют соответственно координаты (х1, у1), …, (х4, y4)
Даны действительные числа х1, у1, х2, у2, …,х4, у4. Найти периметр четырехугольника, вершины...

Найти периметр десятиугольника, вершины которого имеют соответствующие координаты
Даны действительные числа х1,у1....х10,у10. Найти периметр десятиугольника, вершины которого имеют...

Найти периметр десятиугольника, вершины которого имеют соответственно координаты
Задание:Даны действительные числа x1,y1,x2,y2,…,x10. Найти периметр десятиугольника, вершины...


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

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

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