Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Средства отладки программ в Delphi



Практически в каждой написанной программе обнаруживаются ошибки.

Ошибки первого уровня ( ошибки компиляции ) связаны с неправильной записью операторов. При ее обнаружении компилятор Delphi останавливается напротив первого оператора, в котором обнаружена ошибка. В нижней части экрана появляется текстовое окно, содержащее сведения обо всех ошибках, найденных в проекте. Каждая строка окна содержит имя файла, в котором найдена ошибка, номер строки с ошибкой и характер ошибки. Для быстрого перехода к ошибке 2ЛКМ на строке с ее описанием. Для получения более полной информации о характере ошибки надо вызвать справку клавишей F1. Следует учитывать, что одна ошибка может повлечь за собой другие, которые исчезнут при ее исправлении. Поэтому рекомендуется исправлять ошибки последовательно сверху вниз и после исправления каждой ошибки компилировать программу снова.

Ошибки второго уровня ( ошибки выполнения ) связаны с ошибками алгоритма или с неправильной его программной реализацией. Эти ошибки приводят к неверному результату, переполнению, делению на ноль и т.д. Поэтому программу надо протестировать, т.е. выполнить расчеты при таких значениях исходных данных, для которых заранее известен результат. Если тестовые расчеты указывают на ошибку, то для ее поиска надо использовать встроенные средства отладки среды.

В простейшем случае для локализации места ошибки рекомендуется поступать следующим образом. В окне редактора программы установить курсор в строке перед подозрительным участком и нажать клавишу F4 (выполнение до курсора). Выполнение программы будет остановлено на строке с курсором. Для просмотра значения переменной нужно навести на нее курсор (на экране будет высвечено ее значение) или нажать одновременно Ctrl+F7 и в появившемся окне ввести ее имя (с помощью данного окна можно также изменить значение переменной во время выполнения программы). Нажимая клавишу F7 (пошаговое выполнение), можно построчно выполнять программу, контролируя значения переменных. При нахождении курсора внутри цикла после нажатия F4 вычисления останавливаются после каждого выполнения тела цикла. Для продолжения расчетов надо выбрать меню Run – Run.

Способы установки точек прерывания.

1. ЛКМ на левом краю окна редактирования: выбранная для остановки строка выделяется красной полосой, на ее левом краю появляется маленький значок.

2. При выполнении команд Run– Add Breakpoint– Source Breakpoint... появится диалоговая панель редактирования точек прерывания EditBreakpoint. Можно задать параметр Condition, где ввести выражение, при истинности которого точка прерывания «сработает», иначе выполнение приложения не будет прервано при прохождении через эту строку, или количество проходов, после которых точка прерывания переходит в активное состояние.

4.4 Порядок выполнения задания

Написать и отладить программу, которая выводит таблицу значений функции и ее разложение в ряд для х, изменяющегося в интервале от xn до xk c шагом h. Функцию S(x) вычислить с точностью до 0, 001. Вывести число итераций, необходимое для достижения заданной точности.

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

при при и т.д.

На каждом шаге слагаемое дополнительно умножается на . Исходя из этого формула рекуррентной последовательности будет иметь вид:

Полученная формула позволяет избавиться от многократного вычисления факториала и возведения в степень. Если в выражении имеется нерекуррентая часть, то ее следует рассчитывать отдельно.

Панель диалога представлена на рис. 4.5.

Рисунок 4.5. Панель диалога


Блок – схема алгоритма

 


Код программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit3: TEdit;

Label5: TLabel;

Edit4: TEdit;

Label6: TLabel;

Memo1: TMemo;

Label7: TLabel;

Label8: TLabel;

Button1: TButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Text: ='0'; // Начальное значение xn

Edit2.Text: ='2'; // Конечное значение xk

Edit3.Text: ='0, 25'; // Значение шага h

Edit4.Text: ='0, 001'; // Значение точности eps

Memo1.Clear;

Label6.Caption: ='Результаты ст. гр. 012501 Иванова И.И.';

end;

procedure TForm1.Button1Click(Sender: TObject);

var

xn, xk, x, h, eps, a, s, y: Extended;

n, k: Integer;

begin

Memo1.Lines.Add('Вычисление таблицы значений функции');

Memo1.Lines.Add('Исходные данные: ');

xn: =StrToFloat(Edit1.Text);

Memo1.Lines.Add('xn='+FloatToStrF(xn, ffFixed, 6, 2));

xk: =StrToFloat(Edit2.Text);

Memo1.Lines.Add('xk='+FloatToStrF(xk, ffFixed, 6, 2));

h: =StrToFloat(Edit3.Text);

Memo1.Lines.Add('h='+FloatToStrF(h, ffFixed, 8, 3));

eps: =StrToFloat(Edit4.Text);

Memo1.Lines.Add('eps='+FloatToStrF(e, ffFixed, 8, 5));

Memo1.Lines.Add('Таблица значений функции');

Memo1.Lines.Add(' x S(x) Y(x) n');

x: =xn; // Начальное значение x (левая граница интервала)

Repeat

a: =1; // Начальное значение рекуррентной части

S: =1; // Начальное значение суммы ряда, т.к. по условию задания k=0

n: =0; // Начальное значение числа итераций (приближений)

While Abs(a)> eps Do // Вычисление суммы ряда с заданной точностью

Begin

Inc(n) // Вычисление числа итераций (приближений) n: =n+1;

