Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
71
Добавлен:
15.06.2014
Размер:
16.58 Кб
Скачать
Разработала: Залевская Е.А., гр. Ив-218

ЛАБОРАТОРНАЯ РАБОТА №3
ОТЛАДКА ПРИЛОЖЕНИЙ.
ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ.
ОПЕРАТОР ЦИКЛА FOR.

Цель работы: научиться отлаживать приложения, ознакомиться с оператором for.

ОТЛАДКА ПРИЛОЖЕНИЙ

Мастерство программиста - разработчика приложения определяется вовсе не его умением писать безошибочные программы. Мастерство определяется умением разработчика быстро, эффективно и надежно отлаживать и тестировать свое приложение.
Варианты компиляции и сообщения компилятора
Компиляция с последующим выполнением приложения осуществляется командой Run/Run или "горячей" клавишей F9. Выполнение будет проводиться только в случае, если при компиляции не обнаружены неисправимые ошибки и загрузочный модуль создан. Компиляция без последующего выполнения приложения осуществляется командой Project/Compile Project или "горячими" клавишами Ctrl-F9. В обоих вариантах команд компилируются только те модули, которые были изменены с момента последней компиляции. Такая выборочная компиляция позволяет в больших проектах экономить немало времени, поскольку модули, которые не изменялись повторно не компилируются. Если вам надо перекомпилировать все модули проекта, выполните команду Project/Build Project. Она компилирует все файлы проекта независимо от времени их предыдущей компиляции. В меню Project имеется еще две команды компиляции: Compile All Project и Build All Project. Если вы работаете только с одним проектом, то эти команды идентичны рассмотренным командам Compile Project и Build Project. Но если вы работаете с группой проектов, то первая из этих команд осуществляет выборочную компиляцию всех изменных с момента последней компиляции файлов всех проектов группы, а вторая принудительно компилирует все файлы всех проектов группы. В результате компиляции могут быть сделаны замечания Hint, предупреждения - Warning и сообщения об ошибках - Error. С предупреждениями и замечаниями можно соглашаться или не соглашаться, но лучше не пренебрегать ими. Если же вы получили сообщение об ошибке, то приложение не будет выполняться, пока ошибка не будет исправлена.
Если ваше приложение откомпилировалось и стало выполняться, это еще не означает, что оно правильно работает. В нем может быть еще множество ошибок времени выполнения. Причины таких ошибок выявляются в процессе отладки.
Если возникло сообщение об ошибке времени выполнения, дальнейшие ваши действия могут сводится к одной из следующих альтернатив:
1. Нажать клавиши Ctrl-F2 и тем самым прервать выполнение и отладку приложения.
2. Выполнить команду Run/Run, чтобы попытаться, несмотря на ошибку, продолжить вычисления.
Но это ни к чему не приведет, т.к. при очередном щелчке на кнопке ситуация с ошибкой повторится
3. Пройти часть программы по шагам.
Но прежде, чем это делать, вам надо получить какую-то информацию. Иначе такой проход ничего вам не даст.
Итак, наилучший способ действий, если причина ошибки неясна: получить информацию о происходящих в приложении процессах, приведших к ошибке.
Это можно сделать несколькими способами. В ИСР Delphi имеется Мастер оценки приложений - ToolTip Expression Evaluation. Подведя курсор к имени какой-либо переменной в коде, вы можете узнать ее значение в данный момент.
Окно наблюдения Watches
Мастер оценки выражений дает значения только отдельных переменных, а в сложных приложениях вам надо бы иметь перед глазами значения нескольких переменных сразу, чтобы из их сравнения понять причины неправильной работы. Такую возможность предоставляет вам окно наблюдения Watches. Сделать его видимым можно командой View/Debug Windows/Watches в Delphi 5 или 4 или командой View/Watches в предыдущих версиях. Или можно подвести курсор в коде к интересующей вас переменной и нажать Ctrl-F5. Если вы работаете с Delphi 5 или 4, то при этом окно наблюдения автоматически откроется и в нем появится имя переменной и ее значение. Затем вы можете подвести курсор к другой переменной, опять нажать Ctrl-F5 и в окне наблюдения появится новая строка. Более того, вы можете выделить курсором какое-то выражение, нажать Ctrl-F5 и в окне наблюдения увидеть значение этого выражения.
В младших версиях Delphi выражения в окно наблюдений заносятся аналогично рассмотренному выше. Только в них после указания переменной курсором и нажатия Ctrl-F5 появляется окно задания списка наблюдения Watch Properties. Если нажать ОК, то соответствующая строка появится в окне наблюдения. Вы можете написать также в верхнем окне редактирования Expression некоторое выражение и его значение также появится в окне наблюдения.
В любой версии Delphi вы можете выйти в окно Watch Properties и другим путем. Перейдите в окно наблюдения и нажмите клавиши Ctrl-F5. В этом окне вы можете написать в окошке Expression любое выражение, содержащее переменные, константы, функции. Рассмотрим отдельные элементы окна Watch Properties. Окно Repeat count используется при наблюдении массивов и позволяет задать число наблюдаемых элементов массива. Окно Digits определяет число выводимых значащих разрядов чисел с плавающей запятой. Индикатор Enabled позволяет отключить вывод в окно наблюдения соответствующего выражения во время выполнения приложения. Радиокнопки в нижней части окна Watch Properties задают формат вывода значения переменой или выражения. А выпадающий список вверху позволяет выбрать выражение из тех, которые использовались ранее, и при необходимости отредактировать его.
Чтобы удалить какое-то выражение из списка выражений в окне наблюдения, нужно выделить его и нажать Delete. Отредактировать ошибочное выражение можно, сделав на нем двойной щелчок, после чего вы окажетесь в окне Watch Properties и можете заниматься редактированием.
Окно оценки и модификации Evaluate/Modify
Сделать это окновидимым можно, щелкнув правой кнопкой мыши в окне Редактора Кода и выбрав команду Evaluate/Modify. В его верхнем окошке редактирования Expression вы можете ввести имя переменной или выражение. После этого, щелкнув на кнопке Evaluate, вы увидите в окне Result значение этого выражения. Если вы указали имя переменной, а не выражение, то вам становится доступной кнопка Modify, позволяющая изменить значение переменной. Т.е. вы можете вмешаться в порцесс выполнения приложения и насильственно изменять значения переменных.
Если вы решили изменить значение какой-то переменной, вам нужно в окне Expression указать имя этой переменной, в окне New value написать ее новое значение в виде числа или какого-то выражения и нажать кнопку Modify. В результате значение переменной в приложении изменится, что можно видеть в окне Result. Измененное значение вы увидите и в окне наблюдения, если перейдете в него.
Выполнение приложения по шагам
Чаще всего для того,чтобы найти причину ошибки, надо выполнить какой-то фрагмент программы, наблюдая изменения переменных при выполнении каждой команды.
Для прохода фрагмента программы по шагам можно использовать команды:
_________________________________________________________________________________________________
| Команда |"Горячие"| Пояснения |
| | клавиши | |
|----------------------|---------|--------------------------------------------------------------|
|Step Over |F8 |Пошаговое выполнение строк программы, считая вызов функции или|
| | |процедуры за одну строку, т.е. вход в функции и процедуры не |
| | |производится. |
|----------------------|---------|--------------------------------------------------------------|
|Trace Into |F7 |Пошаговое выполнение программы с заходом в процедуры и функции|
|----------------------|---------|--------------------------------------------------------------|
|Trace to Next Source |Shift+F7 |Переход к следующей исполняемой строке. |
|Line | | |
|----------------------|---------|--------------------------------------------------------------|
|Run to Cursor |F4 |Команда выполняет программу до того выполняемого оператора, на|
| | |котором расположен курсор в окне редактора кода. |
|----------------------|---------|--------------------------------------------------------------|
|Show Execution Point |-- |Команда помещает курсор на операторе, который будет выполнять-|
| | |ся следующим |
-------------------------------------------------------------------------------------------------
В процессе отладки по шагам используется уже рассмотренное окно наблюдения Watches.
Точки прерывания
Чтобы ввести простую (безусловную) точку прерывания достаточно в окне Редактора Кода щелкнуть мышью на полоске левее кода требуемой строки. Строка окрасится в красный цвет и на ней появится красная точка. Если вы теперь запустите приложение на выполнение и начнете с ним работать, то произойдет прерывание выполнения, как только управление перейдет к строке, в которой указана точка прерывания. Можно указать несколько точек прерывания в разных местах кода и в разных модулях. Приложение будет выполняться до тех пор, пока управление не перейдет к первой встретившейся в программе точке прерывания. Для того, чтобы убрать точку прерывания, достаточно щелкнуть мышью на красной точке левее кода соответствующей строки.
Точки прерывания можно устанавливать только на выполняемых операторах. Если вы, например, попробуете установить точку прерывания на строке, содержащей объявление переменной, то в момент запуска приложения в красной точке, выделяющей строку прерывания, появится крестик.
Delphi дает возможность установить условия прерывания. Для этого установите курсор в первой позиции строки, в которую вы ввели точку прерывания, и щелкните на этой строке или на точке левее нее правой кнопкой мыши. Во всплывшем меню выберите раздел Breakpoint properties. Перед вами откроется окно свойств точки прерывания, в котором вам надо будет задать нужные параметры.
Команда View/Dedug Windows/Breakpoints в Delphi 5 или 4 или команда View/Breakpoints в более ранних версиях позволяет открыть окно списка точек прерывания.

