Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Действия в случае ошибки выполнения




В вычислительной математике часто встречаются ошибки Деление на ноль или Переполнение.

Для изучения ошибки Деление на ноль модифицируйте программу: строку ”pr = x * y * z; ” замените строкой ”pr = x * y / z; ” и выполните программу при z = 0.

В окне отладчика Debugger Exception Notification (рис. 6) видим сообщение об ошибке, приведшей к генерации исключения. Исключения (exceptions) генерируются при различных ошибках – исключительных ситуациях. Cообщение отладчика после перевода выглядит так: “Проект Project_MU1.exe вызвал генерацию исключения класса EDivByZero с сообщением ‘ Деление на ноль ’. Процесс остановлен. Используйте команды Step или Run для продолжения”.

Щелкнув на кнопке OK, попадем в окно Редактора Кода и увидим в коде программы выделенную строку, около которой стоит зеленая стрелка. B операторе этой строки произошла ошибка.

Нажав кл_Ctrl+F2, прерываем выполнение программы. Так поступают в случае, когда понятно, где ошибка и как ее исправить. Если же ошибка непонятна, то, прежде чем прервать сеанс работы с приложением, надо получить дополнительную информацию о состоянии переменных, т.е. провести отладку.

Рис. 6. Выполнение программы с ошибкой Деление на ноль


Далее попытаемся получить сообщение об ошибке переполнения с целочисленными данными типа int (диапазон от -215 …215-1 для 16-разрядного компьютера и -231 …231 -1 – для 32-разрядного компьютера).

Вернитесь к исходному коду программы (рис. 3) и выполните пуск с данными 1000, 1000, 1000, для которых значение переменной pr=109 < 231. Результат получается правильный (рис. 7).

На рис. 8 показаны результаты с исходными данными 104 , 104 , 104 . Произведение чисел должно быть равно 1012, однако результат – отрицательное число – неправильный и нет сообщения об ошибке, приводящей к генерации исключения. При вычислениях с целочисленными данными об этом нужно помнить!

 
 

Рис. 7. Окно Output, анализ переполнения диапазона данных типа int

Рис. 8. Окно Output, переполнение диапазона данных типа long int

Задание: выполните программу с другими наборами входных данных и проанализируйте результаты.

Продолжим рассмотрение темы Переполнение для вещественных чисел типа float (диапазон данных по абсолютной величине от 3.4Е-38 до 3.4Е+38). Дополните код программы строками:

float a = 1E+20, b;

b = a * a;

printf(" float a = %e b = %e \n", a, b);

Переменная b должна иметь значение 1040 > 3.4Е+38, поэтому после пуска программы на экране появится окно с сообщением отладчика огенерации исключения класса EOverflow: ‘Переполнение при операции с плавающей запятой’… (рис. 9). Щёлкните кн_ОК и остановите выполнение программы кл_Ctrl + F2.

 
 

Рис. 9. Переполнение в выражении с данными типа float

Задание: выполните пуск программы для следующих значений переменной а: 1Е+10, 1Е-10 и 1Е-20. Найдите значение а, при котором значение b будет равно нулю. Сделайте выводы о работе программы.

1.7. Ошибки в форматах ввода/вывода

Изучим работу программы при наличии ошибок в форматной строке функций scanf() и printf() - неправильное указание спецификации типа переменной. Измените форматную строку "%d%d%d" программы (см. рис. 10) на "%d%d%f". Ввод значения переменной z целого типа будет выполняться по формату вещественного числа. При выполнении программы ошибка формата ввода не обнаруживается компилятором, и результаты вычисления будут неверными.

Изучите самостоятельно работу программы с ошибками в спецификациях вывода данных функции printf(). Ввод данных выполните правильно, а вывод результатов с ошибками в форматной строке printf().

Рис. 10. Ошибка в спецификации формата ввода переменной z





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 497 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Жизнь - это то, что с тобой происходит, пока ты строишь планы. © Джон Леннон
==> читать все изречения...

2323 - | 2092 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.