Конспект лекций по предмету "Программирование"


Ошибки при сравнениях

1. Сравниваются ли в программе величины, имеющие несовместимые типы данных (например, строка символов с адресом)?
2. Сравниваются ли величины различных типов или величины различной длины? Если да, то проверьте, правильно ли интерпретируются (поняты) правила преобразования.
3. Корректны ли операторы сравнения? Программисты часто путают такие отношения, как наибольший, наименьший, больше чем, не меньше чем, меньше или равно.
4. Каждое ли булевское выражение сформулировано так, как это предполагалось? Программисты часто делают ошибки при написании логических выражений, содержащих операции «И», «ИЛИ», «НЕ».
5. Являются ли операнды булевских выражений булевскими? Существуют ли ошибочные объединения сравнений и булевских выражений? Они представляют другой часто встречающийся класс ошибок. Примеры нескольких типичных ошибок приведены ниже. Если величина L определена как лежащая в интервале между 2 и 10, то выражение 2<L<10 является неверным. Вместо него должно быть написано выражение (2 < L)&(L < 10). Если же величина L определена как большая, чем Х или Y, то выражение L>X|Y является неверным; оно должно быть записано в виде (L>Х) | (L>Y). При сравнении трех чисел на равенство выражение IF (A=B=C) означает совсем другое. Например, в языке Си произойдет присвоение переменным A и B значения переменной C. А условие будет истинным, если это значение ненулевое. В случае необходимости проверить математическое отношение X=Y=Z правильным будет выражение (X=Y)&(Y=Z). Также в языке Си следует различать булевские и битовые операторы. Например, если A = 1 и B = 2, то условие IF(A && B) будет истинно, а IF(A & B) — ложно.
6. Сравниваются ли в программе мантиссы или числа с плавающей запятой, которые представлены в машине в двоичной форме? Это является иногда источником ошибок из-за усечения младших разрядов. Или из-за неточного равенства чисел в двоичной и десятичной формах представления.
7. Верны ли предположения о порядке оценки и следовании операторов для выражений, содержащих более одного булевского оператора? Иными словами, если задано выражение (А==2)&(В==2)|(С==3), понятно ли, какая из операций выполняется первой: И или ИЛИ?
8. Влияет ли на результат выполнения программы способ, которым конкретный компилятор выполняет булевские выражения? Например, оператор
IF (Х¹О)&((Y/X)>Z)
является приемлемым для некоторых компиляторов PL/1 (т.е. компиляторов, которые заканчивают проверку, как только одно из выражений оператора «И» окажется ложным), но приведет к делению на 0 при использовании других компиляторов.


Не сдавайте скачаную работу преподавателю!
Данный конспект лекций Вы можете использовать для создания шпаргалок и подготовки к экзаменам.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем конспект самостоятельно:
! Как написать конспект Как правильно подойти к написанию чтобы быстро и информативно все зафиксировать.