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

Поиск min и max - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа со стеком (вытащить значение и сохранить в переменную) http://www.cyberforum.ru/cpp-beginners/thread1162651.html
Привет всем! Пишу я лабораторку по моделированию систем. И столкнулся с проблемой вытаскивания значений из стека и сохранение в переменную. Как можно это реализовать? З.Ы Переменная в последствии...
C++ Повторный запуск main() равен перезапуску программы? Добрый день. Если в коде какой либо функции я вызову main() c которой у меня начинается выполнение программы, то будет ли это равно перезапуску программы(освобождение всей используемой до этого... http://www.cyberforum.ru/cpp-beginners/thread1162644.html
C++ Как сделать так, чтобы значения экземпляров класса не повторялись
Я пытаюсь написать игру 2048. Коротко об игре, для тех кто не знает: Есть поле 4х4 в нем появляются на случайной позиции квадратики с значением 2 или 4, используя клавиши вправо,влево,вверх,вниз то...
C++ Считывание из текстового файла
Всем привет. У меня есть текстовый файл в котором, к примеру записана информация:"Фамилия Имя". Как мне из этого файла по словно считать информацию в переменные, то есть что бы переменные...
C++ Изменение размера массива http://www.cyberforum.ru/cpp-beginners/thread1162616.html
Допустим в main-е я объявил указатель определенного типа и создал переменную int size, затем адрес указателя и переменной size передаю первую функцию. В ней меняется значение переменной size и...
C++ Разработать метод, который нечетное число заменяет на 0,а четное число уменьшает в два раза Разработать метод f (х) , который нечетное число заменяет на 0, а четное число уменьшает в два раза. Продемонстрировать работу данного метода на примере. подробнее

Показать сообщение отдельно
grizlik78
Эксперт С++
1912 / 1444 / 112
Регистрация: 29.05.2011
Сообщений: 3,001
30.04.2014, 23:07
Понятно, название массива сбивает с толку, у каждого элемента 3 координаты.
Следующий вопрос: внутри цикла по i содержимое массива x не меняется? Тогда для каждой из координат можно создать 4 массива: для мин и макс слева, и то же самое справа. Массив "слева" заполнить одним проходом от начала к концу, массив "справа" заполнить одним проходом от конца к началу. Тогда здесь стандартные алгоритмы ни к чему, надо просто сравнивать текущий элемент с текущими минимумом и максимумом, при необходимости обновлять и записывать в массивы. А уже после этого работать данным алгоритмом уже с этими массивами.

Добавлено через 46 минут
Громоздко, можно попробовать макросами утоптать или ещё как. Не проверялось, ибо неполный код.
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
std::vector<float> ldx(num), ldy(num), ldz(num);
std::vector<float> rdx(num), rdy(num), rdz(num);
for(int i = 0; i < num; i++)
{
    minx_l = maxx_l = x[0].pos.x;
    miny_l = maxy_l = x[0].pos.y;
    minz_l = maxz_l = x[0].pos.z;
    minx_r = maxx_r = x[num-1].pos.x;
    miny_r = maxy_r = x[num-1].pos.y;
    minz_r = maxz_r = x[num-1].pos.z;
    for(int i = 1; i < num; i++)
    {
        ldx[i] = maxx_l - minx_l;
        if (x[i].pos.x < minx_l)
            minx_l = x[i].pos.x;
        if (maxx_l < x[i].pos.x)
            maxx_l = x[i].pos.x;
 
        ldy[i] = maxy_l - miny_l;
        if (x[i].pos.y < miny_l)
            miny_l = x[i].pos.y;
        if (maxy_l < x[i].pos.y)
            maxy_l = x[i].pos.y;
 
        ldz[i] = maxz_l - minz_l;
        if (x[i].pos.z < minz_l)
            minz_l = x[i].pos.z;
        if (maxz_l < x[i].pos.z)
            maxz_l = x[i].pos.z;
 
        rdx[i] = maxx_r - minx_r;
        if (x[num-1-i].pos.x < minx_r)
            minx_r = x[num-1-i].pos.x;
        if (maxx_r < x[num-1-i].pos.x)
            maxx_r = x[num-1-i].pos.x;
 
        rdy[i] = maxy_r - miny_r;
        if (x[num-1-i].pos.y < miny_r)
            miny_r = x[num-1-i].pos.y;
        if (maxy_r < x[num-1-i].pos.y)
            maxy_r = x[num-1-i].pos.y;
 
        rdz[i] = maxz_r - minz_r;
        if (x[num-1-i].pos.z < minx_r)
            minz_r = x[num-1-i].pos.z;
        if (maxz_r < x[num-1-i].pos.z)
            maxz_r = x[num-1-i].pos.z;
    }
}
 
for(int i = 0; i < num; i++)
{
    int Cl = i;//число элементов в левом подмассиве
    int Cr = num-i-1;//число элементов в правом подмассив
    float Vl;
    if(Cl > 0)
    {
        Vl = max(ldx[Cl],1)*max(ldy[Cl],1)*max(ldz[Cl],1);//находим объем
    }
    else
        Vl = 0;
 
    float Vr;//идентичные действия с правым подмассивом
    if(Cr > 0)
    {
        Vr = max(rdx[Cr],1)*max(rdy[Cr],1)*max(rdz[Cr],1);
    }
    else
        Vr = 0;
    vvh a;
    a.ind = i;//считаем формулу и сохраняем
    float lVVh = ((Cl * Vl)/Vd);
    float rVVh = ((Cr * Vr)/Vd);
    a.VVH = 0+lVVh+rVVh;
    VVH.push_back(a);
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru