Отыскание корня тригонометр уравнения

Министерство  общего и профессионального образования 

Российской  Федерации 

 

САМАРСКИЙ ГОСУДАРСТВЕННЫЙ

АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ 

имени академика  С.П. КОРОЛЕВА

 

Факультет инженеров  воздушного транспорта

Кафедра организации  и управления перевозками

 

 

 

 

 

 

 

Программа отыскания корня тригонометрического  уравнения 

методом половинного деления на отрезке

 

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по информатике

 

 

 

 

Выполнила студентка гр. 9418

Руководитель  курсовой работы

Доцент  Давыдов Е.И.

Оценка ______________

_______________________

(Подпись преподавателя)

«___»__________2011 г

 

 

 

 

Самара 2011 

ЗАДАНИЕ

Составить программу отыскания  корня уравнения

 

С заданной точностью методом половинного  деления на отрезке (a, b). Предусмотреть графическую иллюстрацию процесса и результатов решения.

 

РЕФЕРАТ

 

Курсовая  работа.

Пояснительная записка 22с., 6 рис., 2 табл., 6 источников

 

ТРИГОНОМЕТРИЧЕСКОЕ  УРАВНЕНИЕ, МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ, ОТЫСКАНИЕ КОРНЯ УРАВНЕНИЯ, ПРОГРАММИРОВАНИЕ, TURBO PASCAL 7.0

 

 

Разработана программа, рассчитывающая значение корня тригонометрического  уравнения методом половинного  деления на отрезке (a,b) с заданной точностью ε.

Используется физическая и математическая постановки задачи. Вычисление производится с помощью языка Turbo Pascal 7.0.

Исходные  данные по значениям a и b отрезка и точности ε вводятся с клавиатуры. Предусмотрена графическая иллюстрация результатов решения.

 

СОДЕРЖАНИЕ

Введение………………………………………………………………..

5

Основная часть…………………………………………………………

6

1 Описание программы……………………………………………….

6

    1. Общие сведения ……………………………………………………

6

1.2 Физическая постановка задачи…………………………………..

6

1.3 Функциональное назначение……………………………………..

6

1.4 Описание логической структуры…………………………………

6

1.4.1 Алгоритм программы…………………………………………..

6

1.4.2 Используемые методы…………………………………………..

7

1.4.3 Структура программы………………………………………….

7

1.5 Вызов и загрузка программы…………………………………….

8

1.6 Входные данные……………………………………………………

8

1.7 Выходные данные…………………………………………………

8

2 Руководство оператора……………………………………………..

9

2.1 Назначение программы……………………………………………

9

2.2 Условия выполнения программы………………………………..

9

2.3 Выполнение программы………………………………………….

10

2.4 Сообщение оператору…………………………………………….

12

3 Текст программы…………………………………………………….

13

Заключение……………………………………………………………..

20

Список использованных источников………………………………….

21

Приложение А. Нахождение корня уравнения  методом половинного деления  отрезка при заданной точности вычисления с помощью Microsoft Excel……………………………………………..

22


 

ВВЕДЕНИЕ

Одной из особенностей сегодняшнего времени является широкое использование  средств вычислительной техники  в народном хозяйстве. Наибольшее распространение получили персональные компьютеры. На их основе создаются автоматизированные рабочие места, информационно-справочные системы, системы управления производством и т.п. Популярность персональных компьютеров определяется их высокими техническими характеристиками и наличием разнообразных по назначению периферийных устройств. К одному из самых существенных достоинств персонального компьютера можно отнести его графические возможности. Богатая палитра цветов, высокое качество изображения позволяют представлять результаты разработок в привлекательной форме и влиять на ход выполнения программ посредством общения с компьютером в диалоговом режиме.

В данной курсовой работе разработана  программа, рассчитывающая значение корня  тригонометрического уравнения  методом половинного деления  на отрезке (a,b) с заданной точностью ε. Используется физическая и математическая постановки задачи. Исходные данные по значениям a и b отрезка и точности ε вводятся с клавиатуры. Предусмотрена графическая иллюстрация результатов решения.

