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

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

Войти
Регистрация
Восстановить пароль
 
iVeage
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 9
#1

Вложенные циклы - C++

18.09.2012, 22:14. Просмотров 614. Ответов 6
Метки нет (Все метки)

Всем привет!
Суть проблемы в следующем: вычисляется функция R[l][w], где внешний цикл по l, внутренний по w. Затем вычисляем функцию Beam[i[k]+=fr[w]*R[l][w]*cos(t*w), здесь i-внешний, k-внутренний. Вот код:

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
T_complex ** calc_reflected_beam ( T_complex *fr, T_complex **R,                        
                                 double fr_begin, double fr_end, double fr_step,    
                                 double f_begin, double f_end, double f_step,  
                                 double l_begin, double l_end, double l_step)
{
    double x, p, nkappa;
    int  i, k, j, n, l;
    int max_NNN_R_BEAM;
 
    max_NNN_R_BEAM = (int) floor ( ( l_end - ( - l_end) ) / l_step)+2;
    T_complex ** R_BEAM;
    R_BEAM = (T_complex **)malloc(max_NNN_R_BEAM * sizeof(T_complex*));
    for(int i=0; i < max_NNN_R_BEAM; i=i++){
    R_BEAM[i] = (T_complex*)malloc(max_NNN_R_BEAM*sizeof(T_complex));
    }
    i = 0;
    n = 0;
    for (nkappa = l_begin; nkappa < l_end; nkappa = nkappa + l_step )
    {
        k=0;
        for (x = f_begin; x < f_end; x = x + f_step)
        {
            R_BEAM[i][k].re = 0;
            R_BEAM[i][k].im = 0;
            j=0;
            l=0;
            for ( p = fr_begin; p < fr_end; p = p + fr_step)
            {
                R_BEAM[i][k].im += (fr[l].re*R[n][j].im * cos ( p * x ) + fr[l].im*R[n][j].re * cos ( p * x ) + fr[l].re*R[n][j].re * sin ( p * x ) - fr[l].im*R[n][j].im * sin ( p * x ))* fr_step/(dsqrt_2_pi);
                R_BEAM[i][k].re += (fr[l].re*R[n][j].re * cos ( p * x ) - fr[l].im*R[n][j].im * cos ( p * x ) - fr[l].re*R[n][j].im * sin ( p * x ) - fr[l].im*R[n][j].re * sin ( p * x ))* fr_step/(dsqrt_2_pi);
                j += 1; 
                l += 1;
            }
            k += 1;
        }
        n += 1;
        i += 1;
    }
    return ( R_BEAM );
}
Функцию R[l][w] не привожу так как там все работает. Но функция представленная выше, реализует как раз Beam[i[k]+=fr[w]*R[l][w]*cos(t*w) не работает: то выход за пределы цикла, то еще чего. Не могу понять в чем дело.
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2012, 22:14     Вложенные циклы
Посмотрите здесь:

Вложенные циклы - C++
for (int i = 1; i &lt; 10; ++i) { for (int j = 1; j &lt;= i; ++j) cout &lt;&lt; &quot;*&quot;; cout &lt;&lt; &quot;\n&quot;; } Имеется такой...

Вложенные циклы С++ - C++
вывести на экран числа в виде таблицы 6 6 6 6 6 7 7 7 7 8 8 8 9 9 10

Вложенные циклы - C++
Найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых нет двух одинаковых цифр. Подсчитать количество таких чисел. ...

Вложенные циклы - C++
Дано натуральное число n и вещественное число x. Вычислить \sum_{j=1}^{n}((2i)!+|x|)/({i}^{2})!

Вложенные циклы - C++
Не совсем понимаю работу вложенных циклов. Объясните пожалуйста следующее. Инструкция myArr=myArr; myArr=min; относится инструкцией...

вложенные циклы - C++
Вычислить сумму n членов выр-я: pow(-1, i+1)/pow(i+1, 2) , i=1,2,3,...n. Помогите пожалуйста с решением задачи

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
18.09.2012, 22:44     Вложенные циклы #2
Разбей это полотнище на 4-5 функций поменьше. Может быть, тогда станет понятнее. Добрый совет, ничего личного.
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
19.09.2012, 00:26     Вложенные циклы #3
Присоединяюсь к совету про разбиение на меньшие, логически связанные функции.
Ну и отладчик - лучший помошник в таком случае.
iVeage
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 9
19.09.2012, 00:38  [ТС]     Вложенные циклы #4
С моим опытом в C++, не получится! Условие задачи найти значения для каждой l - поэтому я реализовал расчет таким способом. А есть ли методы, которые позволяют сохранить алгоритм, при этом разбить расчет на части?
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
19.09.2012, 00:55     Вложенные циклы #5
Цитата Сообщение от iVeage Посмотреть сообщение
С моим опытом в C++, не получится! Условие задачи найти значения для каждой l - поэтому я реализовал расчет таким способом. А есть ли методы, которые позволяют сохранить алгоритм, при этом разбить расчет на части?
Не уверен, что понял вопрос, но метод предельно прост - вместо одной здоровенной функции пишете несколько маленьких, которые в бывшей здоровенной функции вызываете.
Попробуйте на русском языке рассказать, что должна делать функция - это ее результат и побочные эффекты. Расскажите, как она должна это делать - это те самые маленькие функции.
Например, у вас в начале идёт инициализация переменных, выделение памяти. Внутри цикла вы вычисляете комплексное число по какой-то формуле - это все отличные кандидаты на вынос в отдельные функции. В итоге функция calc_reflected_beam станет вполне читаемой (примерно как англицйский текст, и вам же станет легче разобраться.
iVeage
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 9
19.09.2012, 01:17  [ТС]     Вложенные циклы #6
Я понял, что необходимо разбить, мне не понятно как. Я исходил из математического смысла, а именно:
два внутренних цикла - это, по сути, интегрирование. Внешний, же, выполняет интегрирование для каждой l.
Алгоритм:
1. внутренний цикл по p - идет пересчет раннее вычисленных значений функций (неупомянутых здесь) для каждого x;
2. цикл по x - здесь идет суммирование и запись в массив по х;
3. цикл по l - пересчет по i и n и запись в массив по i.
Короче, говоря я не представляю как разбить циклы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2012, 09:51     Вложенные циклы
Еще ссылки по теме:

C++ Вложенные циклы - C++
Всем привет,у меня такое задание :Посчитать и показать все варианты, которыми можно выдать на руки 200 гривен, доступные номиналы купюр 5,...

Вложенные циклы - C++
Всем привет. Изучаю С++ совсем недавно - по книге. Собсно вопрос. В главе о циклах в книге приведен пример - использование вложенного...

Вложенные циклы - C++
Всем привет. Найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых нет двух одинаковых цифр. Подсчитать количество...

Вложенные циклы - C++
как вывести на зкран следуюшие 41 42 ... 50 51 52 ... 60 61 62 ... 70 71 72 ... 80 с помошью вложенний цикл... Так...


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

Или воспользуйтесь поиском по форуму:
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
19.09.2012, 09:51     Вложенные циклы #7
Может, return должен быть после цикла?
Yandex
Объявления
19.09.2012, 09:51     Вложенные циклы
Ответ Создать тему
Опции темы

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