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

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

Войти
Регистрация
Восстановить пароль
 
ritmix10
2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92
#1

Не могу понять, почему так заполняется вектор - C++

18.05.2013, 15:32. Просмотров 200. Ответов 0
Метки нет (Все метки)

Всем привет, возникла вот такая вот проблема с циклом:
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//функция который ищет мин и 2 макс элемента в спектре
double CspectralevaluationDlg::search_interf_max_and_min(vector<double>A)
{
    double temp=A[0];
    double max_1=0, max_2=0;
    int calc_max_1=0,calc_max_2=0,calc_min=0;
    double min_interf=0;
    CString quest;
    for(int i=0;i<A.size()/2;i++)
    {
        if(max_1<A[i])
        {
            max_1=A[i];
            calc_max_1=i;
        }
        else if(max_1!=A[i])
        {
            if(max_2<A[i])
            {
                max_2=A[i];
                calc_max_2=i;
            }
        }
    }
    y_max_spectr1=max_1;
    y_max_spectr2=max_2;
 
 
    temp=y_max_spectr1;
    if(calc_max_1>calc_max_2)
    {
        for(int i=calc_max_2;i<calc_max_1;i++)
        {
            if(temp>A[i])
            {
                temp=A[i];
            }
        }
    }
    else
        for(int i=calc_max_1;i<calc_max_2;i++)
        {
            if(temp>A[i])
            {
                temp=A[i];
                calc_min=i;
            }
        }
        y_min_spectr=temp;
 
        if( (calc_min>calc_max_1 && y_min_spectr<0.8*y_max_spectr1)|| (calc_min<calc_max_2&& y_min_spectr<0.8*y_max_spectr2))
        {
 
            
            quest.Format(L"Разрешимость Cпектра: %s",L"Да");
            spectr=true;//переведем значение, для того чтобы запомнить минимальную для для конкретного koef_noise
        }
        else
        {
            quest.Format(L"Разрешимость Cпектра: %s",L"Нет");
        }
        SetDlgItemTextW(IDC_difr,quest);
 
 
        return y_max_spectr1,y_max_spectr2,y_min_spectr;
        
}
 
