Описание блок-схемы алгоритма программы
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. Решение задачи Приведем пример решение задачи методом Симпсона Вычислить значение интеграла Решение задачи без помощи программного обеспечения:
Решение задачи с помощью программы Метод Симпсона.exe: Данная программа работает корректно, т.к. ответы совпадают. Инструкция пользователя
Данная программа состоит из 1 откомпилированного exe файла – Метод Симпсона.exe и rar-архива содержащего все компоненты программы написанных на языке программирования – Delphi 7.0.
1. Запуск программы осуществляется путем открытия файла Метод Симпсона.exe.
2.
Ввод значений производится следующим образом:
Ввод отрезка [a,b] производится путем ввода - точка а (начальная точка), - точка b (конечная точка отрезка). Шаг h или dx – ввод в . 3. После ввода всех значений интеграла необходимо нажать кнопку (см. рис.4).
где – таблица значений Xi b F(xi);
- приближенное значение интеграла. - 4. Для вывод справочной информации о пользовании программой необходимо нажать кнопку , после чего на экран выводится следующее окно (см. рис.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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|