Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Углубленный курс информатики. Учебное пособие
.pdf
Пример
Cоставить программу в среде программирования Delphi для определения корней нелинейного уравнения тремя итерационными методами (метод деления отрезка пополам, метод итераций, метод Ньютона) в
соответствии с рабочем окном программы (рис. 7)
Рис. 7. Рабочее окно программы в Delphi
После нажатия на кнопку «Расчет» появляются результаты рас-
чета тремя методами (рис. 8). После нажатия на кнопку «Очистить»,
выполняется очистка результатов расчета.
Рис. 8. Рабочее окно программы в Delphi
Этап № 1. Визуальное программирование
1.
Запустить программу Delphi
2. В инспектор объектов настроить размер Form1.
Свойство
Font+ ,
61

Height – 264 px (высота объекта в пик-
селях);
Width – 743 px (ширина объекта в пик-
селях);
Caption – «Решение нелинейных уравнений».
3. В палитре компонент во вкладке Standard выбрать компонент
Combobox1 и разместить на Form1.
В инспектор объектов выбрать
Items и проставить в до-
полнительном окне цифры, обозначающие степень полинома:
2
3
4
4.
В палитре компонента во вкладке Additional выбрать компонент
LabelEdit1.
В инспекторе объектов во вкладке свойства изменить
название компонента
LabelEdit1:
Caption – «Уравнение».
5. В палитре компонент во вкладке Standard выбрать компонент
Checkbox и разместить на Form1 (три компонента –
итерационные методы).
Изменить название компонента и цвет в соответствии с п. 3.
Для включения жирного шрифта необходимо использо-
вать свойство:
Style: fsBold – True;
6. В палитре компонента во вкладке Additional выбрать компо-
ненты
разделе
установить в разделе
LabelEdit. В инспекторе объектов во вкладке свойства в
EditLabel изменить название компонента Caption и
Text отображаемые при запуске програм-
мы значения начального и конечного интервала и точности вычислений.
–
LabelEdit2: Caption «Начало интервала», text: 0,0
– LabelEdit3: Caption
– LabelEdit4: Caption
«Конец интервала», text: 0,0
«Точность вычислений», text: 0,0
7.
Во вкладке Additional добавить компонент StringRid (таблица).
62

В инспекторе объектов установить количество колонок и
количество строк таблицы с использованием
RowCount и
ColCount.
В инспекторе объектов во вкладке Options установить:
•
goEditing True // обеспечивает возможность редакти-
рования таблицы;
•
goAlwaysShowEditor – True // позволяет вводить дан-
ные в ячейку по одному клику.
8. В палитре компонент во вкладке Standard выбрать компоненты:
–
Button1 (изменить Caption – «Расчет») – при нажатии
на эту кнопку будет выполняться расчет методов итерации (алгоритм расчета пока не реализован)
и – Button2 (Caption –
«Очистить») – при нажатии на эту кнопку будет происходить
очищение поля с результатами расчета.
9.
В палитре компонент во вкладке Standard выбрать компоненты Метка и разместить объекты на Form1:
–
Label1:
В инспектор объектов настроить свойства:
Caption – «Результаты вычислений».
Font+ : Color – clBlue (цвет шрифта);
Style: fsBold – True;
visible: False
– Label 2:
В инспектор объектов настроить свойства:
Caption – «Выберете степень полинома».
Font+ : Color – clGreen (цвет шрифта);
– Label 3:
В инспектор объектов настроить свойства:
Caption – «Введите коэффициенты полинома».
Font+ : Color – clMaroon (цвет шрифта);
– Label 4:
В инспектор объектов настроить свойства:
Caption – «Исходные данные».
Font+ : Color – clBlue (цвет шрифта);
Style: fsBold – True;
fsunderline – True;
63