ОПЕРАТОР ЦИКЛА FOR
Оператор for обеспечивает циклическое повторение некоторого оператора (в частности, составного оператора) заданное число раз. Повторяемый оператор называется телом цикла. Повторение цикла определяется некоторой управляющей переменной (счетчиком), которая увеличивается или уменьшается на единицу при каждом выполнении тела цикла. Повторение завершается, когда управляющая переменная достигает заданного значения.
Оператор for записывается в одной из следующих форм:
for <счетчик>:=<начальное значение> to <конечное значение>
do <оператор>;
или
for <счетчик>:=<начальное значение> downto <конечное значение>
do <оператор>;
где <счетчик> - локальная управляющая переменная порядкового типа. В начале выполнения оператора for ей присваивается <начальное значение>. После каждого очередного выполнения тела цикла <оператор> ее значение увеличивается или уменьшается на единицу. Когда значение управляющей переменной достигает значения <конечное значение>, тело цикла выполняется последний раз, после чего управление передается оператору, следующему за структурой for. <Начальное значение> и <конечное значение> являются выражениями, совместимыми по типу с управляющей переменной.
Если заданные начальное и конечное значения равны друг другу, тело цикла выполняется только один раз. Если в форме с to начальное значение больше конечного или в форме с downto начальное значение меньше конечного, то тело цикла не выполняется ни разу.
Внутри цикла значение управляющей переменной может использоваться в выражениях. Однако, после окончания выполнения структуры for значение управляющей переменной не определено.

