- •Основи об’єктно-орієнтованого програмування
- •Факультету комп’ютерних наук та інформаційних технологій
- •Луцьк 2009
- •Факультету комп’ютерних наук та інформаційних технологій 1 Лабораторна робота №1 5 Програмування лінійних алгоритмів 5
- •2.1. Приклад створення додатка 14
- •9.3. Виконання індивідуального завдання 61
- •Програмування лінійних алгоритмів
- •1.1. Візуальне середовище delphi
- •1.2.1. Збереження проекта
- •1.2.2. Настройка вікон
- •1.2.3. Зміна заголовка Форми
- •1.2.4. Розміщення компонентів на Формі
- •1.2. Приклад створення додатка
- •1.2.5. Написання процедури обробки події створення Форми (FormCreate)
- •1.2.6. Написання процедури обробки події натиснення кнопки Button1 (Button1Click)
- •1.2.7. Текст модуля UnLinAlg
- •X,y,z,a,b,c,u : extended; // оголошення локальних змінних
- •1.2.8. Робота з додатком
- •1.3. Виконання індивідуального завдання
- •Індивідуальні завдання
- •Лабораторна робота №2 Програмування алгоритмів, що розгалужуються
- •2.1. Приклад створення додатка
- •2.1.1. Розміщення компонентів на Формі
- •2.1.2. Створення процедур обробки подій FormСreate і Button1Сlick
- •2.1.3. Текст модуля UnRazvAlg
- •2.1.4. Робота з додатком
- •2.2. Виконання індивідуального завдання
- •Індивідуальні завдання
- •Лабораторна робота №3 Програмування циклічних алгоритмів
- •3.1. Відладка модулів проекта
- •3.1.1. Відладка синтаксичних помилок
- •3.1.2. Відладка логічних помилок
- •3.2. Приклад створення додатка
- •3.2.1. Розміщення компонентів на Формі
- •3.2.2. Текст модуля UnCiklAlg
- •3.3. Виконання індивідуального завдання
- •Індивідуальні завдання
- •Лабораторна робота №4 Програмування алгоритмів з використанням масивів
- •4.1. Приклад створення додатка
- •4.1.1. Розміщення компонентів на Формі
- •4.1.2. Створення процедур обробки подій SpinEdit1Change і SpinEdit2Change
- •4.1.3. Текст модуля UnMas
- •4.1.4. Робота з додатком
- •4.2. Виконання індивідуального завдання
- •Індивідуальні завдання
- •Лабораторна робота №5 програмування Алгоритмів з використанням рядків
- •5.1. Приклад створення додатка
- •5.1.1. Розміщення компонентів на Формі
- •5.1.2. Створення процедур обробки подій
- •5.1.3. Текст модуля UnStr
- •Індивідуальні завдання
- •Лабораторна робота №6 Програмування алгоритмів з використанням записів
- •6.1. Приклад створення застосування
- •6.1.1. Розміщення компонентів на Формі
- •6.1.2. Створення процедур обробки подій FormCreate і Button1Click
- •6.1.3. Текст модуля UnZap
- •6.2. Виконання індивідуального завдання
- •Індивідуальні завдання
- •Лабораторна робота №7 Програмування алгоритмів з використанням файлів
- •7.1. Приклад створення застосування
- •7.1.1. Розміщення компонентів на Формі
- •7.1.2. Створення процедур обробки подій
- •7.1.3. Текст модуля UnFile
- •7.1.4. Робота із застосуванням
- •7.2. Індивідуальні завдання
- •Лабораторна робота №8 Програмування алгоритмів з використанням функцій і процедур. Створення модулів
- •8.1. Приклад створення додатка
- •8.1.1. Розміщення компонентів на Формі
- •8.1.2. Створення модуля і підключення його до проекта
- •8.1.3. Текст модуля UnFuncProc
- •8.1.4. Текст модуля UnModul
- •8.2. Виконання індивідуального завдання
- •Індивідуальні завдання
- •Лабораторна робота №9 Програмування алгоритмів з використанням динамічних структур даних
- •Приклади створення застосувань
- •9.1. Використання динамічних масивів
- •9.1.1. Розміщення компонентів на Формі
- •9.1.2. Створення процедур обробки подій FormCreate і Button1Click
- •9.1.3. Текст модуля UnDinMas
- •9.2. Використання динамічних списків
- •9.2.1. Розміщення компонентів на Формі
- •9.2.2. Створення процедур обробки подій FormCreate і Button1Click
- •9.2.3. Текст модуля UnStek
- •9.3. Виконання індивідуального завдання
- •Навчально-методичне видання
- •43018, М. Луцьк, вул. Львівська, 75
3.1.2. Відладка логічних помилок
Логічні помилки умовно можна розділити на помилки алгоритму і семантичні помилки. Причинами таких помилок можуть бути невідповідність алгоритму поставленому завданню, неправильне розуміння програмістом сенсу (семантики) операторів мови програмування, порушення допустимих меж і правил представлення даних, неуважність при технічній підготовці проекта до обробки на комп'ютері.
Для виявлення помилок служать тести. Тест – це такий набір початкових даних, який дає результат, що не викликає сумнівів. Проміжні і кінцеві результати тесту використовуються для контролю правильності виконання додатка.
Складання тестів – непросте завдання. Тести повинні бути з одного боку, достатньо простими, щоб результат легко перевірявся, з іншого боку – достатньо складними, щоб комплексно перевірити алгоритм.
Тести складаються за схемою алгоритму до програмування, оскільки складання тестів допомагає виявити багато помилок в алгоритмізації.
Кількість тестів і їх складність залежать від алгоритму. Комплекс тестів повинен бути таким, щоб всі гілки схеми алгоритму були пройдені, принаймні, по одному разу. Неспівпадання результатів, що видаються додатком з результатами тестів, – ознака наявності помилок. Ці помилки виявляються в тому, що результат розрахунку виявляється невірним або відбувається переповнювання, ділення на 0 і ін.
Для локалізації місця помилки рекомендується поступати таким чином. У вікні Редактора Коди встановіть курсор в рядку перед підозрілою ділянкою і натисніть клавішу F4 (виконати до курсору). Виконання додатка буде зупинено на тому рядку модуля, в якому був встановлений курсор. Поточне значення будь-якої змінної можна побачити, якщо накрити курсором ідентифікатор змінної на 1-2 сек. Натискаючи клавішу F8 (покрокове виконання), можна відрядковий виконувати програму, контролюючи вміст змінних і правильність обчислень.
3.2. Приклад створення додатка
Завдання:
створити Windows-додаток,
який виводить таблицю значень функції
і її розкладання в ряд у вигляді суми
для
значень x
від xn
до xk
з кроком
h=(xk
- xn)/10.
У панелі інтерфейсу передбачити можливість управління виведенням початкових даних і погрішності обчислень.
Один з можливих варіантів панелі інтерфейсу створюваного застосування показаний на рис.3.1.
3.2.1. Розміщення компонентів на Формі
Замість компонента Edit використовуваний компонент SpinEdit, який забезпечує відображення і редагування цілого числа з можливістю його зміни за допомогою подвійної кнопки.
Рис. 3.1
Компонент SpinEdit знаходиться на сторінці Samples Палітри Компонентів. У тих випадках, коли об'єм інформації, що виводиться, перевищує розмір поля компонента Memo, доцільно забезпечити його лінійками прокрутки. У властивості ScrollBars компонента Memo1 встановимо значення ssVertical – з'явиться вертикальна лінійка прокрутки. Привласнимо модулю ім'я UnCiklAlg.
3.2.2. Текст модуля UnCiklAlg
Unit UnCiklAlg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs
StdCtrls, ExtCtrls, Spin;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
SpinEdit1: TSpinEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
SpinEdit1.text:='3'; // початкове значення N
Edit1.text:='0.1'; // початкове значення Xn
Edit2.text:='2.0'; // початкове значення Xk
Memo1.Clear;
Memo1.Lines.Add('Лабораторна робота №3 - Циклічний алгоритм');
end;
procedure TForm1.Button1Click(Sender: TObject);
var xn,xk,x,h,c,s,y,al,del:extended;
n,k:integer;
begin
n:=StrToInt(SpinEdit1.Text);
xn:=StrToFloat(Edit1.Text);
xk:=StrToFloat(Edit2.Text);
if CheckBox1.Checked then
Memo1.Lines.Add(‘Початкові дані: n=’+IntToStr(n)+
' Xn='+FloatToStrF(xn,ffFixed,6,1)+
' Xk='+FloatToStrF(xk,ffFixed,6,1));
h:=(xk-xn) *0.1; // крок h
x:=xn;
repeat // цикл по x
c:=-x*x*0.5;
S:=1;
for k:=1 to n do
begin
s:=s+c*(2*k*k+1);
c:=-c*x*x/((2*k+1)*(2*k+2));
end;
y:=(1-x*x*0.5)*cos(x)-0.5*x*sin(x);
if CheckBox2.Checked then
if CheckBox3.Checked then
begin
al:=s-y; // абсолютна погрішність
del:=abs((s-y)/y)*100; // відносна погрішність
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,6,2)+
' S='+ FloatToStrF(s,ffFixed,6,3)+
' Y='+ FloatToStrF(у,ffFixed,6,3)+
' A='+ FloatToStrF(al,ffFixed,6,3)+
' D='+ FloatToStrF(del,ffFixed,6,0)+'%');
end
else
begin
al:=s-y;
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,6,2)+
' S='+ FloatToStrF(s,ffFixed,6,3)+
' Y='+ FloatToStrF(у,ffFixed,6,3)+
' A='+ FloatToStrF(al,ffFixed,6,3));
end
else
if CheckBox3.Checked then
begin
del:=abs((s-y)/y)*100;
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,6,2)+
' S='+ FloatToStrF(s,ffFixed,6,3)+
' Y='+ FloatToStrF(у,ffFixed,6,3)+
' D='+ FloatToStrF(del,ffFixed,6,0)+'%');
end
else
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,6,2)+
' S='+ FloatToStrF(s,ffFixed,6,3)+
' Y='+ FloatToStrF(у,ffFixed,6,3));
x:=x+h;
until x>xk;
end;
end.
