Путевской Виктор (vipernn) wrote,
Путевской Виктор
vipernn

Category:

Программирование - это внесение ошибок в программу!

Если отладка программы есть отыскание и удаление ошибок, то само написание программы - есть внесение в нее ошибок!

Примерно с год назад при написании программы мною была написана процедура поиска индекса элемента вектора:

inline void vector_max(double src, double& out, size_t _N)noexcept
{
out = *src;
--_N;
++src;
for(;_N;--_N,++src)
out = max(*src, out);
}

Для сокращения кода вместо введения переменной цикла и её увеличения на каждом шаге была использована хитрость - аргумент _N (число элементов вектора) на каждом шаге уменьшался. Соответственно, в цикле проверялось его равенство нулю, а не достижение размера вектора переменной цикла. Процедура была протестирована и успешно используется по назначению.
Дополнительно ("про запас" и "на всякий случай") была написана процедура, которая помимо максимального значения возвращала его индекс. Для этого исходная процедура была несколько модифицирована:

inline void vector_max_index(double* src, size_t& _ID, size_t _N, double& out)noexcept
{
out = *src;
_ID = 0;
--_N;
++src;
for(;_N;--_N,++src)
if(gt(*src,out))
{
out = *src;
_ID = _N;
}
}


Поскольку исходная процедура работала без ошибок, то модифицированная процедура не тестировалась... А зря!

Понадобилась она вчера и была пристроена в новую программу. Без тестирования... Но при тестировании целиком всей программы выяснилось, что не все так хорошо, как казалось. Еще бы! Для исходной процедуры текущее значение _N было неактуально, главное, что оно больше нуля. А вот при поиске индекса текущее значение _N и индекс текущего элемента совпадают только для среднего элемента вектора (если такой есть) Пришлось переписывать правильно:

inline void vector_max_index(It src, size_t& _ID, size_t _N, T& out)noexcept
{
out = src[0];
_ID = 0;
for(size_t i = 1;i < _N;++i)
if(gt(src[i],out))
{
out = src[i];
_ID = i;
}
}


Так что тестируйте все свои процедуры!
Tags: it, программирование, рабочее
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 1 comment