Данная программа может быть полезна студентам, которым необходимо найти корень любого уравнения на заданном промежутке методом половинного  деления отрезка.

 

ОСНОВНАЯ  ЧАСТЬ

1 Описание программы

    1. Общие сведения

Наименование программы: «Программа отыскания корня тригонометрического  уравнения методом половинного  деления на отрезке»

Программное обеспечение,  необходимое  для функционирования программы: Windows 7, Windows XP, Windows 97 и др.

Язык программирования, на котором  написана программа: TURBO PASCAL 7.0

    1. Физическая постановка задачи

Составить программу отыскания  корня уравнения

 

  с заданной точностью методом половинного деления на отрезке (a, b).

    1. Функциональное назначение

Назначение программы: нахождение корня уравнения на заданном промежутке.

Функциональные ограничения на применение: данную программу можно  использовать для решения только приведенного выше уравнения, в противном  случае  нужно внести небольшие  поправки в текст программы.

    1. Описание логической структуры
      1. Алгоритм программы

Задается интервал (а,b), на котором существует только одно решение уравнения, и желаемая точность ε. Затем определяется середина заданного интервала и проверяется условие . Если указанное условие выполняется, то правую границу интервала b переносим в среднюю точку c, т.е. b:=c. Если условие не выполняется, то в среднюю точку переносим левую границу, т. е. a=c. Деление отрезка пополам происходит до тех пор, пока .

1.4.2 Используемые методы: метод  половинного деления на заданном  отрезке.

1.4.3 Структура программы с описанием функций составных частей и связи между ними (блок-схема программы). Рисунок 1.

Рисунок 1

 

 

    1. Вызов и загрузка программы

Вызов программы осуществляется с  помощью программной среды TURBO PASCAL 7.0.

    1. Входные данные

Ввод исходных данных осуществляется во втором пункте меню программы, Рисунок 2. Входные данные: значения границ интервала a и b, заданная точность вычисления e, все переменные типа real (вещественные данные). Занимают во внутреннем представлении 6 байт; диапазон возможных значений – от 2.9Е-39 до 1.7Е+38; точность представления данных – 11..12 значащих цифр. 

Рисунок 2

    1. Выходные данные

Выходные данные выводятся в 3 пункте меню программы, Рисунок 3. Выходные данные: корень х заданного уравнения на данном промежутке (a,b), вычисленный с точностью е, х – переменная типа real (вещественные данные). Занимает во внутреннем представлении 6 байт; диапазон возможных значений – от 2.9Е-39 до 1.7Е+38; точность представления данных – 11..12 значащих цифр. 

Рисунок 3

 

 

2 Руководство оператора

2.1 Назначение программы 

Программа предназначена для нахождения корня уравнения на заданном промежутке с заданной точностью. Значения левой  и правой границы интервала, а  также точность вычисления вводятся с клавиатуры.

2.2 Условия выполнения программы

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

2.3 Выполнение программы

Последовательность действий оператора:

Запустить программную среду TURBO PASCAL 7.0, открыть нужный файл, нажать комбинацию клавиш Alt+R, либо Ctrl+F9. Итак, программа запущена, перед оператором появляется диалоговое окно или меню программы, Рисунок 4.

Рисунок 4

Пользователь с помощью нажатия  клавиш вправо или влево может  передвигать по пунктам меню. Для  того, чтобы открыть ту или иную вкладку, необходимо поставить на ней  курсор и нажать клавишу Enter.

Если пользователь выбрал вкладку  «Задание», появляется диалоговое окно, в котором представлены сведения о разработчике программы и сведения о самой программе, Рисунок 5.

Рисунок 5

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

Для получения результатов вычисления пользователь должен зайти в третий пункт меню, который представит результаты вычислений, Рисунок 3.

Для выхода из программы оператор открывает четвертую вкладку. Появляется диалоговое окно с запросом выхода. При нажатии клавиши «Д»,  программа  завершает свою работу, Рисунок 6.

Рисунок 6

