- приближенное значение интеграла.
4. Для вывод справочной информации о пользовании программой необходимо нажать кнопку
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;
end; Ysk:= False;
j_sk:=0;
Repeat
Begin
if Sk_massiv[0+j_sk] <> '#' then Begin
// Запись в гл. массив значение скобки
Gl_massiv[100-z]:= Sk_massiv[0+j_sk];
Ysk:= true; end
else j_sk:=j_sk+1;
end;
Until Ysk = true;
end;
end;
{----- Вычиление значения в скобках закончено -----}
//showmessage(Gl_massiv[0]);
Vivod:= Gl_massiv[0];
end; // Конецпроцедуры
{--------------------------------------------------------}
procedure TForm1.Button_ItogoClick(Sender: TObject);
Var
a,b,h:real; //Отрезок а, b и шаг h
Fx,Fa,Fb:Real; //Результат и суммы значений F(xi)
My_vivod:string;//Значение F(xi)
mas,z,j:integer; //Номерячейкимассива
i:integer; //Номер символа в строке формул
s,st,ch:string; //Символ
// Булевый тип (ложь) или (Истина) для выхода из цикла подсчета цифр
Bool:Boolean;
//Массивсимволовформулы
My_massiv:Array [0..100] of string;
begin
//Присвоение к переменным значений отрезка а,b и шага h
a:= StrToFloat(Edit_A.Text);
b:= StrToFloat(Edit_B.Text);
h:=StrToFloat(Edit_Int.Text);
z:=0;
// Вычисление значений Xi на отрезке a,b с шагом h
Repeat
Begin //Начало цикла
//Вывод в массив значения Xi
SS.Cells[0,z]:= FloatToStr(a);
z:=z+1; //Переход на ячейку ниже
a:=a+h; //Шаг
end;
Until a > b; //Продолжение цикла до конца отрезка а,b
mas:=0;
//Вывод всех значений F(xi) в массив
Repeat
begin
i:=1; j:=1;
Repeat
//Вычисление F(xi) и вывод в массив
Begin
s:= Copy(Edit_F.text,i,1); //Копировать i-й символ в строке формул
//Проверка на значение натурального логарифма
if s='l' then Begin
s:='ln'; i:= i+1; end;
//Проверка на значение косинуса
if s='c' then Begin