- •Лабораторный практикум Дисциплина «Информатика»
- •230400 «Информационные системы и технологии»
- •1.1. Порядок создания программы
- •1.2. Ввод и выполнение программы
- •1.3. Модификация программы
- •1.4. Пошаговое выполнение программы
- •1.5. Сообщения компилятора и компоновщика
- •1.6. Действия в случае ошибки выполнения
- •1.6. Помощь справочной службы
- •1. Вычисление площади и периметра геометрической фигуры
- •2. Вычисления по формулам с вещественными числами
- •3. Арифметические операции для целочисленных данных
- •4. Циклы с заданным числом повторений
- •5. Алгоритмы с разветвлениями
- •6. Циклы с условием
- •7. Последовательная обработка данных
- •8. Поразрядные операции
1.5. Сообщения компилятора и компоновщика
Внесём в программу три ошибки (рис. 5):
-
int x, y, K, sum, pr; // символ z заменим на К
-
scan( "%d%d%d", &x, &y, &z); // из слова scanf уберём букву ‘ f ’.
-
sum = x + y // уберём символ ‘;’ – конец оператора
Рис. 5. Сообщения компилятора об ошибках в программе и предупреждения
Установите режим при котором компилятор отображает все свои замечания: М_Project -> Options… (Проект|Опции) -> окно опций проекта -> вкладка Compiler (Компилятор) -> в группе опций Warnings (Предупреждения) включить опцию All (Все). Затем выполните команду Запуск кл_F9.
Внизу окна Редактора Кода появятся сообщения о замечаниях и ошибках (рис. 5) Перевод сообщений на русский язык:
-
[C++ Ошибка] модуль Program1.cpp строка 19: Е2268 Вызов неопределённой функции ‘scan’;
-
[C++ Ошибка] модуль Program1.cpp строка 19: Е2451 Необъявленный идентификатор ‘z’;
-
[C++ Ошибка] модуль Program1.cpp строка 22: Е2379 Отсутствующий оператор;
-
[C++ Предупреждение] модуль Program1.cpp строка 25: W8013 Переменная ‘pr’ возможно используется до того как ей присвоено значение;
-
[C++ Предупреждение] модуль Program1.cpp строка 28: W8080 Объявленный идентификатор ‘К’ нигде не используется.
Чтобы узнать на какую строку указывает сообщение компилятора нужно дважды щелкнуть на этом сообщении, после чего в окне Редактора Кода выделится соответствующая строка.
Ошибки 1 и 2 и предупреждение 5 легко обнаружить по соответствующим сообщениям. Двойной щелчок на сообщении 3 выделяет строку sum = sum + z; и курсор указывает оператор присваивания ‘=’. При отсутствии символа ‘;’, указывающего конец оператора sum = x + y, компилятор рассматривает строки “sum = x + y” и “sum = sum + z;” как одну строку “sum = x + y sum = sum + z;” , в которой между идентификаторами ‘y’ и ‘sum’ нет знака операции.
Предупреждение 4 о том что переменная ‘pr’ не инициализирована и ее значение для вывода в строке 25 не определено
Задание: исправьте по порядку все ошибки и проверьте правильность работы программы
1.6. Действия в случае ошибки выполнения
В вычислительной математике часто встречаются ошибки Деление на ноль или Переполнение.
Для изучения ошибки Деление на ноль модифицируйте программу: строку ”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 (диапазон от -32768 до +32767). Вернитесь к исходному коду программы (рис. 3) и выполните пуск с данными 10, 100, 1000, для которых значение переменной pr=106 > 32767. Результат получается правильный (рис. 7) типа long int (-231 …231 -1).
На рис. 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 будет равно нулю. Сделайте выводы о работе программы.
СПРАВОЧНАЯ СЛУЖБА
Составной частью среды BC++ 3.1 является встроенная справочная служба (на английском языке). Полный перечень разделов и направлений поиска нужной информации приведён в меню Help. Нажатием клавиши F1 можно получить справку, зависящую от текущего состояния среды (контекстно-зависимая справка). Например, если нажать F1 в момент, когда среда обнаружила ошибку в программе, в справке будут сообщены дополнительные сведения о причинах появления этой ошибки и рекомендации по её устранению.
Существуют четыре способа обращения к справочной службе из окна редактора: F1 – получение контекстно-зависимой справки, Shift+F1 – выбор справки из списка доступных справочных сообщений, Ctrl+F1 – получение справки о нужной функции, о константе или переменной и других объектах языка С++, Alt+F1 – получение предыдущей справки.
При использовании команды Shift+F1 на экране появляется справочное окно, содержащее в алфавитном порядке список объектов. Чтобы получить справку, нужно переместить указатель к нужному слову (объекту) и нажать клавишу Enter.
Эту же справку можно получить по-другому: напечатать на экране имя объекта или подвести курсор к имеющемуся уже в тексте в программы стандартному имени и нажать кл_Ctrl+F1.