2.4 Сообщения  оператору 

«Для  просмотра меню используйте ßà» - сообщение, которое выводится в нижней строке при нахождении пользователя в основном меню программы. Необходимо нажать клавишу вправо или влево для перемещения по пунктам меню.

«Для  выхода в меню нажмите пробел» - сообщение, которое выводится в нижней строке при нахождении пользователя в любом  из пунктов меню программы, когда  выполнены все необходимые действия. Требуется нажать клавишу пробел для выхода пользователя в основное меню программы.

«Закончим? Да Нет» - сообщение, которое выводится  в виде диалогового окна при нажатии  пользователем  последнего пункта меню программы, означающее желание выйти  из программы. Требуется нажать клавишу  «д» в случае, если оператор действительно желает завершить работу с программой, в противном случае, нажать клавишу «н».

 

 

 

3 Текст программы

uses crt;

const

  Da=['¤','„','l','L']; Net=['­','Ќ','y','Y'];

  Sign=['.',',','!','?'];

  Enter = #13; esc = #27; Space = #32; BS = #8; Del = #83; Tab = #9;

  right=#77; {vpravo} left=#75; {vlevo}  punkt=4;

      Punkt_Menu:array[1..punkt] of

      string=(' Zadanie ',' Vvod dannih ',' Rezultati ',' Exit ');

      coord_menu:array[1..punkt] of Byte=(3,20,45,65);

 

{-----------pushu v zadannyy poziciy------------}

Procedure  WriteXY(x,y:byte; s:string);

begin

      GoToXY(x,y); write(s);

end;

 

{-----------------rusovanie okna------------------}

Procedure MyWindow(x1,y1,x2,y2,ColorFon,ColorSymbol:byte;

   frame {ramka}, shadow {ten}:boolean; WinName {name okna}:string);

var i:byte;

begin

    if shadow then begin

      window(x1+1,y1+1,x2+1,y2+1); TextBackGround(black);

      ClrScr;

    end;

    window(x1,y1,x2,y2); TextBackGround(ColorFon); TextColor(ColorSymbol);

      ClrScr;

    if frame then begin

      window(x1,y1,x2,y2+1);

      write('Й');   {alt / +Dop. klava}

      for i:=1 to x2-x1-1 do write('Н');

      write ('»');

      for i:=1 to y2-y1-1 do begin

write ('є'); WriteXY(x2-x1 + 1,i + 1,'є');

      end;

      write('И');

      for i:=1 to x2-x1-1 do write('Н');

      write('ј');

      WriteXY((x2-x1+2)div 2-Length (WinName) div 2,1,WinName);

      window(x1+ 1, y1+1, x2-1, y2-1);

    end;

end {MyWindow};

 

{--------zapolnenie polia cumvolamu--------------}

Procedure Field(ColorFon,ColorSymbol  :  Byte);

Var  x,y:byte;

begin

   MyWindow(1,1,80,25,ColorFon,ColorSymbol,False,False, ' ');

   for y:=1 to 24 do

    for x:=1 to 80 do

       write('°');

end {Field};

 

{---vivodit coobshenue u gdet nagatia zadannoi klavushu---}

Procedure WriteMesssage (Message : String;

  ColorFon,ColorSymbol : byte;

  Code : Char;

  NameCode : String;

  PressCode:Boolean);

       {nado lu kontrolurovat nagatue klavishu}

begin

   MyWindow(1,25,80,25,colorFon,ColorSymbol,False,False,'');

   WriteXY(35-(length(NameCode)+length(Message))

       div 2, 1, Message);

   TextColor(red+128); write(' ',NameCode);

   If PressCode then repeat until ReadKey=Code;

end {WriteMesssage};

 

{-------------zapros na vixod-----------------------}

Procedure Da_Net (Message : String; {coobshenue}

  ColorFon : byte;   {cvet fona}

  var ch : char);    {kakaia nagata clavisha?}

begin

   write(Message);

   repeat

     ch := readkey;

   until ch in Da+Net;

end {Da_Net};

 