Задачи:
1. Дано 10 вещественных чисел. Найти разность между минимальным и максимальным значениями.
2. Заданы N треугольников со сторонами А,В,С. Осуществив в цикле ввод значений А,В,С, подсчитать процент треугольников, у которых все три угла острые (квадрат любой из сторон меньше суммы квадратов других).
3. Дана партия из N однотипных деталей. Переменными X,Y,Z обозначены размеры деталей, а величины C,D,S,T,P определяют допуски на X,Y,Z. Выполнив в цикле ввод значений X,Y,Z (по тройкам), определить процент качества поступившей партии деталей, т.е. процент деталей, у
которых размер Х заключен между C и D, размер Y - между S и T, размер Z не менее P.
4. Заданы N квадратных уравнений с целыми коэффициентами A1, A2, A3. Определить число уравнений, имеющих действительные корни, и суммарное число положительных корней (кратный корень считать за два).
5. Дано N натуральных чисел. Определить среди них количество четных.
6. Дано N натуральных чисел. Определить среди них количество чисел, имеющих четные порядковые номера и являющихся четными числами.
7. Вычислить по схеме Горнера y=11x^10+10x^9+9x^8+...+2x+1.
8. Дано 10 вещественных чисел. Определить образуют ли они возрастающую последовательность.
9. Дана последовательность из семи чисел. Определить со скольких отрицательных чисел она начинается.
10. Определить количество трехзначных натуральных чисел, сумма цифр которых равна N (1<=N<27).
11. Даны N троек положительных целых значений переменных В1,В2,В3. Осуществив в цикле ввод значений В1,В2,В3 , проверить, можно ли их рассматривать как время суток: час(В1), минуты(В2), секунды(В3),подсчитать число таких наборов.
12. Переменные А1,А2,А3 определяют химический состав вещества в процентах. Значение А1 определяет содержание первого химического элемента, А2 - второго, а А3 - процент примесей. Задан результат анализа N веществ. Составить программу, которая подсчитает и напечатает общее
количество веществ, в которых содержание первого элемента не превышает 50% и процент примесей - не более 5% .
13. По данным предыдущей задачи написать программу, которая подсчитает количество и номера веществ, cодержащих оба химических элемента в количестве не менее 45%.
14. Найти разность между наименьшим и максимальным элементами среди N заданных.
15. Даны N натуральных чисел. Найти сумму тех из них, которые кратны пяти.
16. Даны N натуральных чисел. Найти те из них, которые при делении на 7 дают остаток 1, 2 или 5.
17. Большая химическая компания платит своим продавцам по 200$ в неделю плюс 9% от объема продаж за неделю. Например, продавец, который продал за неделю химикалий на $5000 получит $200 плюс 9% от $5000, то есть всего $650. Разработайте программу, которая должна вводить пооче-
редно для каждого из N продавцов объем продаж за последнюю неделю, распечатывать и выводить на экран заработок.
18. Разработайте программу, которая должна определять заработную плату для каждого из N служащих. Компания выплачивает каждому служащему повременную зарплату за первые 40 часов работы и выплачивает в полуторном размере за все рабочие часы сверх 40. Вам дан список сотрудников компании, число часов, отработанных каждым за последнюю неделю, и почасовая ставка каждого сотрудника. Программа должна ввести эти данные для каждого сотрудника, рассчитать и вывести на экран его суммарную зарплату.

Порядок выполнения лабораторной работы:
1. Ознакомиться с материалом статьи "Отладка приложений".
2. Ознакомиться со структурой оператора цикла for, выполнить свой вариант задания лабораторной работы (см. Primers/Primer3).
3. Произвести отладку программы для простых чисел, заведомо просчитав промежуточные параметры и результат. (Просмотр параметров в пошаговом режиме выполнить в окне наблюдений).
Соседние файлы в папке DELPHI