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.
... для обучения физике и математике, в силу их отсутствия на рынке. Исходя из вышеизложенных соображений, я считаю, что тема моей дипломной работы «Разработка электронного учебника по математике для студентов I курса отделения информатика-иностранный язык» является актуальной в силу того, что потребность в таком электронном учебнике несомненно есть, а самих учебников по данной теме либо совсем нет, ...
... программного комплекса ведется на основании задания на дипломную работу, утвержденное приказом ректора Донбасской машиностроительной академии по ГОСТ 19.101-77. Тема дипломной работы – «Программно – методический комплекс для мультимедийного представления учебной информации». Спецчасть разработки – «Разработка программного обеспечения для интерфейса оболочки комплекса и примера информационного ...
... плана и состав слушателей, происходит определение стратегии курса, разрабатывается сценарий и интерактивное взаимодействие программы с пользователями. Разрабатываемый электронный справочник предназначен для самостоятельной работы студентов младших курсов по изучению Visual Basic в рамках университетского курса. Его создание имеет своей целью предоставить студентам, изучающим Visual Basic весь ...
... . Вычисление хэш-адреса происходит в два этапа: 1. Вычисление нормализованного хэш-адреса в интервале [0..1] по формуле: хеширование адрес алгоритм обработка текстовый F(K) = (С*К) mod 1, где С — некоторая константа из интервала [0..1], К — результат преобразования ключа в его числовое представление, mod 1 означает, что F(K) является дробной частью произведения С*К. 2. Конечный хэш-адрес ...
0 комментариев