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

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

Восстановить пароль Регистрация
 
ritmix10
2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92
18.05.2013, 15:32     Не могу понять, почему так заполняется вектор #1
Всем привет, возникла вот такая вот проблема с циклом:
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++ не могу понять что не так
не могу понять что не так((((( C++
C++ Инкрементация (не могу понять почему так?)
C++ Не могу понять в каком месте ошибка. Описание класса вектор.
Не могу понять почему C++
Не могу понять, почему? C++
C++ Символьные литералы, указатели и функция. Не могу понять, почему именно так

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

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

Текущее время: 13:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru