Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Описание блок-схемы алгоритма программы

 

1. Ввод переменных a,b,dx и функции f(x);

2. Вычисление значений Xi на отрезке a,b с шагом h. Продолжение цикла до конца отрезка а,b

3. Вывод всех значений F(xi) в массив;

4. Вычисление F(xi) и вывод в массив;

5. Проверка на значение натурального логарифма;

6. Проверка на значение косинуса;

7. Проверка на значение синуса или корня;

8. Проверка на значение цифры;

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

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

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

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

13.  Вычисление значения F(x);

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

 

Обоснование выбора языка программирования

 

Для создания программы курсового проекта я выбрал язык программирования – Delphi. Delphi — это язык программирования, который используется для создания разнообразных продуктов ПО. До недавнего времени он имел другое название — Object Pascal. Delphi представляет собой объектно-ориентированное программирование, которое предполагает существование определенной объектной библиотеки или так называемой библиотеки прототипов, использование которой больше не характеризует процесс программирования как громоздкое и сложное мероприятие.

Образование представленного средства программного обеспечения происходило в рамках компании Borland, которая сейчас занимается разработкой системы управления жизненным циклом приложений.

Специфической особенностью и вместе с тем недостатком Delphi являлось то, что использование подобного языка программирования на первых порах возможно было только в рамках операционной системы Microsoft Windows. Сейчас же работа с Delphi осуществляется и на таких платформах, как GNU/Linux, Mac OS X и Windows CE.

Во многом Delphi стал основой для создания такого языка программирования как С#.

Распространено также использование Delphi при разработки различных компонентов программного обеспечения. Примером категорий программных продуктов могут быть: утилиты, информационное обеспечение в Интернете, веб-проектирование, музыкальное оформление, инженерное программное обеспечение, создание баз данных и др.

Delphi имеет особенность постоянно модернизироваться, о чем свидетельствует периодическое обновление в виде появления новых версий. На сегодняшний день, последней, 12 версией программного средства является Delphi 2009, которая подразумевает некоторые совершенствования в системе языка программирования. Во-первых, модернизация элементов Delphi касается уникода, а именно, предполагается полная его поддержка. Во-вторых, наличие элементов для осуществления обобщенного программирования, которое подразумевает разработку алгоритмов, применимых к разным типам данных. В-третьих, использование безымянных функций, которые не предполагают лексического токена, а именование сущностей делает возможным ссылки на них, которые могут использоваться позже.

 

Тестирование

 

Аппаратное, программное обеспечение, на котором проводилось тестирование:

Данные компьютера:

Процессор – 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:

Данная программа работает корректно, т.к. ответы совпадают.


Инструкция пользователя

 

Данная программа состоит из 1 откомпилированного exe файла – Метод Симпсона.exe и rar-архива содержащего все компоненты программы написанных на языке программирования – Delphi 7.0.

1. Запуск программы осуществляется путем открытия файла Метод Симпсона.exe.

 

Рис 1.

 

2.

 

Ввод значений производится следующим образом:

Рис 2.
Ввод функции f(x) – в данное окно производится ввод формулы предназначенной для вычисления значения интеграла. Для просмотра используемых арифметических действий при вводе необходимо нажать левой кнопкой мышки на , после чего на экран выводится следующее окно (см. рис. 3).

 

Рис 3.

 

Ввод отрезка [a,b] производится путем ввода  - точка а (начальная точка),  - точка b (конечная точка отрезка).

Шаг h или dx – ввод в .

3. После ввода всех значений интеграла необходимо нажать кнопку  (см. рис.4).

Рис 4.

где – таблица значений Xi b F(xi);

 
Рис 5.


 

- приближенное значение интеграла.

-

4. Для вывод справочной информации о пользовании программой необходимо нажать кнопку , после чего на экран выводится следующее окно (см. рис.7)

Рис 7.

 


Заключение

 

Данная программа была написана на языке 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.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...