Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
#1

Максимальный треугольник - C++

06.02.2013, 11:55. Просмотров 372. Ответов 3
Метки нет (Все метки)

Даны n точек заданные координатами. Требуется найти среди этих точек треугольник с максимальной площадью.

Входные данные:
5
0 0
0 2
1 0.5
0.5 1
2 0

Выходные(площадь треугольника и вершины из которых он получился)
2.00
1 2 5
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <fstream>
 
using namespace std;
 
int main()
{
    int i, j, k, n, a = 0, b = 0, c = 0;
    double S1 = 0.0,
           S2 = 0.0,
           S3 = 0.0,
           max1 = 0.0,
           max2 = 0.0,
           max3 = 0.0,
           SUPER_MAX = 0.0;
 
    ifstream in("input.txt");
    ofstream out("output.txt");
 
    in >> n;
 
    double * x = new double[n];
    double * y = new double[n];
    
    for(i = 0; i < n; i++)
    {
        in >> x[i];
        in >> y[i];
    }
 
    for(i = 0; i < n; i++)
    {
        S1 = abs((y[i - 1] + y[i]) * (x[i] - x[i - 1]) - (y[0] + y[i])*(x[i] - x[0]));
        max1 = S1;
        
        
        for(j = i + 2; j < n; j++)
        {
            S2 = abs((y[j - 1] + y[j]) * (x[j] - x[j - 1]) - (y[0] + y[j]) * (x[j] - x[0]));
            max2 = S2;
            
 
            for(k = j; k < n; k++)
            {
                S3 = abs((y[k - 1] + y[k]) * (x[k] - x[k - 1]) - (y[0] + y[k]) * (x[k] - x[0]));
                max3 = S3;
                    
            }   
 
        }
        
        if(max1 > max2 && max1 > max3)
        {
            SUPER_MAX = max1;
            a = i;
            b = j;
            c = k;
        }
        else
            if(max2 > max1 && max2 > max3)
            {
                SUPER_MAX = max2;
                a = i;
                b = j;
                c = k;
            }
            else
                if(max3 > max2 && max3 > max1)
                {
                    SUPER_MAX = max3;
                    a = i;
                    b = j;
                    c = k;
                }
        
    }
 
    out << SUPER_MAX << endl
        << a << " " << b << " "  << c << endl
        << max1 << " " << max2 << " " << max3;
            
 
}
помогите разобраться с циклами 2 и 3.. видать они на повтор идут, площадь то сошлась с ответам по этим входным данным, а вершины не в какую не идут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 11:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Максимальный треугольник (C++):

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник - C++
Задание звучит так: Нужно создать базовый класс Треугольник с двумя наследующими его классами - равносторонний треугольник (·...

Класс треугольник с произвольным классом - равнобедренный треугольник - C++
Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и...

Создать абстрактный класс "Треугольник" и производный - "Равнобедренный треугольник" - C++
Задание Создать абстрактный класс треугольник. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода...

Максимальный элемени матрицы заменить на нуль и вывести на печать угол матрицы, в котором расположен этот максимальный элемент - C++
собственно сабж. буду очень благодарен тому кто поможет,а то я на грани отчисления,а уроки по c++ пролежал дома с переломом ноги =(

Заменить максимальный элемент в матрице, средним арифметическим элементов строки, в которой находится максимальный элемент - C++
Уважаемые форумчане! Помогите с задачкой :) (С++) В матрице D максимальный элемент заменить средним арифметическим элементов строки,...

Для той из матриц, в которой больше максимальный элемент, найти максимальный элемент в каждой строке - C++
Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти максимальный элемент в каждой строке.

3
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
06.02.2013, 12:05 #2
Как минимум x[i - 1] при і = 0 будет работать не верно. Я бы сделал тремя циклами как у вас и перебрал все комбинации, но всякие вычисления в 3 цикле.

for ( )
for ( )
for ( )
{
// тут находим максимум площади
}
1
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
06.02.2013, 13:37  [ТС] #3
хмм и так тоже ведь можно.. как раз думаю, а насчет минимума - в отладчике давно 1.INF висит, а я чот не обратил...

Добавлено через 31 минуту
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
#include <fstream>
 
using namespace std;
 
int main()
{
    int i, j, k, n, a = 0, b = 0, c = 0;
    double S1 = 0.0,
           S2 = 0.0,
           S3 = 0.0,
           max1 = 0.0,
           max2 = 0.0,
           max3 = 0.0,
           SUPER_MAX = 0.0;
 
    ifstream in("input.txt");
    ofstream out("output.txt");
 
    in >> n;
 
    double * x = new double[n];
    double * y = new double[n];
    
    for(i = 0; i < n; i++)
    {
        in >> x[i];
        in >> y[i];
    }
 
    for(i = 1; i < n; i++)
        for(j = i + 1; j < n; j++)
            for(k = j + 1; k < n; k++)
            {
                S1 = abs(((y[k-1] + y[k])*(x[k]-x[k-1])-(y[0]+y[k])*(x[k]-x[0])));
                S2 = abs(((y[j-1] + y[j])*(x[j]-x[j-1])-(y[0]+y[j])*(x[j]-x[0])));
                S3 = abs(((y[i-1] + y[i])*(x[i]-x[i-1])-(y[0]+y[i])*(x[i]-x[0])));
                
                SUPER_MAX = S1;
                if(S2 > SUPER_MAX)
                    SUPER_MAX = S2;
                else 
                    if(S3 > SUPER_MAX)
                    SUPER_MAX = S3;
                    else
                        SUPER_MAX = S1;
            }
 
 
            out << SUPER_MAX << endl;
}
У меня вопрос - а как теперь запомнить вершины?
0
St-Voland
171 / 79 / 3
Регистрация: 05.12.2012
Сообщений: 217
06.02.2013, 17:46 #4
Где меняется максимум - там и запоминайте номера 3х вершин.
1
06.02.2013, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2013, 17:46
Привет! Вот еще темы с ответами:

найти максимальный элемент массива x(15) . переставить местами этот максимальный элемент с индексом 4 - C++
поможете с курсовым ?

Найти максимальный элемент (из 10 чисел) и следующий за ним максимальный элемент - C++
Добрый день. Задача такая: используя только while и if-else найти максимальный эл-нт (из 10 чисел) и следующий за ним максимальный...

Все отрицательные элементы заданного массива L (11) разделить на максимальный элемент этого массива. Вывести максимальный элемент, начальный и преобра - C++
Помогите составить программу на С++

Максимальный элемент матрицы заменить на нуль и вывести на печать угол матрицы, в котором расположен этот максимальный элемент - C++
Помогите, пожалуйста, добить программу: -Максимальный элемент матрицы заменить на нуль и вывести на печать угол матрицы, в котором...


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

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

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