183508 (629853), страница 2
Текст из файла (страница 2)
Данные компьютера:
Процессор – Celeron 1.7;
ОЗУ – 256 Мб;
Видео – 64 Мб;
HDD – 20 Gb;
Привод CD-Rw
Операционная система:
Windows Xp.
Решение задачи
Приведем пример решение задачи методом Симпсона
Вычислить значение интеграла
Решение задачи без помощи программного обеспечения:
|
n=10 [0,1] h=0,1 fx=xcosx | xi | F(xi) |
| 0 | 0 | |
| 0.1 | 0.0995004 | |
| 0.2 | 0.196013 | |
| 0.3 | 0.286601 | |
| 0.4 | 0.368424 | |
| 0.5 | 0.438791 | |
| 0.6 | 0.495201 | |
| 0.7 | 0.5353895 | |
| 0.8 | 0.557365 | |
| 0.9 | 0.559449 | |
| 1 | 0.540302 |
Решение задачи с помощью программы Метод Симпсона.exe:
Данная программа работает корректно, т.к. ответы совпадают.
3.5 Инструкция пользователя
Данная программа состоит из 1 откомпилированного exe файла – Метод Симпсона.exe и rar-архива содержащего все компоненты программы написанных на языке программирования – Delphi 7.0.
-
Запуск программы осуществляется путем открытия файла Метод Симпсона .exe.
Рис 1.
Ввод значений производится следующим образом:
В
Рис 2.
вод функции f(x) – в данное окно производится ввод формулы предназначенной для вычисления значения интеграла. Для просмотра используемых арифметических действий при вводе необходимо нажать левой кнопкой мышки наРис 3.
Ввод отрезка [a,b] производится путем ввода
- точка а (начальная точка),
- точка b (конечная точка отрезка).
-
Шаг h или dx – ввод в
. -
После ввода всех значений интеграла необходимо нажать кнопку
(см. рис.4).
Рис 4.
где – таблица значений Xi b F(xi);
Рис 5.
-
приближенное значение интеграла.
-
Для вывод справочной информации о пользовании программой необходимо нажать кнопку
, после чего на экран выводится следующее окно (см. рис.7)
Рис 7.
4. Заключение
Данная программа была написана на языке Delphi 7.0. При разработке программы были учтены все требования к программе и выполнены в полной мере.
При разработке данной программы Я закрепил знания по программированию в среде Delphi 7.0, также получил некоторые новые знания при разработке этой программы.
Приложение
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
type
TForm1 = class(TForm)
Edit_F: TEdit;
Button_Itogo: TButton;
Edit_A: TEdit;
Label1: TLabel;
Label4: TLabel;
Edit_B: TEdit;
SS: TStringGrid;
Edit_Int: TEdit;
Label3: TLabel;
Image1: TImage;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label5: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Button1: TButton;
procedure Button_ItogoClick(Sender: TObject);
procedure Label5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit_help,Unit_h;
{$R *.dfm}
procedure Formula( Var Vivod:string; Var Gl_massiv: Array of string);
Var
Sk_massiv: Array [0..100] of string;
Tmp_st,st:integer; // Переменная степени
i_sk:integer; //Номер ячейки c начала массива скобки
j_sk:integer;// Переменная по перемещению по массиву скобки
z:integer; //Номер ячейки от конца гл. массива
i:integer; //Номер ячейки c начала гл. массива
j:integer; // Переменная по перемещению по гл. массиву
// Булевые типы (ложь) или (Истина) для гл. масиива и скобки
Y, Ysk:Boolean;
ch:Real; // Число
Itog:Real; //Переменная значений вычислений
begin // Начало
{---- Вычисление значений в скобках -----}
For z:=1 to 100 do //Чтение то конца гл. массива
Begin
// Если левая скобка найдена
if Gl_massiv [100-z] = '(' then
Begin
i:= 100-z; j:= 0; Y:= False;
Repeat
Begin
if Gl_massiv[i+1] <> ')' then //Найдена след.закрывающая скобка
Begin
Sk_massiv[j]:= Gl_massiv[i+1];
// Скрываем чило использованное для вычисления
Gl_massiv[i+1]:= '#';
j:=j+1;
i:=i+1;
end
else Begin Gl_massiv[i+1]:= '#'; Y:= True; end;
end;
Until Y=True;
Y:= False;
{--------- Вычисление в скобках ---------------}
For i_sk:=0 to 100 do
Begin
Ysk:= False;
{-------------- Косинус---------------}
if Sk_massiv [i_sk]= 'cos' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then
begin
itog:= cos(Strtofloat(Sk_massiv[i_sk+j_sk]));
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
Ysk:= False;
end;
{-------------- Синус ---------------}
if Sk_massiv[i_sk]= 'sin' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then
begin
itog:= sin(Strtofloat(Sk_massiv[i_sk+j_sk]));
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
Ysk:= False;
end;
end;
{-------------- ^ квадрат ---------------}
For i_sk:=0 to 100 do
Begin
Ysk:= False;
if Sk_massiv[i_sk]= '^' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk-j_sk] <> '#' then begin
itog:= Strtofloat(Sk_massiv[i_sk-j_sk]);
Sk_massiv[i_sk-j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
Tmp_st:= StrToInt(Sk_massiv[i_sk+1]);
ch:=itog;
For st:=2 to Tmp_st do
begin
itog:= itog*ch;
end;
Sk_massiv[i_sk]:= Floattostr(itog);
end;
end;
{-------------- Умножение / Деление ---------------}
For i_sk:=0 to 100 do
Begin
Ysk:= False;
{-------------- Умножение---------------}
if Sk_massiv[i_sk]= '*' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk-j_sk] <> '#' then begin
itog:= Strtofloat(Sk_massiv[i_sk-j_sk]);
Sk_massiv[i_sk-j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then begin
itog:= itog* Strtofloat(Sk_massiv[i_sk+j_sk]);
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
end; Ysk:= False;
{--------------------- Деление ----------------}
if Sk_massiv[i_sk]= '/' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk-j_sk] <> '#' then begin
itog:= Strtofloat(Sk_massiv[i_sk-j_sk]);
Sk_massiv[i_sk-j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then begin
itog:= itog/Strtofloat(Sk_massiv[i_sk+j_sk]);
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
end; Ysk:= False;
end;
{-------------- cложение/вычитание -----------------}
For i_sk:= 0 to 100 do
Begin
Ysk:= False;
{-------------- сложение---------------}
if Sk_massiv[i_sk]= '+' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk-j_sk] <> '#' then begin
itog:= Strtofloat(Sk_massiv[i_sk-j_sk]);
Sk_massiv[i_sk-j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then begin
itog:= itog+ Strtofloat(Sk_massiv[i_sk+j_sk]);
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
end; Ysk:= False;
{------------------- Вычитание ----------------}
if Sk_massiv[i_sk]= '-' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk-j_sk] <> '#' then begin
itog:= Strtofloat(Sk_massiv[i_sk-j_sk]);
Sk_massiv[i_sk-j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then begin
itog:= itog-Strtofloat(Sk_massiv[i_sk+j_sk]);
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else j_sk:= j_sk+1;
until Ysk=True;
end; Ysk:= False;
end;
For i_sk:=0 to 100 do
Begin
Ysk:= False;
{-------------- Натуральный логарифм --------------}
if Sk_massiv[i_sk]= 'ln' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then
begin
ch:= Strtofloat(Sk_massiv[i_sk+j_sk]);
If ch > 0 then
Begin
itog:= ln(Strtofloat(Sk_massiv[i_sk+j_sk]));
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else Begin
Showmessage('Натуральный логарифм меньше нуля');
Sk_massiv[i_sk]:='0';
Ysk:= True;
end;
end else j_sk:= j_sk+1;
until Ysk=True;
Ysk:= False;
end;
{-------------- Корень кв.--------------}
if Sk_massiv[i_sk]= 'sqrt' then
Begin j_sk:=1; Ysk:= False;
repeat
if Sk_massiv[i_sk+j_sk] <> '#' then
begin
ch:= Strtofloat(Sk_massiv[i_sk+j_sk]);
If ch > 0 then
Begin
itog:= sqrt(Strtofloat(Sk_massiv[i_sk+j_sk]));
Sk_massiv[i_sk]:= Floattostr(itog);
Sk_massiv[i_sk+j_sk]:= '#'; Ysk:= True;
end else Begin
Showmessage('Значение квадратного корня меньше нуля');
Sk_massiv[i_sk]:='0';
Ysk:= True;
end;
end else j_sk:= j_sk+1;
until Ysk=True;
Ysk:= False;
end;