DWORD WINAPI RUN(LPVOID pParam)
{
 
    CspectralevaluationDlg *ob=(CspectralevaluationDlg*)pParam;
    vector<double>L(ob->nn);
    double k_1=0;
    bool min_dw=false;
    double w=0;
    if(WaitForSingleObject(ob->h_data,20)==WAIT_OBJECT_0)
    {
        for(double k_noise=ob->koef_noise;k_noise<10;k_noise+=2)
        {
            for(int a=0; a<ob->dw;a++)
            {
 
                ob->Y=func(ob->A1,ob->A2,ob->w1,a,ob->nn,ob->Fd);
                ob->noise=Noise(ob->Y,ob->nn,k_noise);
                ob->zoom(ob->noise);
 
                ob->picture(&ob->pMemDc,ob->rect,ob->y_max,ob->y_min,1);
                ob->Draw(&ob->pMemDc,ob->rect,ob->noise,0,0,255,ob->y_max,ob->y_min,1);
                ob->y_max=0;
                ob->y_min=0;
 
                ob->akp.resize(ob->m);
                ob->akp=correlation(ob->noise,ob->m,ob->nn);
 
 
                ob->zoom(ob->akp);
                ob->picture(&ob->pMemDc1,ob->srect,ob->y_max,ob->y_min,1);
                ob->Draw(&ob->pMemDc1,ob->srect,ob->akp,0,0,255,ob->y_max,ob->y_min,1);
 
                
                k_1=ob->MHJ(L);
                SetEvent(ob->h_data);
 
                //каждый раз будем помещать этот коэф в вектор
                ob->temp_k_dw.push_back(k_1);
                double sum=0;
                for(int i=0;i<ob->temp_k_dw.size();i++)
                {
                    sum+=ob->temp_k_dw[i];
                }
                sum/=ob->temp_k_dw.size();
                //и усредним нащу зависимость, должно быть все норм
                ob->k_dw.push_back(sum);
                sum=0;
                ob->y_max=0;
                ob->y_min=0;
                ob->zoom(ob->k_dw);
                ob->picture(&ob->pMemDc2,ob->rect_k_dw,ob->y_max,ob->y_min,3);
                ob->Draw(&ob->pMemDc2,ob->rect_k_dw,ob->k_dw,0,0,255,ob->y_max,ob->y_min,3);
                ob->frame_k_dw_DC->BitBlt(0,0,ob->rect_k_dw.Width(),ob->rect_k_dw.Height(),&ob->pMemDc2,0,0,SRCCOPY);
 
 
                if(min_dw!=true)
                {
                    if(ob->spectr==true)
                    {
                        //w=a;
                        ob->dw_n.push_back(a);//кинем сюда dw, при котором разрешиться спектр при конкретном шуме
                        min_dw=true;
                        ob->spectr=false;
                    }
                }
            }
            min_dw=false;
            ob->k_dw.clear();
        }
    }
    return 0;
}
Вообщем проблема в следующем: в потоке у меня есть цикл в цикле:
первый цикл у меня меняет уровень шума в синусе, второй перебирает разностные частоты
Я хочу запомнить минимальную разностную частоту, при котором критерий Релея выполняется(функция search_interf_max_and_min)
Вообщем при первом проходе внутреннего цикла я нахожу мин частоту = 4, кидаю ее в вектор. Дадьше у меня цикл заканчивается, меняется уровень шума, опять все пошло, на какой-то определенной частоте Критерий Релея выполняется, но в вектор у меня записывается 0
Помогите пожалуйста в чем у меня проблема?
Очень нужно

Добавлено через 23 минуты
ну так может кто сказать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 15:32     Не могу понять, почему так заполняется вектор
Посмотрите здесь:

Инкрементация (не могу понять почему так?) - C++
Гуру в программировании на C++ начала изучать язык, и сразу вопросы почему при выполнении #pragma argsused #include &lt;conio.h&gt; ...

Символьные литералы, указатели и функция. Не могу понять, почему именно так - C++
Доброго времени суток всем! :) Изучаю С++, всегда стараюсь добить до последнего код, чтобы не было непоняток. Но сейчас наткнулся на...

Не могу понять в каком месте ошибка. Описание класса вектор. - C++
Тип не совпадает, выдает ошибку в 137 строке, возможно неверно описан конструктор.. #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include...

не могу понять что не так((((( - C++
привет всем! у меня проблемка возникла компиятор никак не проглатывает мой код #include &lt;iostream&gt; using namespace std; int main() ...

не могу понять что не так - C++
задание такое : Структура &quot;книга почтой&quot;:-наименование книги;-ФИО автора;-номер по каталогу;-издательство;-колличество в...

Не могу понять почему - C++
Есть кода программы(код взят разобраться): #include&lt;iostream&gt; using namespace std; class coord { protected: public: int x,y; ...

Не могу понять почему... - C++
#include &quot;stdafx.h&quot; void main() { funct(); _getch(); } void funct() {

Не могу понять, почему? - C++
Доброго времени суток=) Такая печаль. Создается класс Окружность с полями радиус, площадь и длина окружности. Нужно создать функции...

Не могу понять, что не так в коде - C++
Целый день маюсь с этой прогой и ничё не выходит. #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() { ...

Обьясните что не так не могу понять - C++
программа должна менять цвет bmp файла но при запуске выдает ошибку что 2 неразрешимых внешних элемента есть и все я пробовал разобраться...

не могу понять,почему не идет - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; struct crs Matrix { int N; int Nz;...

не могу понять, почему не вычисляет - C++
Вот задача, почему не правильно находит я, подскажите? #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;fstream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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