10. В палитре компонента во вкладке Additional выбрать компо-
ненты
разделе
установить в разделе
LabelEdit. В инспекторе объектов во вкладке свойства в
EditLabel изменить название компонента Caption и
Text отображаемые при запуске програм-
мы значения начального и конечного интервала и точности вычислений.
– LabelEdit5: Caption «Начало интервала», text: 0,0
– LabelEdit6: Caption
«Деление отрезка пополам», text: 0,
visible: False
– LabelEdit7: Caption
«Число шагов», text: 0, visible: False
– LabelEdit8: Caption «Простой итерации», text: 0, visible:
False
– LabelEdit9: Caption «Число шагов», text: 0, visible: False
– LabelEdit10: Caption «Ньютон», text: 0, visible: False
– LabelEdit11: Caption «Число шагов», text: 0, visible: False
Этап № 2. Разработка алгоритма программы
Программы, разработанные в среде программирования Delphi, основаны на модульном принципе программирования (структура модуля
представлена в теоретической части).
1. Опишем подпрограммы-функции для расчета уравнения (для
метода деления отрезка пополам), первой и второй производ-
ной функции (для метода Ньютона), а также эквивалентной
функции (для метода итераций) в интерфейсной части.
Interface
.
.
.
function
f(x:extended):extended; // подпрограмма-функция
для расчета самой функции
function
f1(x:extended):extended; // подпрограмма-
функция для расчета первой производной функции f
function
f2(x:extended):extended; // подпрограмма-
функция для расчета второй производной функции f
function
eqf(x:extended):extended; // подпрограмма-
функция для расчета эквивалентной функции f
2. В интерфейсной части объявлений и описаний требуется опи-
сать переменные:
64

var
.
.
x:extended;
n:integer;
3. Раздел Implementation содержит описание подпрограмм-
функций, которые объявлены в интерфейсной части.
65

4. Опишем подпрограммы-процедуры для расчета в интер-
фейсной части.
Interface
.
.
.
procedure
del (a, b, eps: extended; var x: extended; var n:
integer); // подпрограмма-процедура для расчета методом де-
ления отрезка пополам
procedure
newton(a,b,eps: extended; var x: extended; var n:
integer); // подпрограмма-процедура для расчета методом
Ньютона
procedure
iter(x0, eps: extended; var x: extended; var n:
integer); // подпрограмма-процедура для расчета методом про-
стой итерации
Здесь формальные параметры:
а,b – начало и конец интервала;
eps – заданная точность расчета;
x, x0 – переменная;
n – число итераций;
5. Раздел Implementation содержит описание подпрограмм-
процедур, которые объявлены в интерфейсной части.
.
.
.
procedure TForm1.del;
begin
n:=0;
repeat
n := n + 1;
x := (a + b) / 2;
if f(a)*f(x) < 0 then b := x
else a := x;
until (abs(a – b) <= eps) or (f(x) = 0);
66

LabeledEdit6.Text:=FloatToStr(x); // записываем рассчи-
танное значение в формате текста
LabeledEdit7.Text:=FloatToStr(n); // записываем рассчи-
танное значение в формате текста
end;
procedure TForm1.newton;
var
x0:extended;
begin
n := 0;
if f(a)*f2(a)>0 then x:=a;
if f(b)*f2(b)>0 then x:=b;
repeat
n := n + 1;
x0 := x;
x := x0 – f(x0) / f1(x0);
until abs(x – x0) <= eps;
LabeledEdit10.Text:=FloatToStr(x); // записываем рас-
считанное значение в формате текста
LabeledEdit11.Text:=FloatToStr(n); // записываем рас-
считанное значение в формате текста
end;
procedure
TForm1.iter;
begin
n := 0;
x := eqf(x0);
repeat
n := n + 1;
x0 := x;
x := eqf(x0);
until abs(x – x0) <= eps;
LabeledEdit8.Text:=FloatToStr(x); // записываем рассчи-
танное значение в формате текста
LabeledEdit9.Text:=FloatToStr(n); // записываем рассчи-
танное значение в формате текста
end;
6. Выбрать Form1. Далее в Object Inspector во вкладке Events до-
бавить событие OnCreate, кликнув дважды на пустую строку
67

