Личное.

Jan 17, 2009 07:41

Лишний раз убедился в нехитрой истине: Если твоя программа выдаёт мистические цифры, то это значит, что ( Read more... )

мои маразмы

Leave a comment

Comments 11

kondybas January 17 2009, 08:09:53 UTC
А на чем пишешь?

Reply

kelavrik_0 January 17 2009, 16:21:56 UTC
На С++, но какая разница? Проблема могла возникнуть на любом языке.

Reply

kondybas January 17 2009, 16:54:20 UTC
Справедливости ради - некоторые языки не допускают декларации переменных без инициализации. Хотя, конечно, используя глобальные переменные можно добиться невероятных девиаций поведения функций :) В тех же плюсах передача аргументов по ссылке требует железного здоровья при отладке.

Reply

kelavrik_0 January 17 2009, 16:58:49 UTC
Так как раз при создании я и инициализировал. Поэтому в функции, которая суммировала (долго объяснять что) я из не инициализировал. Ну а когда я стал использовать функцию не один раз в программе, а несколько, то получил мистическую проблему над которой несколько часов бился. :)

Reply


i_am_realist January 20 2009, 12:11:46 UTC
мораль другая:
функция не должна использовать глобальных переменных без особой надобности.
а если переменная должна быть обнулена, то стоит инициализировать эту переменную внутри функции или внутри конструктора класса, содержащего эту функцию и затем передавать результат вычислений вызывающему методу.

Reply

kelavrik_0 January 20 2009, 15:33:43 UTC
Вообще то, если переменная должна быть обнулена, то её надо обнулять в начале функции, а не надеяться на конструкторы. Переменные то надо передать другим функциям для дальнейшей работы.

Reply

i_am_realist January 20 2009, 17:33:34 UTC
ну у вас же какое-то хитрое суммирование. например если рекурсия, то как раз private перменная к месту и обнуление ставится в конструкторе.

Reply

kelavrik_0 January 20 2009, 17:50:15 UTC
Да ничего хитрого. Сумма зависит от некоторых переменных (a, b, c ...). Первоначально программа считала сумму один раз, а параметры задавались снаружи. А потом я стал менять параметры внутри программы. На самом деле всё было немного сложнее. Там была сумма 4 величин. Потом из них комбинировалось одно число, которое я максимизирую. Ну а параметров у меня 21*9+1. Но это всё внутренние вопросы, в которые я не хотел углубляться.

Ну и как могут особо помочь private переменные? Зачем мне лишний раз создавать переменную с нуля? Мне же надо её запомнить для дальнейшей работы и обнулить в начале нового цикла. Так я лучше прямо возьму и обнулю спецфункцией дублирующей конструктор. И у меня не будет болеть голова о том, что обнуление произойдёт не там, где надо.

Reply


Leave a comment

Up