Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
180
Добавлен:
24.02.2016
Размер:
3 Мб
Скачать
☆

5.6. Примеры некоторых часто встречающихся циклических алгоритмов Вычисление заданного члена рекуррентной последовательности

Последовательность чисел а0,а1,а2...ап называется рекуррентной первого порядка, если каждый следующий член выражается через один предыдущий по определенному правилу <р: ak = (p{ak-1). Поэтому для того, чтобы найти

все члены последовательности достаточно задать начальный а0.

Фрагмент программы вычислений члена с номером n, при заданном а0 , имеют вид:

a:=a0; for k:=1 to n do a:=f(a);

Заметим, что для реализации алгоритма понадобилось не n, а только две переменных а0 и а.

Последовательность ак сходится к некоторому пределу а, если при k — °о, - a — 0. При увеличении k так же стремится к нулю разность

между соседними членами последовательности - ak-1\ — 0. Поэтому для

нахождения предела последовательности а с заданной точностью s использу­ется следующий алгоритм:

a:=a0; it:=0; repeat

w:=a; it:=it+1; a:=f(a);

until (abs(a-w)<eps) or (it>100);

Здесь it - счетчик количества повторений, который служит как для их подсчета, так и страхования от зацикливания алгоритма, если последователь­ность не сходится к конечному пределу.

Вычисления сумм с использованием рекуррентной последовательности

В практике вычислений часто приходится находить всевозможные суммы. Использование рекуррентности позволяет значительно упростить вы-

n

числения. Представим задачу суммирования в общем виде как S = ^ ak , где

k=0

а0, а1,...ак...ап, последовательность, каждый член которой представляет неко­торую функцию от k. Предположим, что из последовательности ак удается выделить рекуррентную последовательность ск: ck = (p(ckпредставив

ак=ск-Ьк, где bk функция от номера k - f(k). В этом случае программа вычисле­ния суммы имеет вид: c:=c0; s:=c*f(0); for k:=1 to n do begin c:=<p(c); s:=s+c*f(k); end;

ЛЕКЦИЯ 6. ОТЛАДКА ПРОГРАММ И ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ

Закон программирования: «В каждой вновь написанной программе все­гда найдется, по крайней мере, одна ошибка». Написать сложную программу без ошибок не может никто. Мастерство программиста определяется умением составить верный алгоритм, быстро отладить и протестировать программу его реализующую, т. е. :

а) выявить и исправить все ошибки;

б) убедиться в правильности алгоритма.

Итак, вы составили алгоритм, написали программу, запустили (F9) и ... чаще всего обнаружили ошибки!

6.1. Ошибки на этапе компиляции

Эти самые простые, их вылавливает компилятор, он останавливается в том месте, где обнаружил ошибку и внизу окна текста выдает сообщение о ее характере .

Например:

-«Несоответствие типа i:=2.5;» -«Переменная нигде не используется»

Компилятор часто выдает что-то другое, указывая на совершенно пра­вильную строку, но обычно это часто результат ошибки в предыдущей стро­ке. Постарайтесь исправить все замечания компилятора, даже если они несу­щественны. Здесь полезно знать, что если программа содержит модули, то при нажатии (F9) перекомпилируются только те из них, в которых что-то ме­нялось. В режиме Project/ Build Project происходит перекомпиляция всех мо­дулей, входящих в проект. Это бывает полезно отменить некоторые опции отладки для повышения эффективности результирующего модуля.

возмущается

Бывает так: вы в окошке Edit набрали 0.256, а надо 0,256. Он говорит, что же ты мне подсовываешь неверную информацию? Или:

y:=0;

a:=x+1/y; (он говорит: деление на ноль)

ln(x-1) (он говорит, что ты не знаешь, что под логарифмом должно быть >0)

F:=F*i; (переполнение, слишком большое число для моего

ячеистого желудка)

Когда компьютер встречает подобную ситуацию, он анализирует, что же это такое. У него в памяти заложено порядка сотни таких стандартных си­туаций. Он покопается в них, находит то, что ему встретилось, прекращает выполнение и выдает соответствующее сообщение.

Такие ситуации называются исключительными (Exceptions). Обычно, при нажатии _ok вам будет показано место, где это произошло.

Получив такое сообщение, надо конечно очень хорошо подумать, что привело к такой ошибке.

Обычно для анализа ошибки желательно получить дополнительную информацию. Самый простой способ- это пошаговое исполнение с просмот­ром результатов, используя клавиши (F7 - выполнить операторы, находящие­ся в строке курсора, F8 - тоже, что и F7, только без захода в процедуры, F4 -выполнить все операторы до строки, на которую указывает курсор).

Для этого щелкните мышью напротив строки, на которой следует оста­новиться, при этом строка выделяется красным цветом, а в программу зане­сется точка прерывания. После этого запускается программа. Она остановит­ся в этом месте. Подведя и зафиксировав курсор напротив переменной, мож­но посмотреть, чему она равна.

Более удобно делать просмотр значений с помощью окна наблюдения (Watch List). Мастер оценки выражений вам его покажет, если подвести кур­сор к переменной и нажать Ctrl F5.

Кроме окна Watch List для отладки используется также окно отладки инспектора Run/Inspect.

Добавление еще одной переменной в окно происходит установкой на нее курсора и нажатием нажать Ctrl F5. Можно выделить целое выражение и аналогично добавить его в Watch List.

В процессе отладки полезно отключать оптимизацию транслируемого кода в окне Project/Options/Compiler/Optimization. Выполнить Project / Build Project.

После отладки сделать обратное!!!

6.3. Понятие исключительной ситуации Под исключительной ситуацией понимается такое состояние, возни­кающее при выполнении некоторых действий программы (например: деление на ноль, попытка открыть несуществующий файл, выход индекса за пределы массива и т.п.), при котором требуется выполнить определенные операции для продолжения ее работы или корректного завершения.

При работе в среде Delphi возникновение одной из вышеназванных или других подобных ситуаций, которых насчитывается более 50, обычно приво­дит к полной остановке выполнения программы с указанием причины, что не всегда удобно. Каждая такая ситуация имеет свое имя и тип. Для повышения надежности программы и защиты ее от преждевременного завершения в Del­phi разработчику предоставлена возможность с помощью определенных опе­раторов «перехватить» различные исключительные ситуации и организовать выполнение определенных операций при их возникновении.

При отладке программы, использующей обработку исключительных ситуаций предварительно необходимо отменить стандартную реакцию сре­ды Delphi на эти ситуации. Для этого надо в главном меню Delphi отключить опцию Stop on Delphi Exceptions находящуюся в Tools Debbuger Options на закладке Language Exceptions.