Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Углубленный курс информатики. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Пример
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]