методичка с++. Лабораторные работы по программированию в среде С Builder 0
Скачать 1.64 Mb.
|
II. Основные отладочные команды приведены в табл. 1. Таблица 1 Действие Команда меню Run Горячие клавиши Кнопки на панели инст- рументов 1 2 3 4 Запуск программы на исполнение (переход проектирование/вычис- ление, прерывание/вычисление) Run F9 Прерывание выполнения (переход вычисление/прерывание) Program Pause Сброс программы (переход пре- рывание/проектирование) Program Reset Ctrl+F2 Трассировка (пооператорный ре- жим выполнения). При вызове процедур и функций в этом ре- жиме начинается их пошаговое выполнение. После выполнения очередного оператора происхо- дит переход в режим прерывания Trace Into F7 Таблица 1 (продолжение) 14 1 2 3 4 Пошаговый режим выполнения программы. В этом случае Вызов функций выполняет за один шаг, БЕЗ захода в операторы функции Step Over F8 Выполнить программу до курсора и перейти в состояние прерыва- ния Run to Cursor F4 Выполнить функцию от позиции курсора и до конца, после чего перейти в режим прерывания Run Until Return Shift+F8 Переход на строку с выполняе- мым оператором (просматривался код большой программы, а место останова было утеряно) Shoe Exe- cution Point III. Окно Watches Предназначено для просмотра текущих значений переменных, ко- гда программа находится в состоянии прерывания. Для его открытия: View Debug Windows Watches (аналог – Ctrl+Alt+W). Для добавления в список новой переменной: а) находясь в окне Watches, нажать клавишу Insert или выполнить комбинацию Ctrl+A, после чего в появившемся окне в поле Expression ввести имя нужной переменной; б) в окне модуля установить курсор в любую точку имени нужной переменной, вызвать контекстное меню (правая кнопка мыши) и вы- брать Debug Add Watchs at Cursor в) в окне модуля установить курсор в любую точку имени нужной переменной и выполнить комбинацию Ctrl+F5. Для удаления переменной из списка достаточно выделить ее строку в списке и нажать клавишу Delete. Замечания. 1. Существует так называемая «подсказка оценки выражения», благо- даря которой можно узнать текущее значение переменной (или выра- жения) непосредственно в окне модуля (программа должна находить- ся в режиме прерывания). Достаточно задержать курсор мыши над именем нужной переменной или выделенным выражением, и под курсо- ром появится окошко инструментальной подсказки с именем перемен- ной и ее текущим значением. 2. Существует окно Local Variables (для открытия View>Debug Windows>Local Variables), внешне похожее на окно Watch List, од- 15 нако переменные в нем добавляются автоматически и представляют собой все локальные переменные текущей функции. IV. Окно Evaluate/Modify Служит для оценки выражений и изменения значений переменных. Для открытия окна: а) Run Evaluate/Modify; б) в редакторе кода установить курсор на нужной переменной или выражении и в контекстном меню выбрать Debug Evalute/Modify; в) в редакторе кода установить курсор на нужной переменной или выражении и выполнить комбинацию Ctrl+F7. Для оценки выражений: 1. Открыть окно Evaluate/Modify; 2. В поле Expression ввести имя переменной (или выражение), зна- чение которой нужно оценить. 3. Нажать кнопку Evaluate. Результат оценки будет отображен поле Result. Для изменения значения переменной 1. Открыть окно Evaluate/Modify. 2. Указать имя переменной в поле Expression 3. Указать ее желаемое значение в поле New Value 4. Нажать кнопку Modify. Замечание: окно Evaluate/Modify часто используется в качестве простого калькулятора. V. Точки останова (точки прерывания) Ставятся в контрольных точках программы. Программа запускает- ся на выполнение. Достигнув первой по ходу вычисления точки ос- танова, выполнение приостанавливается, программа переходит в со- стояние прерывания. Дальнейший запуск программы на исполнение приведет к отработке программного кода до очередной встретившей- ся точки останова. Для управления простыми точками останова (установки и снятия) служит специальное поле слева от кода, закрашенное серым цветом. Щелчок мышью по этому полю рядом с нужной строкой приводит к ус- тановке точки останова (строка приобретает красный фон, а слева от нее появляется красная точка). Для снятия точки останова нужно щелкнуть мышью по красной точке слева от помеченной строки. Упражнение. Основы работы во встроенном отладчике 16 Пользуясь встроенной справкой (Help C++ Builder Help), определить, что выполняет функция fmod и операция «%». 1. Открыть проект prExampl2Consol. 2. Запустить проект, ввести число 726 и посмотреть результат вычисления. Повторить работу программы для нескольких разных трехзначных чисел. Попытаться понять, что же вычисляет программа. 3. Перейти в код программы, просмотреть и попытаться понять, что про- исходит в функции main() 4. Установить курсор в строку №25 и запустить выполнение программы «до курсора». 5. Ввести число 541 и нажать Enter. Программа должна быть переведена отладчиком в режим прерывания. 6. Открыть список Watch List и добавить в него все переменные, исполь- зуемые в функции. Просмотреть их значения. Вновь попытаться понять, что же за вычисления производятся в программе. 7. Сбросить программу. 8. Установить курсор на строку №20 и вновь запустить выполнение про- граммы «до курсора». 9. Ввести в окне программы другое трехзначное значение и нажать Enter. 10. Проводя трассировку до строки №25, и просматривая значения перемен- ных в окне Watch List, рассмотреть работу программы. 11. Удалить из окна Watch List переменные r2 и r. 12. Открыть окно Local Variables, просмотреть его содержимое. 13. Вызвав окно Evaluate /Modify, изменить значение переменной r1. Про- смотреть эффект в окнах Watch List и Local Variables. 14. Продумать, что будет отображено в качестве результата расчета при дальнейшем запуске программы. 15. Установить точку останова в строку №28. 16. Запустить программу на дальнейшее вычисление и убедиться, что ре- зультаты изменения (п. 13) были ли учтены при дальнейшей работе програм- мы. Продумать причины изменения (не изменения). 17. Сбросить программу. Содержание отчета: 17 1. Титульный лист 2. Цель работы 3. Краткие теоретические сведения (список используемых операторов, их цель, синтаксис, формат и проч.) 4. Код модуля С++ 5. Копии экрана с примерами работы программы и процесса отладки 6. Схема алгоритма программы. 6. Выводы по работе. Контрольные вопросы 1. Дайте определение термина «отладка» 2. Дайте определение термина «встроенный отладчик» 3. В каких состояниях может находиться программа в процессе отладки? Каковы их цели и возможности? 4. Как определить в каком из состояний (проектирование, вычисление (вы- полнение) или прерывание) находится программа в текущий момент време- ни? 5. В каком меню следует искать команды встроенного отладчика? 6. Какие основные отладочные команды Вам известны? Как их выполнить? 7. Приведите примеры ситуаций, в которых необходимо использование комбинации клавиш Ctrl+F2. 8. Чем отличается пооператорный режим выполнения программы (режим трассировки) от пошагового режима? 9. Что может произойти после нажатия клавиши F7 в программе, находя- щейся в режиме прерывания? 10. Чем удобен пошаговый режим выполнения программы? 11. Приведите примеры ситуаций, когда удобно использовать выполнение программы «до курсора». 12. Для какой цели во встроенном отладчике используется окно Wathes? 13. Как открыть окно Watches? 14. Как добавить в окно Watches новую переменную? 15. Как удалить переменную, находящуюся в окне Watches? 16. Можно ли узнать текущее значение переменной (выражения) без исполь- зования окна Wathes? 17. В чем отличие окна Local Variables от Watch List? 18 18. Объясните смысл и принцип работы окна Evaluate/Modify. 19. Что такое точки останова? 20. Как можно определить места установки точек останова? 21. Как можно поставить простую точку останова? Снять? 19 ЛАБОРАТОРНАЯ РАБОТА №3. ОПЕРАТОРЫ ВЕТВЛЕНИЯ, ПРОГРАММИРОВАНИЕ ВЕТВЯЩИХСЯ ПРОЦЕССОВ. Цель работы: освоение способов реализации ветвящихся процессов на основе конструкций языка С++. Краткие теоретические сведения: I. Операторы ветвления в С++ 1. Неполное ветвление: if (условие) <простой оператор>; или if (условие) {<составной оператор>;} 2. Полное ветвление if (условие) {код;} else {код;} 3. Ветвление «с продолжением» if (условие) {код} else if (условие2) {код} else if(условие3) {код} или if (условие) {код} else if (условие2) {код} else if(условие3) {код} else {код} 4. Особенности операторов полного, неполного ветвления и ветвле- ния «с продолжением» 4.1. В С++ логическое выражение после слова if обязательно долж- но быть в круглых скобках; код обязательно должен заканчиваться точкой с запятой вне зависимости от наличия/отсутствия оператор- ных скобок. 4.2.При вычислении условия используются следующие знаки сравне- ния и логические операции Знаки сравнения Логические операции Знак Смысл Оператор Смысл == Равно && Логическое «И» != Не равно || Логическое «ИЛИ» < Меньше ! Логичес ое «НЕ» > Больше <= Меньше либо равно >= Больше либо равно 20 4.3.В условии могут стоять любые операторы, причем это не обя- зательно операторы отношения или логические. Считается, что лю- бой ненулевой результат соответствует значению ИСТИНА (True), а нулевой — ЛОЖЬ (False). 5. Переключатель switch (условие) { case константа: инструкции;break; case константа: инструкции;break; case константа: инструкции;break; … case константа: инструкции;break; default: инструкции } Каждая ветвь case может быть помечена одной или несколькими целочисленными константами или же константными выражениями. Вы- полняется та ветвь case, для которой константа (выражение) сов- пала с условием, указанным в начале переключателя switch. Если выяснилось, что ни одна из констант не подходит, то выполняется ветвь default. Если этой ветви нет, то ничего не выполняется. Ветви case и default могут располагаться в любом порядке. Условие, следующее за ключевым словом switch в круглых скоб- ках, может быть любым выражением, допустимыми в языке программи- рования С++, значение которого должно быть целым. В конце каждой ветви достаточно часто ставится инструкция break. Это связано с тем, что после выполнения одной ветви про- грамма проверяет возможность выполнения остальных "ниже" находя- щихся ветвей. Инструкция break вызывает немедленный выход из пе- реключателя switch. Упражнение 1. Простое ветвление 1. Создать новый консольный проект. Имя файла модуля – unit_If_1, имя файла проекта – Pr_If_1. 2. Написать код, позволяющий: сообщить пользователю, что запущенная программа позволяет вычислить либо значение функции 2 1 y x , либо значение функции 2 1 y x ; вводить значение аргумента функции (переменная хх); 21 вводить целое число-«флажок» (переменная fl), который будет управлять режимом расчета. Будем полагать, что при вводе в качестве значения «флаж- ка» 1 (единицы) будет вычисляться 2 1 y x , а при вводе в качестве значе- ния «флажка» 0 (нуля) будет вычислять функция 2 1 y x Замечание: a. Учесть, что аргумент функции может быть дробным. b. Ввод исходных данных должен сопровождаться поясняющими строками-подсказками для пользователя. 3. Написать программный код для определения нужного значения функции в соответствии со схемой алгоритма, приведенной на рис. 4. Замечание. В схемах алгоритмов на рис. 4 и рис. 5 опущены блоки вво- да/вывода информации, представлена лишь смысловая часть алгоритма. 4. Написать код, позволяющий сообщить пользователю результат расчета. 5. Проверить работоспособность программы. 6. С помощью среды C++ Builder (т. е. не выходя из нее!) сделать копию су- ществующего проекта с именем файла модуля – unit_If_2 и именем файла проекта – Pr_If_2. 7. Изменить файл модуля в соответствии со схемой алгоритма, приведенной на рис. 5. 8. Запустить проект, проверить правильность работы программы. 9. Сохранить проект и закрыть проект. Рис. 4 Рис. 5 2 1 y x fl=0? Да Нет Начало Конец 2 |1 | y x 2 1 y x y y fl=1? Да Нет Начало Конец 22 Упражнение 2. Оператор switch и ветвление с продолжением 1. Открыть проект OperatorSwitch. 2. Сохранить проект и модуль в другой папке (для избежания порчи исход- ников). 3. Просмотреть код его модуля с целью понимания принципа его работы, при необходимости произвести его выполнение в пошаговом режиме в от- ладчике. 4. Нарисовать схему алгоритма работы программы. 5. Запустить проект, убедиться в его работоспособности во всех возможных ветвях. 6. Убрать команды break, запустить проект и просмотреть его работу во всех возможных ветвях. Верна ли она? 7. Просмотреть работу проекта в пошаговом режиме (трассировка должна начаться с оператора switch), чтобы пронаблюдать причины ошибки. Вернуть исходный вариант работы. 8. Изменить проект так, чтобы при расчете третьей функции учитывалась бы ее область определения. Запустить, убедиться в его работоспособности, сохранить все изменения. 9. Выполняется по желанию: сохранить проект и модуль с другими имена- ми. Заменить оператор switch на ветвление с продолжением. 10. Выполняется по желанию: открыть проект, получившийся после выпол- нения п. 8. Изменить его так, чтобы проверка на ввод допустимого номера функции осуществлялась бы в операторе switch. Каким недостатком (мелким и для пользователя) такое решение обладает? Содержание отчета: 1. Титульный лист 2. Цель работы 3. Краткие теоретические сведения (список используемых операторов, их цель, синтаксис, формат и проч.) 4. Коды модулей С++ 5. Копии экрана с примерами работы программ 6. Схемы алгоритмов программ. 7. Выводы по работе. 23 Контрольные вопросы 1. Какие разновидности операторов ветвления существуют в С++? 2. Запишите в общем виде оператор неполного ветвления. 3. Запишите в общем виде оператор полного ветвления. 4. Запишите в общем виде оператор ветвления с продолжением 5. Запишите в общем виде оператор-переключатель. 6. В чем отличие простого оператора от составного? 7. Как отличить простой оператор от составного в коде программы? 8. Как будет выглядеть оператор полного ветвления, если код при истинно- сти условия является простым оператором, а при ложности – составным? 9. Как будет выглядеть оператор полного ветвления, если код при истинно- сти условия является составным оператором, а при ложности – простым? 10. Как будет выглядеть оператор полного ветвления, если код и при истин- ности и при ложности условия является простым оператором? 11. Запишите оператор ветвления с продолжением в общем виде, если из- вестно, что он имеет пять ветвей, каждая из которых выполняется при истин- ности строго одного условия. 12. Объясните термин «логическое выражение». 13. Какие значения может принимать логическое выражение? 14. Какие знаки сравнения используются в С++ при вычислении условия? 15. Какие знаки логических операций используются в С++ при вычислении условия? 16. Укажите приоритеты логических операций. 17. Может ли в условии стоять арифметический, а не логический оператор? 18. Каков принцип работы оператора ветвления, если в условии стоит не ло- гический оператор? 19. Сколькими константами может быть помечена любая из case-ветвей опе- ратора-переключателя? 20. Укажите тип констант, которыми может быть помечена любая из case- ветвей оператора-переключателя. 21. В каком порядке должны располагаться ветви case и default в операторе switch? 22. Объясните назначение ветви default. 23. Объясните цель инструкции break. |