Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
VВладимир
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
1

Применение циклов для расчета параметров объектов на С++

12.09.2014, 16:24. Просмотров 621. Ответов 7
Метки нет (Все метки)

Здравствуйте! Помогите, пожалуйста, в решении такой проблемы. Написал простенькую программу на С++, в главной функции рассчитываются параметры одного класса Neurobase для 2-х объектов Neuro11и Neuro12 с помощью циклов for. Проблема в том, что одновременно параметры этих объектов с помощью цикла for не рассчитываются - после компиляции программа выполняет цикл только для одного объекта - Neuro11, а если его цикл закомментировать, то выполнит цикл только Neuro12, а Neuro11 не выполнит. Подскажите, пожалуйста, в чем дело. Привожу 2 почти одинаковых цикла для этих объектов, которые фигурируют в функции main.

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
for(int i = 0; i < c1; i++)
  { Neurobase Neuro11(Y1,Y2,Y3,Y4,Y21,Y22,Y23,Y24,0.5,0,0,0,0,32.9,0,0,0,0,28,0,0,0,0,0,0,0,0,0); 
    Neuro11.CountS();
    Y12=Neuro11.CountY();
    Y37=Neuro11.CountYY();
    Neuro11.getYY();
    Y38=Neuro11.CountD();
    Neuro11.getD();
    Neuro11.CountError();
    Neuro11.getError();
    Neuro11.Counttetafirdlayer();
    Neuro11.Directionconditionfirdlayer3(); 
    Neuro11.gettetafirdlayer(); 
    Neuro11.Countweightw1firdlayer(); 
    Neuro11.Countweightw2firdlayer();
    Neuro11.Countweightw3firdlayer();
    Neuro11.Countweightw4firdlayer(); 
    Y21= Neuro11.getweightw1firdlayer(); 
    Y22= Neuro11.getweightw2firdlayer();
    Y23= Neuro11.getweightw3firdlayer();
    Y24= Neuro11.getweightw4firdlayer();  
 
    do {c1++;} while ((((Y37-Y38)*100/Y37)<5) && (((Y37-Y38)*100/Y37)>-5     
         
      Neuro11.getconditionfirdlayer();                                    
}
 
for(int i = 0; i < c; i++)
  { Neurobase Neuro12(Y1,Y2,Y3,Y4,Y25,Y26,Y27,Y28,0.5,0,0,0,0,32.8,0,0,0,0,27.5,0,0,0,0,0,0,0,0,0); 
     
    Neuro12.CountS();
    Y12=Neuro12.CountY();
    Y29=Neuro12.CountYY();
    Neuro12.getYY();
    Y30=Neuro12.CountD();
    Neuro12.getD();
    Neuro12.CountError();
    Neuro12.getError();
    Neuro12.Counttetafirdlayer();
    Neuro12.Directionconditionfirdlayer4(); 
    Neuro12.gettetafirdlayer(); 
    Neuro12.Countweightw1firdlayer(); 
    Neuro12.Countweightw2firdlayer();
    Neuro12.Countweightw3firdlayer();
    Neuro12.Countweightw4firdlayer(); 
    Y25= Neuro12.getweightw1firdlayer(); 
    Y26= Neuro12.getweightw2firdlayer();
    Y27= Neuro12.getweightw3firdlayer();
    Y28= Neuro12.getweightw4firdlayer();  
       
    do {c++;} while ((((Y29-Y30)*100/Y29)<5) && (((Y29-Y30)*100/Y29)>-5)); 
 
              Neuro12.getconditionfirdlayer();                                    
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2014, 16:24
Ответы с готовыми решениями:

Разработать структуру и функции для расчета основных параметров электрической цепи
Прмогите написать прогу : Разработать структуру и функции для расчета основных параметров...

Применение циклов, условных операторов
Я будущий студент компьютерных наук я ни разу не сталкивался с С++,и мне приходится изучать...

Применение циклов в расчетах с матрицами
Здравствуйте! Помогите, пожалуйста разобраться в следующей проблеме: пытаюсь прибавить к каждому...

Кролики и гуси (применение циклов)
У гусей и кроликов вместе 64 лапы. Сколько может быть кроликов и гусей (указать все сочетания)? ...

7
John Prick
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
12.09.2014, 16:43 2
У тебя объекты создаются внутри цикла. Соответственно, когда цикл заканчивается, они удаляются.

И ещё. Что это?
C++
1
do {c1++;} while ((((Y37-Y38)*100/Y37)<5) && (((Y37-Y38)*100/Y37)>-5
Во-первых, где скобки закрывающиеся. Во-вторых, что за условие странное? А если оно выполнится, то получим бесконечный цикл.
0
VВладимир
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
12.09.2014, 16:52  [ТС] 3
Вот в том и вопрос, как сделать, чтобы оба цикла выполнялись. Ко 2 замечанию - забыл в конце скобку и точку с запятой поставить. Оно выглядит так:
C++
1
do {c++;} while ((((Y29-Y30)*100/Y29)<5) && (((Y29-Y30)*100/Y29)>-5));
Его смысл в том, что цикл выполняется до тех пор, пока ошибка не станет в пределах от +5% до -5% - все в принципе работает, даже количество проходов цикла выдается. Но оба цикла вместе не работают.
0
John Prick
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
12.09.2014, 16:58 4
Цитата Сообщение от VВладимир Посмотреть сообщение
Его смысл в том, что цикл выполняется до тех пор, пока ошибка не станет в пределах от +5% до -5% - все в принципе работает, даже количество проходов цикла выдается. Но оба цикла вместе не работают.
Очень сомневаюсь. Ни одна из переменных, участвующих в условии цикла, не изменяется в самом цикле.

Добавлено через 39 секунд
ПС. Для оформления кода здесь есть целая куча тэгов. Пользуйся.
0
VВладимир
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
12.09.2014, 18:06  [ТС] 5
Переменные Y25, Y26, Y27, Y28 подставляются уже посчитанными, а затем в конечном счете рассчитываются с помощью функций Neuro12.getweightwfirdlayer() и снова подставляются как входные параметры в Neurobase Neuro12(...), затем снова пересчитывются с помощью функций Neuro12.getweightwfirdlayer() и так до тех пор, пока не будет выполнено условие с циклом while. Вроде все работает, при запуске после компиляции видно, как "прокручивается" нужное количество циклов и как вычисляются все переменные. Я сначала испытывал расчет на нескольких циклах; когда убедился, что все работает, создал нужное условие.
0
John Prick
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
12.09.2014, 22:38 6
VВладимир, ты что-то недопонимаешь.
Вот твой код, как бы написал его аккуратный программист:
C++
1
2
3
do {
    c++;
} while ( (((Y29 - Y30) * 100 / Y29) < 5) && (((Y29 - Y30) * 100 / Y29) > -5) );
Предположим Y29 = 100, Y30 = 0. Скажи, когда этот цикл закончится?
0
VВладимир
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
14.09.2014, 16:49  [ТС] 7
Условие - это только ЧАСТЬ цикла for. А ы взяли только условие из цикла. Раньше цикл работал без условия - я задавал разное количество проходов, и он выполнялся: рассчитывались переменные Y25, Y26, Y27, Y28, затем снова подставлялись в качестве начальных значений в объект Neurobase Neuro12(...), затем снова рассчитывались и так до тех пор, пока количество проходов не закончится. Теперь, чтобы цикл автоматически останавливался после того, как ошибка достигнет приемлемого значения, я и написал это условие. То есть теперь сначала подставляются переменные и рассчитываются все функции в цикле. Когда переменные Y25, Y26, Y27, Y28 (а это последняя часть цикла, где нет условия - то есть условие зацикливания) рассчитаны, количество циклов увеличивается на 1 ( после слова do) , затем происходит проверка условия ,которое находится после слова while. Если оно выполняется, цикл останавливается. Если нет, то снова переходит на начало, подставляются переменные Y25, Y26, Y27, Y28 и все рассчитывается еще раз. И так до выполнения условия Вы же просто выбрали из цикла for его часть - это условие - конечно, если его рассматривать независимо от самого цикла, непонятно, когда оно будет выполнено. А так все работает. Я раньше задавал количество циклов вручную. Например, задавал 800 циклов - вижу, условие выполнено - и хорошо. Теперь просто надо автоматизировать выполнение условия... Ну и, конечно, что-то сделать, чтобы и другой цикл тоже работал...

Добавлено через 8 минут
Причем переменная Y30 имеет фиксированное значение (является суммой константных значений других переменных, а Y29 рассчитывается. То есть по мере увеличения количества циклов ошибка либо уменьшается, когда значение Y29 приближается к Y30, либо, наоборот, увеличивается, в зависимости от знака другой переменной, которая в этом коде явно не фигурирует. Наверняка, у Вас большой опыт в программировании, но Вам трудно понять мой код, когда он приведен не полностью - это и понятно. Но с циклом должно быть все точно, я и вручную его расчет проверял...Буду дальше изучать С++, чтобы понять, что сделать, чтобы оба цикла выполнялись или, может, изменю его как-нибудь...
0
John Prick
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
14.09.2014, 22:54 8
Феерический бред.
У тебя внутри цикла for есть цикл do-while. Ты не условие добавил, а ещё один цикл.
0
14.09.2014, 22:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2014, 22:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Применение параметров для выделенной части текста
Есть текст бокс. Как применить к только ВЫДЕЛЕННОЙ части текст бокса какие-то параметры, ну...

Программа для расчета параметров
Доброго всем дня суток! Помогите пожалуйста не могу сам никак разобраться В общем, у меня есть...

Модуль для расчета параметров куба
Перед сессией опять эти вредные модули всплыли! Помогите, пожалуйста, я даже не буду разрисовывать...

Применение записей для моделирования геометрических объектов
На плоскости имеется N квадратов со сторонами, параллельными осями координат. Найти все...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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