{-------------spriach kyrsor------------------}

Procedure HideCursor(ColorFon : byte);

begin

   MyWindow(80,25,80,25,ColorFon,ColorFon,False,False,'');

end {HideCursor};

 

{--------------pokazat kyrsor menu----------------}

Procedure Show_Cursor(posit : byte); {posit - pozicia pynkta menu}

begin

   TextBackGround(lightmagenta);

   WriteXY(Coord_Menu[posit],1,Punkt_Menu[posit]);

end {Show_Cursor};

 

{------------skrit kyrsor menu----------------}

Procedure Hidden_Cursor(posit : byte);

begin

   TextBackGround(lightgray);

   WriteXY(Coord_Menu[posit],1,Punkt_Menu[posit]);

end {Hidden Cursor};

 

{--------peremeshenie kyrsor menu vlevo-----------}

Procedure Cursor_Left(var posit : byte);

begin

   Hidden_Cursor(posit);

   dec(posit);   {ymenshaem nomer pozicii na 1}

   if posit < 1 then posit:=punkt;

   Show_Cursor(posit);

end {Cursor_Left};

 

{-------peremeshenie kyrsor menu vpravo-----------}

Procedure Cursor_Right(var posit : byte);

begin

   Hidden_Cursor(posit); inc(posit);

   if posit > punkt then posit:=1;

   Show_Cursor(posit);

end {Cursor_Right};

 

{---------sozdanie pervoi stranici menu-----------}

Procedure Menu (posit:byte);

var i : byte;

