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

 s:='cos'; i:= i+2; end;

 //Проверка на значение синуса или корня

 if s='s' then Begin

 i:= i+1; st:= Copy(Edit_F.text,i,1);

 if st='i' then begin

 s:='sin'; i:=i+1; end

 else begin s:='sqrt'; i:=i+2; end; end;

 //Проверка на значение цифры

 if (s='0') or (s='1') or (s='2')or (s='3')or (s='4')

 or (s='5')or (s='6')or (s='7')or (s='8')or (s='9') then

 Begin

 ch:=s; Bool:=False;

 Repeat

 Begin

 i:=i+1; // Перемещение к след. символу

 s:= Copy(Edit_F.text,i,1); //Копировать i-й символ в строке формул

 //Проверка на значение цифры

 if (s='0') or (s='1') or (s='2')or (s='3')or (s='4')

 or (s='5')or (s='6')or (s='7')or (s='8')or (s='9')or (s=',') then

 Begin //Если Да

 //Обьединение нескольких цифр подрят

 ch:= ch+s;

 end

 else Bool:=True; //Если нет Bool - Истина

 end;

 Until Bool=True; //Выход, если Bool - Истина

 My_massiv[j]:= ch; j:=j+1 //Запись значений цифр в массив

 //Если значение не цифра - запись в массив текущего символа

 end else Begin My_massiv[j]:=s; j:=j+1; i:=i+1; end;

end;

//Продолжение цикла до конца количества символов в строке формул

Until i > Length(Edit_F.Text);

// Взять формулу в массиве в скобки

 My_massiv[0]:='(';

 My_massiv[Length(Edit_F.Text)+1]:=')';

// Присвоение значению х - значения xi в массиве

 For i:= 0 to 100 do begin

 if My_massiv[i]= 'x' then

 My_massiv[i]:= SS.Cells[0,mas];

 end;

 Formula(My_vivod,My_massiv[0]);

 SS.Cells[1,mas]:= My_vivod; //Вывод F(xi) в массив

 mas:=mas+1; //Перемешение в массиве на строку ниже

 end;

//Продолжение цикла до последнего значения xi

Until mas>z-1;

Fa:=0; i:=0; //Обнуление переменных

//Суммирование значений F(x2,x4..xn-1)

Repeat

 Begin

 Fa:=Fa+StrtoFloat(SS.Cells[1,i]);

 i:=i+2;

 end;

Until i>=z;

i:=0;

//Суммирование значений F(x1,x3..xn)

Repeat

 Begin

 Fb:=Fb+StrtoFloat(SS.Cells[1,i+1]);

 i:=i+2;

 end;

Until i>=z-1;

//Вычисление значения F(x)

Fx:=(h/3)*(StrToFloat(SS.Cells[1,0])+(4*Fb)+(2*Fa));

//Вывод результата

Label3.Caption:= FloatToStr(h)+'/3 * ('+SS.Cells[1,0]+

' * 4*('+FloattoStr(Fb)+')+ 2*('+FloattoStr(Fa)+') = ';

Label13.Caption:=FloatToStr(Fx);

end;

procedure TForm1.Label5Click(Sender: TObject);

begin

Form2.showmodal;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Form_help.ShowModal;

end;

end.


Информация о работе «Метод Золотого сечения на Delphi»
Раздел: Экономико-математическое моделирование
Количество знаков с пробелами: 20594
Количество таблиц: 4
Количество изображений: 8

Похожие работы

Скачать
124889
11
2

... для обучения физике и математике, в силу их отсутствия на рынке. Исходя из вышеизложенных соображений, я считаю, что тема моей дипломной работы «Разработка электронного учебника по математике для студентов I курса отделения информатика-иностранный язык» является актуальной в силу того, что потребность в таком электронном учебнике несомненно есть, а самих учебников по данной теме либо совсем нет, ...

Скачать
149070
17
18

... программного комплекса ведется на основании задания на дипломную работу, утвержденное приказом ректора Донбасской машиностроительной академии по ГОСТ 19.101-77. Тема дипломной работы – «Программно – методический комплекс для мультимедийного представления учебной информации». Спецчасть разработки – «Разработка программного обеспечения для интерфейса оболочки комплекса и примера информационного ...

Скачать
85003
5
3

... плана и состав слушателей, происходит определение стратегии курса, разрабатывается сценарий и интерактивное взаимодействие программы с пользователями. Разрабатываемый электронный справочник предназначен для самостоятельной работы студентов младших курсов по изучению Visual Basic в рамках университетского курса. Его создание имеет своей целью предоставить студентам, изучающим Visual Basic весь ...

Скачать
50202
1
6

... . Вычисление хэш-адреса происходит в два этапа: 1. Вычисление нормализованного хэш-адреса в интервале [0..1] по формуле: хеширование адрес алгоритм обработка текстовый F(K) = (С*К) mod 1, где С — некоторая константа из интервала [0..1], К — результат преобразования ключа в его числовое представление, mod 1 означает, что F(K) является дробной частью произведения С*К. 2. Конечный хэш-адрес ...

0 комментариев


Наверх