Содержание
Введение4
1. Теоретические основы5
1.1. Сложные типы данных5
1.2. Массивы5
1.3. Функции5
1.4. Указатели7
1.5. Операторы8
2. Описание программы10
2.1. Описание данных10
2.1.1. Использованные переменные 10
2.1.2. Описание функций11
2.2. Схемы алгоритмов12
3. Руководство пользователю19
Заключение20
Литература21
Приложение 1. Листинг программы22
Приложение 2. Распечатка результатов программы26
Выдержка из текста работы
В те далекие времена, когда мудрецы впервые стали задумываться о равенствах содержащих неизвестные величины, наверное, еще не было ни монет, ни кошельков. Но зато были кучи, а также горшки, корзины, которые прекрасно подходили на роль тайников-хранилищ, вмещающих неизвестное количество предметов. «Ищется куча, которая вместе с двумя третями ее, половиной и одной седьмой составляет 37…», — поучал во II тысячелетии до новой эры египетский писец Ахмес. В древних математических задачах Междуречья, Индии, Китая, Греции неизвестные величины выражали число павлинов в саду, количество быков в стаде, совокупность вещей, учитываемых при разделе имущества. Хорошо обученные науке счета писцы, чиновники и посвященные в тайные знания жрецы довольно успешно справлялись с такими задачами. Дошедшие до нас источники свидетельствуют, что древние ученые владели какими-то общими приемами решения задач с неизвестными величинами. Однако ни в одном папирусе, ни в одной глиняной табличке не дано описания этих приемов. Авторы лишь изредка снабжали свои числовые выкладки скупыми комментариями типа: «Смотри!», «Делай так!», «Ты правильно нашел». В этом смысле исключением является «Арифметика» греческого математика Диофанта Александрийского (III в.) – собрание задач на составление уравнений с систематическим изложением их решений. Однако первым руководством по решению задач, получившим широкую известность, стал труд багдадского ученого IX в. Мухаммеда бен Мусы аль-Хорезми. Слово «аль-джебр» из арабского названия этого трактата – «Китаб аль-джебер валь-мукабала» («Книга о восстановлении и противопоставлении») – со временем превратилось в хорошо знакомое всем слово «алгебра», а само сочинение аль-Хорезми послужило отправной точкой в становлении науки о решении уравнений. Алгебраическое уравнение четвертой степени.
/>,
где a, b, c – некоторые действительные числа, называется биквадратным уравнением. Заменой /> уравнение сводится к квадратному уравнению /> с последующим решением двух двучленных уравнений /> и /> (/> и /> — корни соответствующего квадратного уравнения).
Если /> и />, то биквадратное уравнение имеет четыре действительных корня:
/>,
/>.
Если />, /> то биквадратное уравнение имеет два действительных корня /> и мнимых сопряженных корня:
/>.
Если /> и />, то биквадратное уравнение имеет четыре чисто мнимых попарно сопряженных корня:
Случай />, /> аналогичен разобранному.
/>,
/>
Целью данной курсовой работы является разработка программного обеспечения для нахождения корней биквадратного уравнения.
1. Постановка задачи
Биквадратным называется уравнение вида ax4+bx2+c=0, где a 0. Биквадратное уравнение решается методом введения новой переменной: положив x2 = y, придем к квадратному уравнению ay2+by+c=0.
Требуется разработать программное обеспечение для нахождения корней биквадратного уравнения.
Пример 1.
Решить уравнение
x4+4×2-21=0.
Решение:
Положив x2 = y, получим квадратное уравнение y2+4y -21=0, откуда находим y1= -7, y2=3.
Теперь задача сводится к решению уравнений x2= -7, x2=3. Первое уравнение не имеет действительных корней, из второго находим
/>,
которые являются корнями заданного биквадратного уравнения..
Ответ: />.
Пример 2.
Решить биквадратное уравнение.
2х4– 5х2+2=0
Решение:
Обозначим х2=t. Тогда х4=(х2)2=t2и уравнение примет вид:
2t2–5t+2=0
D=(–5)2 – 4(2)(2)=25 – 16 = 9 > 0,
t1=(5+3) / 4=2 и t2=(5 – 3) / 4=1 / 2.
Так как t=x2, то корни исходного уравнения найдем в результате решения уравнений
х1=2 и х2=1/2.
Имеем />
Ответ:/>
2. Математические и алгоритмические основы решения задачи
Рассмотрим биквадратное уравнение
ax4+ bx2+ c = 0.
Введем подстановку
y = x2.
Получим квадратное уравнение общего вида
ay2+ by + c = 0.
Таким образом, для решения биквадратного уравнения необходимо помнить, что оно свелось к системе двух уравнений второй степени:
y = x2
ay2+ by + c = 0.
Решим квадратное уравнение относительно переменной «y». Получим три возможных варианта решений:
дискриминант отрицателен: уравнение не имеет действительных решений;
дискриминант не отрицателен и равен нулю: уравнение имеет один двукратный корень;
дискриминант не отрицателен и равен нулю: уравнение имеет два различных корня.
В первом случае, когда дискриминант квадратного уравнения отрицателен, система не имеет решения, так как одно из входящих в нее уравнений, а именно квадратное уравнение ay2+ by + c = 0, не имеет решения.
Последние два случая соответствуют неотрицательному дискриминанту квадратного уравнения. Квадратное уравнение имеет действительные решения. Однако, обратите внимание на тот факт, что первое уравнение системы ax2= y имеет смысл только при значениях y>=0. Поэтому, если оба корня квадратного уравнения ay2+by +c = 0 отрицательны, система уравнений так же не имеет решения. Кроме того, если хотя бы один из корней квадратного уравнения ay2+by +c = 0 отрицательный, система уравнений будет иметь только два действительных решения.
И только в том случае, когда оба корня квадратного уравнения неотрицательны, система уравнений имеет четыре действительных решения. Дадим теперь словесное описание алгоритма.
Словесное описание алгоритма решения задачи:
Ввести a, b, c.
Присвоить d = b2— 4ac
Если d<0 перейти к 15
Присвоитьy1 = (-b — SQRT(d)) / (2*a)
Присвоитьy2 = (-b + SQRT(d)) / (2*a)
Если y1<0 и y2< 0 перейти к 15
Если y1<0 и y2>=0 перейти к 9
Если y1>=0 и y2<0 перейти к 13
Присвоить x1 = SQRT(y2)
Присвоить x2 = -x1
Выдать «x1=»;x1, «x2=»;x2
Перейти к 16
Присвоить y2 = y1
Перейти к 9
Выдать «Действительных решений нет»
Закончить
3. Программная реализация решения задачи
Файл UBikvur.h
//—————————————————————————
#ifndef UBikvurH
#define UBikvurH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include «HandTuning.h»
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//—————————————————————————
class TfrmBikvur: public TForm
{__published: // IDE-managed Components
THandTuning *htA;
THandTuning *htB;
THandTuning *htC;
TButton *btnCalc;
TListBox *lbxX;
TLabel *Label1;
TLabel *Label2;
TButton *btnExit;
TButton *btnClear;
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
void __fastcall btnCalcClick(TObject *Sender);
void __fastcall btnExitClick(TObject *Sender);
void __fastcall btnClearClick(TObject *Sender);
private: // User declarations
list<double> __fastcall Bikvur(double a, double b, double c);
public: // User declarations
__fastcall TfrmBikvur(TComponent* Owner);};
//—————————————————————————
extern PACKAGE TfrmBikvur *frmBikvur;
//—————————————————————————
#endif
ФайлUBikvur.cpp
//—————————————————————————
#include <vcl.h>
#include <math.h>
#include <list.h>
#pragma hdrstop
#include «UBikvur.h»
//—————————————————————————
#pragma package(smart_init)
#pragma link «HandTuning»
#pragma resource "*.dfm"
TfrmBikvur *frmBikvur;
//—————————————————————————
list<double> __fastcall TfrmBikvur::Bikvur(double a, double b, double c)
{double y1, y2;
list<double> x;
//вычислене d дискриминанта
double d = b * b — 4 * a * c;
//корни существуют, если d >= 0
if(d >= 0)
{y1 = (-b — sqrt(d)) / 2 * a;
y2 = (-b + sqrt(d)) / 2 * a;}
if(d < 0 || (y1 < 0 && y2 < 0))
{Application->MessageBoxA(L«Действительных корней нет», L«Информация», MB_OK + MB_ICONINFORMATION);
return x;}
//вычисление корней биквадратного уравнения
else
{if(y1 >= 0 && y2 >= 0)
{x.push_back(sqrt(y1));
x.push_back(-sqrt(y1));
x.push_back(sqrt(y2));
продолжение
—PAGE_BREAK—
x.push_back(-sqrt(y2));}
else
{if(y1 < 0 && y2 >= 0)
{x.push_back(sqrt(y2));
x.push_back(-sqrt(y2));}
else
{x.push_back(sqrt(y1));
x.push_back(-sqrt(y1));}}}
return x;}
//—————————————————————————
__fastcall TfrmBikvur::TfrmBikvur(TComponent* Owner)
: TForm(Owner)
//—————————————————————————
void __fastcall TfrmBikvur::btnCalcClick(TObject *Sender)
{lbxX->Clear();
list<double> res = Bikvur(htA->Value, htB->Value, htC->Value);
int i = 1;
while(!res.empty())
{lbxX->Items->Add(«x» + IntToStr(i) + " = " + FormatFloat(«0.000», res.front()));
res.pop_front();
i++;}}
//—————————————————————————
void __fastcall TfrmBikvur::btnExitClick(TObject *Sender)
{this->Close();}
//—————————————————————————
void __fastcall TfrmBikvur::btnClearClick(TObject *Sender)
{htA->Value = 0;
htB->Value = 0;
htC->Value = 0;
lbxX->Clear();}
//—————————————————————————
4. Пример выполнения программы
Пример 1.
/>
Рисунок 1 – Решение биквадратного уравнения />
Пример 2.
/>
Рисунок 2 – Решение биквадратного уравнения />
Пример 3.
/>
Рисунок 3 – Решение биквадратного уравнения />
Пример 4.
/>
Рисунок 4 – Решение биквадратного уравнения />
Пример 5.
/>
Рисунок 5– Решение биквадратного уравнения />
Пример 6.
/>
Рисунок 6 – Очистка из пункта меню
Пример 7.
/>
Рисунок 7 – Выход из программы
Заключение
В рамках данной курсовой работы была поставлена задача: построить алгоритм и реализовать программный продукт для нахождения корней биквадратного уравнения.
В результате проектирования был составлен принципиальный алгоритм для решения поставленной задачи. Далее он был детализован и реализован на ЭВМ. В конце, был проведён анализ полученных результатов, и сделаны необходимые выводы.
Программный продукт был реализован в среде визуального программирования CodeGear RadStudio 2009 под ОС типа Windows для IBM PC-совместимых компьютеров.
Созданный программный продукт позволяет решить поставленную задачу. Также можно указать о том, что программа имеет интуитивно понятный интерфейс, что дополнительно помогает пользователю с наибольшей результативностью использовать программу.
В заключение после анализа полученных результатов были сделаны выводы, согласно которым алгоритм работает и применим для поставленной задачи.
Список использованных источников и литературы
Архангельский, А.Я. Программирование в С++ Builder 6. [Текст] / А.Я.Архангельский. – М.: Бином, 2003. С. 1154.
Ахо, А… Построение и анализ вычислительных алгоритмов [Электронный ресурс] / А. Ахо, Дж. Хопкрофт, Дж… Ульман. – М.: Мир. 1999. С. 143.
Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. – М.: Наука, 2007. – 708 с.
Кремер, Н.Ш. Высшая математика для экономистов: учебник для студентов вузов. [Текст] / Н.Ш.Кремер, 3-е издание – М.: ЮНИТИ-ДАНА, 2006. C. 412.
Калиткин, Н.Н. Численные методы. [Электронный ресурс] / Н.Н. Калиткин. – М.: Питер, 2001. С. 504.
Биквадратные уравнения [Электронный ресурс] – Режим доступа: http://fio.ifmo.ru/archive/group34/c4wu2/pege3-2.htm
Павловская, Т.А. Программирование на языке высокого уровня. [Текст] / Т.А. Павловская. – М.: Питер, 2003. С. 461.
Семакин, И.Г. Основы программирования. [Текст] / И.Г.Семакин, А.П.Шестаков. – М.: Мир, 2006. C. 346.