begin

   Field(blue, lightblue);

   WriteMesssage(' Dlya prosmostra menu ispolzyite ',

   white,black, #0, '<- ->',False);

   MyWindow(1,1,80,1,white,black,false,false,'');

   for i:=1 to Punkt do begin

     WriteXY(Coord_Menu[i],1,Punkt_Menu[i]);

end;

Show_Cursor(posit);

end {Menu};

 

{======funcziya rascitivaet znachenie argumenta x======}

function f(x:real):real;

begin

   f:=2*sin(x)+1;

end;

 

{====== rascitivaet kolichestvo iterazii======}

Function res(a,b,e:real):real;

var x:real; n:byte;

begin

   x:=(a+b)/2;

   while abs(b-a)>e do

     begin

       if f(x)*f(a)<0

         then b:=x

       else a:=x;

       x:=(a+b)/2;

     end;

   res:=x;

end;

 

{============vvod peremennoi tipa real================}

Procedure InputReal (npos : Byte; var number :real);

Var S: String;

     ErrorCode : Integer;

     Ch : Char;

     Flag : Boolean;

Begin

     Flag := False;

     S := '';

     Repeat

       Ch :=ReadKey;

       Case Ch of

         BS      : If length(S) > 0 then

                      delete (s, length(s), 1);

         Enter   : If length(S) > 0 then Flag:=True;

         '0'..'9','.': If length(S) < npos then S:=S+Ch;

         '-'     :if length(s)=0 then S:=S+Ch;

       end;

       ClrScr; Write(S);

     Until Flag;

     Val (S, number, ErrorCode);

end;{InputReal}

 

Procedure FirstPage;

Begin

   MyWindow (6,6,73,9,lightgray,blue,true,true,' Avtor ');

   WriteXY (6,1,'Vipolnila: stydentka 9418  gr. Motrinez A.U. ');

   WriteXY (6,2, 'Proveril: Davidov E.I.');

   MyWindow (6,12,73,19,lightgray,blue,true,true,' Zadanie ') ;

   WriteXY(4,2, 'Sostavit programmy otiskaniya kornya yravneniya');

   WriteXY(16,3, '            2sin(x)+1=0');

   WriteXY(4,4, 's zadannoi tochnostiu metodom polovinnogo deleniya ');

   WriteXY(4,5, 'na otrezke (a,b).');

end;

 

Procedure SecondPage(var a,b,e:real);

begin

   MyWindow (10,8,70,15,lightgray,blue,true,true,' Vvod ishodnih dannih ');

   WriteXY(6,2,'Vvedite znacheniya a i b otrezka (a;b)  ');

   WriteXY(10,3,'a = ');    WriteXY(26,3,'b = ');

   WriteXY(6,5,'Vvedite znachenie tochnosti e  ');

   WriteXY(10,6,'e = ');

   MyWindow(25,11,35,11,lightgray,blue,false,false,'');

   InputReal(7, a);

   MyWindow(40,11,50,11,lightgray,blue,false,false,'');

   InputReal(7, b);

   MyWindow(25,14,40,14,lightgray,blue,false,false,'');

   InputReal(7, e);

end;

 

Procedure ThirdPage(var a,b,e,x:real);

begin

   MyWindow (10,8,70,20,lightgray,blue,true,true,' Rezultati ');

   WriteXY(6,2,'Znacheniya a i b otrezka (a;b)  ');

   WriteXY(10,3,'a = ');    WriteXY(26,3,'b = ');

   WriteXY(6,5,'Znachenie tochnosti e  ');

   WriteXY(10,6,'e = ');

   WriteXY(6,8,'Otvet: znachenie x na zadannom otrezke  ');

   WriteXY(10,9,'x = '); x:=res(a,b,e);

   MyWindow(25,11,35,11,lightgray,blue,false,false,'');

   write(a:7:5);

   MyWindow(40,11,50,11,lightgray,blue,false,false,'');

   write(b:7:5);

   MyWindow(25,14,40,14,lightgray,blue,false,false,'');

   write(e:7:5);

   MyWindow(25,17,35,17,lightgray,blue,false,false,'');

   write(x:7:5);

end;

 

Procedure Main_Menu;

var q,ch : char;

     a,b,e,x:real;

     posit : byte;

     Program_exit : boolean;

begin

   posit := 1; Menu(posit);

   Program_exit := false;

repeat

   q := ReadKey;

   if q = #0 then begin {ypravliaychaia klavisha  }

     q := ReadKey;

     case q of

       Right : Cursor_Right (posit); {vpravo}

       Left : Cursor_Left (posit);   {vlevo}

     end;

   end

   else

     if q = Enter then

   case posit of

   1 : begin

     FirstPage;  {zadanie}

     WriteMesssage (' Dlya vihoda v menu nagmite klavishy ',

     lightgray,black,Space, 'probel',True);

     Menu(posit); {vozvrat k pervoi stranice}

   end;

   2 :begin

        SecondPage(a,b,e);

        WriteMesssage('Dlya vihoda v menu nagmite klavishy ',

   lightgray,black,Space,'probel',True);

        Menu(posit);  {vozvrat k pervoi stranice}

 

    end;

   3 : {rabota}

begin

        ThirdPage(a,b,e,x);

WriteMesssage(' Dlya vihoda v menu nagmite kavishy ',

       lightgray,black,Space,'probel',True);

Menu(posit); {vozvrat k pervoi stranice}

    end;

   4  : {vixod}

       begin

       MyWindow(1,25,80,25,white,white,false,false,'');

       MyWindow(31,10,49,12,red,white,true,true,' Zakonchim? ');

       Da_Net('  DA     NET  ',LightGray,ch);

if ch in Da then Program_exit := true

       else begin

        WriteMesssage(' Dlya prodolgeniya nagmite ',lightgray,

                       black,Space,'probel',True);

         Menu (posit);  {vozvrat k pervoi stranice}

       end;

     end;

  end;

until  Program_exit;

MyWindow(1,1,80,25,black,white,false,false,'');

writeXY(35,10, 'Good bye!');

Delay(2000);

end {Main_Menu};

begin{Glavnui}

   Main_Menu;

end.

 

ЗАКЛЮЧЕНИЕ

Информатике трудно существовать как  отдельной науке, она должна помогать другим учебным предметам  в  развитии  познавательного  интереса  к предмету, в решении логических задач, в обработке  результатов  лабораторных работ и индивидуальных практических заданий.

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

 

 

СПИСОК  ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. СТО СГАУ 02068410-004-2007. Общие требования к оформлению учебных текстовых документов. Методические указания.
  2. Построение, изложение и оформление программных документов: Методические указания / Автор-составитель В.Д.Еленев; Куйбышев. Авиац. Ин-т. Куйбышев, 1987.
  3. Фаронов В.В. Турбо Паскаль (в 3-х книгах). Основы Турбо Паскаля. МВТУ – Фесто ДиДактик. Москва, 1992. – 304 с.
  4. Епанешников А.М., Епанешников В.А. Программирование в среде TURBO PASCAL 7.0. М.: Диалог-МИФИ, 1998.
  5. ГОСТ 19.505-79.ЕСПД. Руководство оператора.
  6. ГОСТ 19.401-78. ЕСПД. Текст программы.

 

Приложение А

Нахождение корня уравнения  методом половинного деления  отрезка при заданной точности вычисления с помощью Microsoft Excel

 

Таблица 1

a

b

c=(a+b)/2

f(a)

f(b)

f(с)

|b-a|<e

e

-1,00000

0,00000

-0,50000

-0,68294

1,00000

0,04115

-

0,00001

-1,00000

-0,50000

-0,75000

-0,68294

0,04115

-0,36328

-

 

-0,75000

-0,50000

-0,62500

-0,36328

0,04115

-0,17019

-

 

-0,62500

-0,50000

-0,56250

-0,17019

0,04115

-0,06661

-

 

-0,56250

-0,50000

-0,53125

-0,06661

0,04115

-0,01322

-

 

-0,53125

-0,50000

-0,51563

-0,01322

0,04115

0,01384

-

 

-0,53125

-0,51563

-0,52344

-0,01322

0,01384

0,00028

-

 

-0,53125

-0,52344

-0,52734

-0,01322

0,00028

-0,00648

-

 

-0,52734

-0,52344

-0,52539

-0,00648

0,00028

-0,00310

-

 

-0,52539

-0,52344

-0,52441

-0,00310

0,00028

-0,00141

-

 

-0,52441

-0,52344

-0,52393

-0,00141

0,00028

-0,00057

-

 

-0,52393

-0,52344

-0,52368

-0,00057

0,00028

-0,00014

-

 

-0,52368

-0,52344

-0,52356

-0,00014

0,00028

0,00007

-

 

-0,52368

-0,52356

-0,52362

-0,00014

0,00007

-0,00004

-

 

-0,52362

-0,52356

-0,52359

-0,00004

0,00007

0,00002

-

 

-0,52362

-0,52359

-0,52361

-0,00004

0,00002

-0,00001

-

 

-0,52361

-0,52359

-0,52360

-0,00001

0,00002

0,00000

-

 

-0,52361

-0,52360

-0,52360

-0,00001

0,00000

0,00000

-0,52360

 

 

Таблица 2

a

b

c=(a+b)/2

f(a)

f(b)

f(с)

|b-a|<e

e

-3,00000

-2,00000

-2,50000

0,71776

-0,81859

-0,19694

-

0,001

-3,00000

-2,50000

-2,75000

0,71776

-0,19694

0,23668

-

 

-2,75000

-2,50000

-2,62500

0,23668

-0,19694

0,01216

-

 

-2,62500

-2,50000

-2,56250

0,01216

-0,19694

-0,09453

-

 

-2,62500

-2,56250

-2,59375

0,01216

-0,09453

-0,04169

-

 

-2,62500

-2,59375

-2,60938

0,01216

-0,04169

-0,01489

-

 

-2,62500

-2,60938

-2,61719

0,01216

-0,01489

-0,00140

-

 

-2,62500

-2,61719

-2,62109

0,01216

-0,00140

0,00537

-

 

-2,62109

-2,61719

-2,61914

0,00537

-0,00140

0,00199

-

 

-2,61914

-2,61719

-2,61816

0,00199

-0,00140

0,00029

-

 

-2,61816

-2,61719

-2,61768

0,00029

-0,00140

-0,00055

-2,61768

 

 


Отыскание корня тригонометр уравнения