a: =–a*x/n; //Вычисление рекуррентной части: знака, степени, факториала

s: =s+a;

End;

y: =Exp(–x); // Вычисление значения функции y(x)

Memo1.Lines.Add(FloatToStrF(x, ffFixed, 6, 2)+''+FloatToStrF (s, ffFixed, 8, 4)+' '+FloatToStrF(y, ffFixed, 8, 4)+' '+IntToStr(n));

x: =x+h; // Вычисление следующего значения x (добавление шага h)

Until x> xk+h/2 // xk+h/2 применяется для исключения потери последнего x

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin // Очистка полей ввода и вывода результата для нового расчета

Edit1.text: ='';

Edit2.text: ='';

Edit3.text: ='';

Edit4.text: ='';

Memo1.Clear;

Label6.Caption: ='';

end;

end.

После отладки программы введите тест (n=2, xn=0, xk=1, h=3), установите курсор на оператор Inc(n); и нажмите клавишу F4. После этого нажимая клавишу F7, пошагово выполните программу и проследите, как меняются все переменные в процессе выполнения.

4.5. Индивидуальные задания

В соответствии с индивидуальным заданием (см. табл. 4.2) составить блок–схему алгоритма и программу вывода на экран таблицы значений функции Y(x) и ее разложения в ряд S(x) для x, изменяющегося от xn до xk, с заданным количеством шагов m ( ) и точностью eps. Близость значений S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x).

Спроектировать панель диалога. Создать вместо обработчика Button1.Click обработчик Memo1Click или Label1DblClick.

Изучить средства отладки программ, для чего установить курсор на первый оператор и нажать клавишу F4. После этого, нажимая клавишу F7, выполнить пошагово программу и проследить, как меняются все переменные в процессе ее выполнения.

Таблица 4. 2

Индивидуальные задания

xn xk S(x) n или ε Y(x)
0, 1
0, 1
0, 1
0, 1
0, 1
0, 1
0, 1 0, 9
0, 1
0, 1
0, 1 0, 7
0, 1
0, 1
-1, 5 -0, 2
0, 2 0, 8
0, 1 0, 9
0, 1 0, 9 0, 001
0, 1 0, 001
0, 2 1, 2 0, 0001
0, 0001 2x
0, 1 1, 5 0, 0001 Sin2(x)
0, 1 1, 5 0, 0001 Sin3(x)
0, 1 0, 001 Sh(x)
0, 1 0, 001 Ch(x)
0, 1 1, 5 0, 001 Sin(x)
0, 1 1, 5 0, 001 Cos(x)
0, 1 0, 9 0, 001 Sin(x)
0, 1 1, 5 0, 001
0, 1 0, 9 0, 001 Arcsin(x)
0, 1 0, 001
0, 1 0, 001

Задания повышенной сложности

1. Определить, является ли натуральное число k палиндромом (читается одинаково как слева направо, так и справа налево). Например: 1221, 35753 – палиндромы; 7664, 112 – не палиндромы.

2. Удалить из записи натурального числа n нечетные цифры, сохранив порядок следования остальных цифр. Например, 5843 ® 84.

3. Найти все двузначные числа, сумма цифр которых не меняется при умножении их на 2, 3, 4, 5, 6, 7, 8, 9.

4. Вывести трехзначные числа, квадраты которых оканчиваются тремя одинаковыми цифрами, отличными от нуля.

5. Поменять местами наибольшую и наименьшую цифры заданного натурального числа n.

6. Числа Фибоначчи (Fi) определяются по формулам: F0 =F1=1; Fi=Fi – 1+Fi – 2 при i=2, 3, ... Найти первое из чисел Фибоначчи, превосходящих заданное число M (M> 0).

7. Пифагоровыми называются тройки натуральных чисел a, b, с, удовлетворяющие условию: a2+b2=c2. Например, пифагоровой является тройка чисел 6, 8, 10. Найдите все тройки пифагоровых чисел, не превышающих 25.

8. Совершенным называется число, равное сумме своих делителей, кроме себя самого. Например, совершенным является число 28=1+2+4+7+14. Найдите все совершенные числа на отрезке [a, b].

9. Число называется автоморфным, если после возведения в квадрат оно совпадает с младшими разрядами числа, например 52=25, 252=625. Определить, является ли заданное число n автоморфным.

10. Число, состоящее из n цифр, называется числом Армстронга, если оно равно сумме n–х степеней своих цифр, например 153= 13+53+33. Определить, является ли заданное число p числом Армстронга.

11. Дана непустая последовательность различных натуральных чисел, за которой следует 0. Найти величину наибольшего среди отрицательных чисел этой последовательности и его порядковый номер.

12. Жители островов Чунга и Чанга один раз в год по праздникам обмениваются драгоценностями. Жители острова Чунга привозят половину своих драгоценностей на остров Чанга, а жители острова Чанга привозят треть своих драгоценностей на остров Чунга. Какая часть драгоценностей будет находиться на острове Чунга через M лет.

13. На заданном интервале (a, b) получить все трехзначные числа, в записи которых нет одинаковых цифр.

14. На заданном интервале (a, b) определить НОД чисел.

15. Найти k–ю цифру в последовательности, состоящей из квадратов всех натуральных чисел (149162536…).


 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-31; Просмотров: 712; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.052 с.)
Главная | Случайная страница | Обратная связь