Программирование вычислений определенных интегралов
Программирование численного интегрирования по формуле (6.4) проиллюстрируем на конкретных примерах. При этом описания типов переменных и операторы, реализующие необходимые вычисления, будем вводить посредствам клавиатуры в полученную заготовку процедуры-обработчика события OnClick.
Задание 1. Составить программу вычисления определенного интеграла по формуле (6.4), приняв n =80. Для улучшения ‘читабельности’ программы, имена переменным будем давать по обозначениям математических величин формулы (6.4). Тип переменных естественным образом определяется этой формулой. Поэтому между заголовком процедуры и операторной скобкой begin введем секцию var, в которой опишем типы переменных: Var i,n:integer; a,b,s,h,x:real; В тело процедуры запишем операторы, реализующие: 1. Ввод исходных данных: a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); n:=StrToInt(Edit3.Text); В операторах: StrToFloat(Edit1.Text) является стандартной функцией, преобразующей строковый тип поля Edit1 в вещественный тип; StrToInt(Edit3.Text) – стандартная функция, преобразующая строковый тип поля Edit3 в целый тип. Преобразованные значения присваиваются операторами 2-м вещественным переменным a, b и переменной целого типа n. Заметим, что в работающей программе вначале заполняются поля Edit1, Edit2, Edit3 текстами 0,0; 1,0; 80 соответственно, а затем производится ЩЛК на кнопке ‘Вычислить’. 2. Вычисление значений математических величин по формуле (6.4). Для вычисления шага интегрирования h =(b – a)/n и полусуммы (y0+yn)/2 (см. формулу (6.4)) запишем операторы:
h:=(b-a)/n; s:=(a*a*sqrt(1-a*a)+b*b*sqrt(1-b*b))/2.0; Вычисление значения аргумента x 1 определим записав оператор: x:=a+h; Вычисление частных сумм и окончательно полной суммы ординат (y0+yn)/2+y1+y2+…+yn-1 для соответствующих значений аргумента x 1, x 2,…, x n-1 зададим в цикле: for i:=1 to n-1 do Begin s:=s+x*x*sqrt(1-x*x); x:=x+h; end; Следует понимать, что многократное выполнение оператора x:=x+h; приводит к тому, что переменная x последовательно будет принимать значения x 1, x 2,…, x n-1. Умножив полученную сумму на h: s:=h*s;, отобразим полученный результат в поле Edit4: Edit4.Text:=FloatToStr(s); В этом операторе, для преобразования вещественного значения переменной s в строковый тип, применяется стандартная функция FloatToStr(s). По мере оформления окна, создания заготовки процедуры-обработчика события OnClick, ввода нами вышеприведенных описаний и операторов, система Delphi будет формировать модуль, окончательный текст которого может выглядеть так:
unit Unit1; // Заголовок модуля interface // Начало интерфейсного раздела Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class(TForm) // Начало описания класса Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); Private { Private declarations } Public { Public declarations } end; // Конец описания класса Var Form1: TForm1; implementation // Начало раздела реализации {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); // Заголовок процедуры Var i,n:integer; a,b,s,h,x:real; Begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); n:=StrToInt(Edit3.Text); h:=(b-a)/n; s:=(a*a*sqrt(1-a*a)+b*b*sqrt(1-b*b))/2.0; x:=a+h; for i:=1 to n-1 do Begin s:=s+x*x*sqrt(1-x*x); x:=x+h; End; s:=h*s; Edit4.Text:=FloatToStr(s); end; // Конец описания процедуры end. // Конец модуля
Задание 2. Составить программу вычисления определенного интеграла по формуле (4), приняв n=350. При выполнении этого задания оформление окна программы, изменение свойств компонентов и получение заготовки процедуры-обработчика события OnClick проведем согласно описанному в п.п. 2.2, 2.3. Программирование вычисления этого интеграла по формуле (6.4) сведем к вводу с клавиатуры в полученную заготовку описаний типов переменных и операторов по аналогии с выполнением задания 1. При этом в тексте процедуры необходимо изменить только два оператора: - оператор, реализующий вычисление полусуммы (y0+yn)/2: s:=(1.0/(sqrt(a+9) - sqrt(a))+1.0/(sqrt(b+9)-sqrt(b)))/2.0; - оператор, реализующий в цикле вычисление частных сумм и полной суммы ординат: s:=s+1.0/(sqrt(x+9)-sqrt(x)); В результате проведенных изменений, текст процедуры-обработчика события может иметь следующий вид: procedure TForm1.Button1Click(Sender: TObject); // Заголовок процедуры Var i,n:integer; a,b,s,h,x:real; Begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); n:=StrToInt(Edit3.Text); h:=(b-a)/n; s:=(1.0/(sqrt(a+9) - sqrt(a))+1.0/(sqrt(b+9)-sqrt(b)))/2.0; x:=a+h; for i:=1 to n-1 do Begin s:= s+1.0/(sqrt(x+9)-sqrt(x)); x:=x+h; End;
|