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




ТЕМА РАБОТЫ

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

 

 

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

Солдатов К. А.

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

Хохлов А. Е.

 

 


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

 

Вычислить с точностью e корень уравнения.

x4 - 4.1x3 + x2 - 5.1x + 4.1 = 0

Задачу решить двумя методами: методом деления отрезка пополам и хорд. Сравнить результаты.

Корень искать на интервале [ 3…5 ].

 

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

 

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

 

Программа должна определять корень уравнения методом деления отрезка пополам и хорд.

 

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

 

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

 

 

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

 

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

 

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

 

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

 

Программа предназначена для определения корня уравнения методом деления отрезка пополам и методом хорд.

 

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

 

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

Решение задачи начинается с ввода точности e и присвоения переменным a и b значения 3 и 5 соответственно (блок 2). После этого выполняется цикл с предусловием b-a>e(блок 3). В теле цикла с предусловием (4-7) переменной с присваивается значение (a+b)/2, а также переменной fa присваивается значение искомой функции с аргументом а (блок 4), далее переменной fc присваивается значение искомой функции с аргументом с (блок 5), после этого проверяется условие fa*fc<0 (блок 6). Если условие истинно, то переменной b присваивается значение с (блок 7). Если условие ложно, то переменной a присваивается значение с (блок 8). После этого цикл с предусловием завершается. Затем происходит вывод с (блок 9). Далее переменным a и b присваивается значение 3 и 5 соответственно (блок 10). После этого выполняется цикл с постусловием |(fb*a-fa*b)/(fb-fa)-c|<e (блок 17). В теле цикла с постусловием (блоки 11-16) происходит присвоение переменной fa значение искомой функции с аргументом а (блок 11), переменной fb значение искомой функции с аргументом b (блок 12), переменной c присваивается значение (fb*a-fa*b)/(fb-fa), а переменной fc значение искомой функции с аргументом c (блок 13). Далее проверяется условие fa*fc>0 (блок 14). Если условие истинно, то переменной a присваивается значение с (блок 15). Если условие ложно, то переменной b присваивается значение с (блок 16). После этого цикл с постусловием завершается. Затем происходит вывод с (блок 18).

 

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

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

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

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

Label1.Caption – «Введите точность»,

Label2.Caption – «Метод деления отрезков пополам»,

Label3.Caption – «метод хорд».

- поля редактирования Edit1 (для ввода точности), Edit1 (для вывода результата решения уравнения методом деления отрезков пополам), Edit1 (для вывода решения уравнения методом хорд) с вкладки Standart;

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

Обработчик TForm1.Button1Click обрабатывает щелчок по кнопке «Выполнить».

В разделе описания переменных этого обработчика описаны:

- переменные действительного типа real:

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

b– правая граница,

c – середина границы,

fa – функция с аргументом а,

fb – функция с аргументом b,

fc – функция с аргументом c,

e – точность решения.

Исполняемая часть обработчика начинается ввода значения точности e с помощью свойства объекта edit1.text и с помощью оператора присваивания, при этом используется функция перевода из строкового типа в вещественный strtofloat. Далее происходит присвоение переменным a и b значений 3 и 5 соответственно с помощью оператора присваивания. После этого с помощью оператора while выполняется цикл с предусловием while b-a>е do. В теле цикла с предусловием переменной с присваивается значение (a+b)/2 с помощью оператора присваивания. Далее переменной fa присваивается значение a*a*a*a - 4.1*a*a*a + a*a - 5.1*a + 4.1 с помощью оператора присваивания, а переменной fc присваивается значение c*c*c*c - 4.1*c*c*c + c*c - 5.1*c + 4.1 с помощью оператора присваивания. После этого с помощью условного оператора проверяется условие if fa*fc < 0 then. Если условие истинно, то переменной b присваивается значение с с помощью оператора присваивания. Если условие ложно, то переменной а присваивается значение с с помощью оператора присваивания. После этого происходит вывод значения с с помощью оператора присваивания и свойства объекта edit2.text и функции перевода из вещественного типа в строковый – floattostr. Далее выполняется цикл с постусловием с помощью оператора repeat … until abs((fb*a-fa*b)/(fb-fa)-c)<e и функции определения модуля числа abc, в теле которого переменной fa присваивается значение a*a*a*a - 4.1*a*a*a + a*a - 5.1*a + 4.1 с помощью оператора присваивания, а переменной fb присваивается значение b*b*b*b - 4.1*b*b*b + b*b - 5.1*b + 4.1 с помощью оператора присваивания. Затем переменной с присваивается значение (fb*a-fa*b)/(fb-fa) с помощью оператора присваивания, а переменной fc присваивается значение c*c*c*c - 4.1*c*c*c + c*c - 5.1*c + 4.1 с помощью оператора присваивания. После этого с помощью условного оператора проверяется условие if fa*fc>0 then. Если условие истинно, то переменной а присваивается значение с с помощью оператора присваивания. Если условие ложно, то переменной b присваивается значение с с помощью оператора присваивания. После этого цикл с постусловием завершается, после чего этого происходит вывод значения с с помощью оператора присваивания и свойства объекта edit3.text и функции перевода из вещественного типа в строковый – floattostr.

 

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

 

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

При работе программы с получены результаты, приведенные в приложении Б на рисунках Б.1, Б.2. На рисунке Б.3 приведен результат решения онлайн калькулятора.

Результат, приведенный на рисунке Б.3 совпадают с результатами на рисунке Б.1-Б.2. Таким образом, можно сделать вывод, что программа работает правильно, а также по результатам выполнения программы можно сделать вывод, что при более низких значениях точности метод деления отрезков пополам дает более точный результат, чем метод хорд. Однако, при повышении точности результаты решения уравнения имеют более точный результат у обоих методов.

 

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

 

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


 

Вывод

 

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


 

 

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

Приложение А

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


unit Unit1;

 

{$mode objfpc}{$H+}

 

interface

 

uses

Classes, SysUtils, 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

 

public

 

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.lfm}

 

{ TForm1 }

 

procedure TForm1.Button1Click(Sender: TObject);

var

a,b,c, fa, fb, fc, e:real;

begin

e:=strtofloat(edit1.text);

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

a:=3;

b:=5;

while b-a>e do begin

c:=(a+b)/2;

fa:= a*a*a*a - 4.1*a*a*a + a*a - 5.1*a + 4.1;

fc:= c*c*c*c - 4.1*c*c*c + c*c - 5.1*c + 4.1;

if (fa)*(fc) < 0

then b:=c

else a:=c;

end;

edit2.text:=floattostr(c);

 

//метод хорд

a:=3;

b:=5;

repeat

fa:= a*a*a*a - 4.1*a*a*a + a*a - 5.1*a + 4.1;

fb:= b*b*b*b - 4.1*b*b*b + b*b - 5.1*b + 4.1;

c:=(fb*a-fa*b)/(fb-fa);

fc:= c*c*c*c - 4.1*c*c*c + c*c - 5.1*c + 4.1;

if fa*fc > 0 then a:= c

else b:= c;

until abs((fb*a-fa*b)/(fb-fa)-c)<e;

edit3.text:=floattostr(c);

 

end;

 

end.

 

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

Приложение Б

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


Рисунок Б.1

 

Рисунок Б.2

 

 

Рисунок Б.3

 



Поделиться:




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

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


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