напротив события OnCreate – событие, которое происходит в
момент создания формы (появится процедура Formcreate)
Опишем подпрограмму-процедуру для заполнения ячеек
таблицы (коэффициенты уравнения) в интерфейсной части.
.
.
.
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer; // переменная для обращения к ячейкам табли-
цы
begin
with StringGrid1 do // оператор обеспечивает выполне-
ние действий с таблицей
begin // запись в соответствующие ячейки
cells[0,0]:='Коэффициент';
cells[1,0]:='Значение';
for i:=1 to RowCount do
// цикл для заполнения ячеек
таблицы от 1 до6
begin
cells[1,i]:='0';
cells[0,i]:='a'+FloatToStr(i-1) // текст а и перевод
числа в символ
end
end
end;
7. Организуем работу компонента ComboBox1
Другими словами, при выборе степени полинома – пока-
зываем вид уравнения в
LabeledEdit1.
Описываем подпрограмму в интерфейсной части и исполняемой части. Для того чтобы в момент выбора полинома
появлялось уравнение, реализуем подпрограмму-процедуру с
событием
Onselect: ComboBox1Select
Interface
.
.
.
68

procedure ComboBox1Select(Sender: TObject);
Implementation
.
.
.
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
LabeledEdit1.Text:=''; // ячейка пустая
with ComboBox1 do // обеспечивает выполнение дей-
ствий с компонентом Combobox
case ItemIndex of //заменяет оператор if then для не-
сколько условий
0:LabeledEdit1.Text:='a0 + a1*x + a2*x^2';
1:LabeledEdit1.Text:='a0 + a1*x + a2*x^2 + a3*x^3';
2:LabeledEdit1.Text:='a0 + a1*x + a2*x^2 + a3*x^3 +
a4*x^4'; // 0,1,2 – порядковый номер (2,3,4 значение полинома в
item)
end;
end;
8. Организуем работу кнопки «Расчет».
Свойство Visible обеспечивает видимость ячейки или
текста
Кликнуть дважды по кнопке «Расчет», автоматически со-
здается подпрограмма-процедура и ее описание в блоке
Interface, т. е.:
procedure Button1Click(Sender: TObject);
В блоке Implementation автоматически создан макет подпрограммы-процедуры, нам требуется вписать действие в макет:
begin
Form1.Height:=332; // высота формы
69

Label1.Visible:=True;
LabeledEdit6.Visible:=True;
LabeledEdit7.Visible:=True;
del(StrToFloat(LabeledEdit2.Text),
StrToFloat(LabeledEdit3.Text), StrToFloat(LabeledEdit4.Text), x,
n); // обращение к процедуре
end;
if CheckBox2.Checked = True then
begin
Form1.Height:=388;
Label1.Visible:=True;
LabeledEdit8.Visible:=True;
LabeledEdit9.Visible:=True;
iter(StrToFloat(LabeledEdit2.Text),
StrToFloat(LabeledEdit4.Text), x, n);
end;
if CheckBox3.Checked = True then
begin
Form1.Height:=442;
Label1.Visible:=True;
LabeledEdit10.Visible:=True;
LabeledEdit11.Visible:=True;
newton(StrToFloat(LabeledEdit2.Text),
StrToFloat(LabeledEdit3.Text), StrToFloat(LabeledEdit4.Text), x,
n);
end;
end;
9. Организуем работу кнопки «Очистить».
Кликнуть дважды по кнопке «Очистить», автоматически
создается подпрограмма-процедура и ее описание в блоке
Interface, т. е.:
procedure Button2Click(Sender: TObject);
В блоке Implementation автоматически создан макет подпрограммы-процедуры, нам требуется вписать действие в макет
procedure TForm1.Button2Click(Sender: TObject);
begin
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
