Главная Рефераты по сексологии Рефераты по информатике программированию Рефераты по биологии Рефераты по экономике Рефераты по москвоведению Рефераты по экологии Краткое содержание произведений Рефераты по физкультуре и спорту Топики по английскому языку Рефераты по математике Рефераты по музыке Остальные рефераты Рефераты по авиации и космонавтике Рефераты по административному праву Рефераты по безопасности жизнедеятельности Рефераты по арбитражному процессу Рефераты по архитектуре Рефераты по астрономии Рефераты по банковскому делу Рефераты по биржевому делу Рефераты по ботанике и сельскому хозяйству Рефераты по бухгалтерскому учету и аудиту Рефераты по валютным отношениям Рефераты по ветеринарии Рефераты для военной кафедры Рефераты по географии Рефераты по геодезии Рефераты по геологии Рефераты по геополитике Рефераты по государству и праву Рефераты по гражданскому праву и процессу Рефераты по делопроизводству Рефераты по кредитованию Рефераты по естествознанию Рефераты по истории техники Рефераты по журналистике Рефераты по зоологии Рефераты по инвестициям Рефераты по информатике Исторические личности Рефераты по кибернетике Рефераты по коммуникации и связи |
Курсовая работа: Метод Золотого сечения на DelphiКурсовая работа: Метод Золотого сечения на DelphiСодержание 1. Введение 2. Характеристика объекта автоматизации 3. Проектная часть Математическое описание Описание блок-схемы алгоритма программы Обоснование выбора языка программирования Тестирование Инструкция пользователя 4. Заключение 5. Приложение 1 Введение Целью курсовой работы является вычисление приближенного значения интеграла методом Симпсона, путем ввода функции, отрезка и шага dx. История появления и развития персональных компьютеров является одним из наиболее впечатляющих явлений нашего века. С момента появления первых образцов персональных компьютеров прошло меньше 25 лет, но сейчас без них уже немыслимо огромное количество областей человеческой деятельности - экономика, управление, наука, инженерное дело, издательское дело, образование, культура и т.д. Интерес к персональным компьютерам постоянно растет, а круг их пользователей непрерывно расширяется. В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле, так и специалисты по другим классам ЭВМ. Благодаря новейшим технологиям в компьютерной сфере решение инженерных, математических, технических и коммерческих задач помогает быстро и точно решить ту или иную задачу. Актуальность решения задачи методом Симпсона с помощью ПЭВМ для учебных заведений – является быстрота и точность решения определенного интеграл от функции, имеющей неэлементарную первообразную. 2 Характеристика объекта автоматизации Объектами автоматизации являются учебные заведения, оснащенные компьютеризированной аудиторией. Автоматизация учебного процесса для решения задач по предмету – численные методы. Темпы научно – технического прогресса, усиление роли науки в значительной степени определяются качеством и номенклатурой средств вычислительной техники и их программным обеспечением. Именно развитие этих средств обеспечивает успехи в автоматизации производственных процессов, в разработке новых технологий, в повышении эффективности труда и управления, в совершенствовании системы образования и в ускорении подготовки кадров. Использования компьютера в процессе обучения математики позволяет реализовать возможности новейших педагогических технологий личностно-ориентированного обучения. Благодаря математическому программированию появилась возможность расширить учебный план благодаря быстрому и качественному решению математических задач на компьютере. Решая проблему использования компьютера в процессе обучения математики, следует исходить не столько из функциональных возможностей компьютера и желания использовать его в учебном процессе, сколько из методической системы обучения математики, анализ которой должен показать, какие учебные задачи могут быть решены только средствами компьютера, ибо другие дидактические средства менее эффективны или вообще не применимы. Обучение с использование компьютерной техники носит диалоговый характер, при котором учитель в любой момент может внести коррективы. На занятиях хорошо сочетаются индивидуальная и групповая форма работы. Ученики находятся в состоянии комфорта при работе на компьютере. Компьютер может быть использован на самых различных этапах обучения математики, и это применение основано, прежде всего, на его графических возможностях. Использование информационно-обучающей программы «Уроки алгебры и геометрии» Кирилла и Мефодия позволяют моделировать и наглядно демонстрировать содержание изучаемых тем. Табличный процессор Excel и математический пакет Mathcad являются удобным инструментом для решения различных математических задач. Неоценим компьютер и при комплексном тестировании. Можно использовать любые обучающие программы или контролирующие упражнения. Всегда необходимо тщательно подбирать соответствующие упражнения, так как они должны соответствовать целям тестирования. Применение тестирующих программ позволяет учителю получить объективную информацию о владении учащимися определенным набором знаний, умений и навыков для продолжения образования, а также об уровне этих знаний. Таким образом, применение новых технологий в образовании должно рассматриваться как стратегическое, управленческое решение, ориентированное на формирование и развитие новой образовательной системы, направленной на повышение качества образования, повышать мотивацию обучения, способствовать углублению межпредметных связей. 3 Проектная часть Постановка задачи 3.1 Математическое описание. Формула Симпсона Значение определенного интеграла находится методом Симпсона (парабол). Отрезок [a, b] разбивается на n=2m частей x0 =a, x1 =a+h, ..., xn =b с шагом h=(b-a)/n. Вычисляются значения yi = F(xi ) функции в точках xi и находится значение интеграла по формуле Симпсона: Затем количество точек разбиения удваивается и производится оценка точности вычислений Если Rn > e, то количество точек разбиения удваивается. Значение суммы 2(y1 +y2 +...+y2m-1 ) сохраняется, поэтому для вычисления интеграла при удвоении количества точек разбиения требуется вычислять значения yi лишь в новых точках разбиения.
3.2 Описание блок-схемы алгоритма программы 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. Вывод результата. 3.3 Обоснование выбора языка программирования Для создания программы курсового проекта я выбрал язык программирования – Delphi. Delphi — это язык программирования, который используется для создания разнообразных продуктов ПО. До недавнего времени он имел другое название — Object Pascal. Delphi представляет собой объектно-ориентированное программирование, которое предполагает существование определенной объектной библиотеки или так называемой библиотеки прототипов, использование которой больше не характеризует процесс программирования как громоздкое и сложное мероприятие. Образование представленного средства программного обеспечения происходило в рамках компании Borland, которая сейчас занимается разработкой системы управления жизненным циклом приложений. Специфической особенностью и вместе с тем недостатком Delphi являлось то, что использование подобного языка программирования на первых порах возможно было только в рамках операционной системы Microsoft Windows. Сейчас же работа с Delphi осуществляется и на таких платформах, как GNU/Linux, Mac OS X и Windows CE. Во многом Delphi стал основой для создания такого языка программирования как С#. Распространено также использование Delphi при разработки различных компонентов программного обеспечения. Примером категорий программных продуктов могут быть: утилиты, информационное обеспечение в Интернете, веб-проектирование, музыкальное оформление, инженерное программное обеспечение, создание баз данных и др. Delphi имеет особенность постоянно модернизироваться, о чем свидетельствует периодическое обновление в виде появления новых версий. На сегодняшний день, последней, 12 версией программного средства является Delphi 2009, которая подразумевает некоторые совершенствования в системе языка программирования. Во-первых, модернизация элементов Delphi касается уникода, а именно, предполагается полная его поддержка. Во-вторых, наличие элементов для осуществления обобщенного программирования, которое подразумевает разработку алгоритмов, применимых к разным типам данных. В-третьих, использование безымянных функций, которые не предполагают лексического токена, а именование сущностей делает возможным ссылки на них, которые могут использоваться позже. 3.4. Тестирование Аппаратное, программное обеспечение, на котором проводилось тестирование: Данные компьютера: Процессор – Celeron 1.7; ОЗУ – 256 Мб; Видео – 64 Мб; HDD – 20 Gb; Привод CD-Rw Операционная система: Windows Xp. Решение задачи Приведем пример решение задачи методом Симпсона Вычислить значение интеграла Решение задачи без помощи программного обеспечения:
Решение задачи с помощью программы Метод Симпсона.exe: Данная программа работает корректно, т.к. ответы совпадают. 3.5 Инструкция пользователя Данная программа состоит из 1 откомпилированного exe файла – Метод Симпсона.exe и rar-архива содержащего все компоненты программы написанных на языке программирования – Delphi 7.0. 1. Запуск программы осуществляется путем открытия файла Метод Симпсона .exe.
2. Ввод значений производится следующим образом:
Ввод отрезка [a,b] производится путем ввода - точка а (начальная точка), - точка b (конечная точка отрезка). Шаг h или dx – ввод в . 3. После ввода всех значений интеграла необходимо нажать кнопку (см. рис.4).
где – таблица значений Xi b F(xi);
- приближенное значение интеграла. - 4. Для вывод справочной информации о пользовании программой необходимо нажать кнопку , после чего на экран выводится следующее окно (см. рис.7)
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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||