Когда количество элементов п=0, переменная и инициализируется значением -1, поэтому обращение к элементу с этим индексом приведет к выходу за границы массива. Чтобы это утверждение заработало, нужно слегка изменить его, добавив проверку границ:
assert((u<0 || x[u] < t) && (u+1 >= n || x[u+l] > t)).
Это утверждение позволит найти ошибки в некорректных программах.
Мы показали сходимость поиска, доказав, что с каждой итерацией диапазон сужается. Этот факт можно также проверить во время выполнения программы, добавив немного дополнительных вычислений и одно утверждение. Инициализируем переменную size значением п+1, а затем добавим следующие строки после оператора for:
о 1ds1zе = size .
S1ZG-U - 1 + 1,
asser t(size < oldsize):
Мне стыдно признаться, сколько раз я напрасно пытался отладить функцию двоичного поиска, когда дело было в том, что входной массив не был отсортирован. Определив функцию sorted, приведенную ниже, мы сможем высказать утверждение assert sortedQ) (листинг 5.4).
Листинг 5.4. Проверка массива на упорядоченность
1nt sorted( )
{ inti.
for (i = 0, i < n-1, i ++) if U[i] > x[i + l]) return 0. return 1.}
Следует быть аккуратным, если вы хотите выполнять эту ресурсоемкую проверку только один раз, перед выполнением поиска. Добавление проверки в цикл приведет к тому, что двоичный поиск будет выполняться за время, пропорциональное n\ogn\
Утверждения удобны для тестирования функции внутри тестирующей программы, а также по мере перехода от проверки компонентов к проверке системы. Некоторые проекты определяют утверждение assert с помощью программы предвари* тельной обработки, так, чтобы эти утверждения были удалены при компиляции и не приводили к «накладным расходам» при выполнении программы. С другой стороны, Топи Хоар сравнивал программиста, использующего утверждения только при отладке и отключающего их при финальной компиляции программы, с моряком, который носит спасательный жилет на берегу и снимает его, выходя в плавание.
Глава 2 книги Стива Магуира «Создание серьезных программ» (Steve Magiure, Writing Solid Code, Microsoft Press, 1993) посвящена использованию утверждений в промышленных программных системах. Он подробно излагает несколько жизненных примеров использования утверждений в продуктах и библиотеках Microsoft.
Опубликовал vovan666
April 16 2013 23:58:36 ·
0 Комментариев ·
3013 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.