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

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

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

Показать сообщение отдельно
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
30.04.2014, 23:07     Поиск min и max
Понятно, название массива сбивает с толку, у каждого элемента 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);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru