7. Условные вычисления

Фильтры значений

Причину ошибки мы нашли — это деление на ноль. Конечно, хорошо, что C++Builder автоматически проверяет наличие исключительных ситуаций, однако на все случаи жизни таких ситуаций не напасешься. Харошо бы самостоятельно проверять допустимые значения вводимых пользователем переменных — ведь можно, например, в качестве обменного курса указать -2, и калькулятор будет работать корректно, однако он станет выдавать отрицательные значения, что логически совершенно неправильно. Одно дело, когда сразу видно, что введено неверное в смысловом плане значение, и другое дело, когда вводимое значение может использоваться в программе для сложных вычислений. Например, если указать отрицательный курс доллара в бухгалтерском приложении, это может привести к полной остановке работы всей бухгалтерии и самым печальным последствиям.

h01091.jpg

Кстати, именно из-за отсутствия проверок в известных программах на допустимые диапазоны значений хакерам и удается их взламывать и находить «дыры» в защите. Например, в первых версиях Microsoft Internet Explorer 4.0 была найдена довольно оригинальная ошибка: если длина строки с адресом интернетовского Web-узла превышает 255 символов (в Си++ есть тип unsigned char с диапазоном значений от 0 до 255; переменная этого типа, видимо, и использовалась для хранения длины строки), то остаток этого адреса -может интерпретироваться Windows как программный код, который потенциально можно (хотя и довольно трудно) сделать вредным.

Профессионально сделанные коммерческие программы не позволят ввести недопустимые по логике их работы значения (хотя, как мы только что могли убедиться на примере, так бывает не всегда). Для этого программисты нри-

109