Отчет о лабораторной работе №3




ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ

по дисциплине «Основы программирования»

 

 

Выполнил: ст-т гр. 19КП2

Сучков А. Ю.

Проверил: доцент каф. ИВС

Хохлов А. Е.

 


1 Формулировка задачи

 

С точностью 10-5 вычислить наименьший положительный ненулевой корень уравнения tg x = 2 x, используя метод деления отрезка пополам.

 

2 Техническое задание

 

2.1 Требования к программе

 

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

 

2.2 Порядок контроля и приёмки

 

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

 

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

 

3.1 Общие сведения

 

Программа разработана в среде Lazarus, её текст приведен в приложении А.

 

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

 

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

 

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

 

Схема программы представлена на рисунке 1.

Решение задачи начинается с ввода исходных данных a, b (блок 2). Затем исходные данные присваиваются значению функции (блок 3). Если вводимые числовые значения имеют один и тот же знак, то программа выводит текст “Введены не верные значения для границ” (блок 5) и прекращает свою работу, иначе программа выполняет цикл (блоки 6 - 12). Работы цикла c1 (блок 6) начинается с нахождения среднего значения c для двух границ, заданных условием (блок 4) и вычисления значения функции f в точке с (блок 8). Если произведение значений функций f(a) и f(c) меньше нуля, то в качестве значения c присваивается b, иначе программа присвоит c значение a (блок 7). Цикл c1 будет работать до тех пор, пока не выполнится условие разность b и a по модулю не станет меньше константы e.

Результатом работы программ является нахождение значения x (блок 13) и его вывод на экран (блок 14).

 

 

 


+

 

-
Вывод: Введены неверные значения границ

 
 
c1

 

 

               
 
 
   
 
   
 
   

 


  b:=c

 


       
   
 
 
 

 


 

Рисунок 1 – Схема программы

 

 
 


Текст программы приведен в приложении А.

На форме расположены следующие объекты:

- три текстовых поля Label1, Label2, Label3 с вкладки Standart. В свойстве Caption этих объектов помещены пояснения для пользователя программы:

Label1.Caption – 'Введите a',

Label2.Caption – 'Введите b',

Label3.Caption – 'Корень уравнения'.

- 2 поля редактирования Edit1, Edit2, с вкладки Standart - для ввода исходных данных и 1 поле Edit3 для вывода полученного результата работы программы;

- кнопка Button1 с вкладки Standart для создания обработчика события, который вычисляет корень заданной функции. В свойстве Caption этого объекта помещено пояснение для пользователя программы: Button1.Caption - 'Рассчитать количество информации'.

Обработчик TForm1.Button1Click обрабатывает щелчок по кнопке «Вычмслить». В разделе описания переменных этого обработчика описаны:

- переменные вещественного типа real:

a – первая граница,

b – вторая граница,

fa – значение функции для a,

fb – значение функции для b,

c – среднее значение,

fc – значение функции для c,

x – корень уравнения,

- раздел const:

e – задаваемая точность.

 

Исполняемая часть обработчика начинается с ввода исходных данных a, b. Эти переменные вводится с помощью свойства Text объектов Edit. При этом используется стандартная функция преобразования из строкового типа (string) в вещественный тип (real) — StrToFloat. Затем происходит расчет значений для fa, fb подстановкой в функцию и получение среднего значения для c задаваемых границ a, b

f(a):=sin(a)/cos(a)-2*a,

f(b):=sin(b)/cos(b)-2*b,

c:=(a+b)/2

Переход к отношению синуса к косинусу необходим потому, что в языке Object Pascal нет стандартной функции тангенса.

Для вывода результата формируется поле Edit3, в которое записывается результат работы программы преобразования вещественного числа в строку FloatToStrF(x).

 

4 Программа и методика испытаний

 

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

Таблица 1

Данные Значение
Граница a -1,5
Граница b  

 

Вручную рассчитаем функцию для a, b

f(a)=sin(-1,5)/cos(-1,5)-2*(-1,5)=-11,1014199

f(b)=sin(1)/cos(1)-2*(1)=-0,44259227

и среднее значение

c=(-1,5+1)/2=0,25

Рассчитаем значение для функции c

f(c)=sin(0,25)/cos(0,25)-2*(0,25)=0,244685

Приблизительный ответ после ручных расчётов составляет -4.0E-6

Для проверки правильности работы программы необходимо запустить ее на выполнение и ввести исходные данные из таблицы 1. После этого нажать левой кнопкой мыши на кнопку «Вычислить». На форме появляется результат работы программы.

Таблица 2

Данные Значение
Граница a -1
Граница b 1,5

 

Вручную рассчитаем функцию для a, b

f(a)=sin(-1)/cos(-1)-2*(-1)=11,1014199

f(b)=sin(1,5)/cos(1,5)-2*(1,5)=-0,44259227

и среднее значение

c=(1,5+1)/2=2,5

Рассчитаем значение для функции c

f(c)=sin(2,5)/cos(2,5)-2*(2,5)=0,498255

Приблизительный ответ после ручных расчётов составляет 3.8E-6

 

При работе программы с тестовыми данными получены результаты, приведенные в приложении Б на рисунках Б.1. Результаты приведенные в таблице 2 совпадают с результатами на рисунке Б.1. Таким образом, можно сделать вывод, что программа работает правильно

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

 

5 Описание применения

 

После запуска программы на выполнение на экране появляется 2 строчки для ввода a и b границ (см. Приложение Б). Пользователь должен заполнить поля «Введите a», «Введите b» и нажать левой кнопкой мыши на кнопку «Вычислить». На форме появляется результат работы программы.


 

Вывод

 

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


 
 

 


ТЕКСТ ПРОГРАММЫ

Приложение А

(обязательное)


unit Unit1;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);

function f(x:real):real;

begin

f:=sin(x)/cos(x)-2*x;

end;

const e= 0.00005;

var a,b,c,x,fa,fb,fc:real;

begin

a:=StrToFloat(edit1.text);

b:=StrToFloat(edit2.text);

fa:=f(a);

fb:=f(b);

If (a<0) and (b<0) or (a>0) and (b>0) then

Begin

Edit3.text:=' ';

ShowMessage ('Введены не верные значения для границ')

end

else

Begin

repeat

c:=(a+b)/2;

fc:=f(c);

if (f(a)*f(c)<0) and (c>0) then b:=c

else a:=c;

until abs(b-a)<e;

x:=(a+b)/2;

edit3.text:=FloatToStr(x);

end;

end;

end.

 
 

 

 


РЕЗУЛЬТАТЫИСПЫТАНИЙ

Приложение Б

(обязательное)


Рисунок Б.1

 

Рисунок Б.2

Рисунок Б.3

 

Рисунок Б.4



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-12-05 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: