Зміст
Введення
1 Постановка завдання
2 Математичні та алгоритмічні основи рішення задачі
3 Програмна реалізація рішення задачі
4 Приклад виконання програми
Висновок
Список використаних джерел та літератури
Введення
У ті далекі часи, коли мудреці вперше стали замислюватися про равенствах містять невідомі величини, напевно, ще не було ні монет, ні гаманців. Але зате були купи, а також горщики, кошики, які чудово підходили на роль схованок-сховищ, що вміщають невідома кількість предметів. "Шукається купа, яка разом з двома третинами її, половиною і однієї сьомої становить 37 ...", - повчав в II тисячолітті до нової ери єгипетський переписувач Рінда. У древніх математичних задачах Межиріччя, Індії, Китаю, Греції невідомі величини виражали число павичів в саду, кількість биків у стаді, сукупність речей, що враховуються при розподілі майна. Добре навчені науці рахунку писарі, чиновники і посвячені в таємні знання жерці досить успішно справлялися з такими завданнями. Дійшли до нас джерела свідчать, що стародавні вчені володіли якимись загальними прийомами розв'язання задач з невідомими величинами. Проте ні в одному папірусі, ні в одній глиняній табличці не дано опису цих прийомів. Автори лише зрідка постачали свої числові викладки скупими коментарями на кшталт: "Дивись!", "Роби так!", "Ти правильно знайшов". У цьому сенсі винятком є "Арифметика" грецького математика Діофанта Олександрійського (III ст.) - Збори завдань на складання рівнянь із систематичним викладом їх рішень. Однак першим керівництвом щодо вирішення завдань, котрі здобули широку популярність, стала праця багдадського вченого IX ст. Мухаммеда бен Муси аль-Хорезмі. Слово "аль-джебр" з арабської назви цього трактату - "Кітаб аль-джебер валь-мукабала" ("Книга про відновлення і протиставленні") - з часом перетворилося на добре знайоме всім слово "алгебра", а сам твір аль-Хорезмі послужило відправною точкою в становленні науки про рішення рівнянь. Алгебраїчне рівняння четвертого ступеня.
,
де a, b, c - деякі дійсні числа, називається біквадратні рівнянням. Заміною рівняння зводиться до квадратного рівняння з наступним рішенням двох двочленних рівнянь і ( і - Коріння відповідного квадратного рівняння).
Якщо і , То біквадратні рівняння має чотири різних корені:
,
.
Якщо , то біквадратні рівняння має два різних корені і уявних сполучених кореня:
.
Якщо і , То біквадратні рівняння має чотири чисто уявних попарно сполучених кореня:
Випадок , аналогічний розібраною.
,
Метою даної курсової роботи є розробка програмного забезпечення для пошуку коренів біквадратні рівняння.
1. Постановка завдання
Біквадратні називається рівняння виду ax 4 + bx 2 + c = 0, де a 0. Біквадратні рівняння вирішується методом введення нової змінної: поклавши x 2 = y, прийдемо до квадратного рівняння ay 2 + by + c = 0.
Потрібно розробити програмне забезпечення для пошуку коренів біквадратні рівняння.
Приклад 1.
Розв'язати рівняння
x 4 +4 x 2 -21 = 0.
Рішення:
Поклавши x 2 = y, одержимо квадратне рівняння y 2 +4 y -21 = 0, звідки знаходимо y 1 = -7, y 2 = 3.
Тепер завдання зводиться до рішення рівнянь x 2 = -7, x 2 = 3. Перше рівняння не має дійсних коренів, з другого знаходимо
,
які є корінням заданого біквадратні рівняння..
Відповідь: .
Приклад 2.
Вирішити біквадратні рівняння.
2х 4 - 5х 2 +2 = 0
Рішення:
Позначимо х 2 = t. Тоді х 4 = (х 2) 2 = t 2 і рівняння прийме вигляд:
2t 2-5t +2 = 0
D = (-5) 2 - 4 (2) (2) = 25 - 16 = 9> 0,
t 1 = (5 +3) / 4 = 2 і t 2 = (5 - 3) / 4 = 1 / 2.
Так як t = x 2, то коріння вихідного рівняння знайдемо в результаті рішення рівнянь
х 1 = 2 і х 2 = 1 / 2.
Маємо
Відповідь:
2. Математичні та алгоритмічні основи рішення задачі
Розглянемо біквадратні рівняння
ax 4 + bx 2 + c = 0.
Введемо підстановку
y = x 2.
Отримаємо квадратне рівняння загального вигляду
ay 2 + by + c = 0.
Таким чином, для вирішення біквадратні рівняння необхідно пам'ятати, що воно звелося до системи двох рівнянь другого ступеня:
y = x 2
ay 2 + by + c = 0.
Вирішимо квадратне рівняння відносно змінної "y". Отримаємо три можливі варіанти рішень:
дискримінант від'ємний: рівняння не має дійсних рішень;
дискримінант НЕ негативний і дорівнює нулю: рівняння має один дворазовий корінь;
дискримінант НЕ негативний і дорівнює нулю: рівняння має два різних кореня.
У першому випадку, коли дискримінант квадратного рівняння від'ємний, система не має рішення, тому що одне з вхідних в неї рівнянь, а саме квадратне рівняння ay 2 + by + c = 0, не має рішення.
Останні два випадки відповідають невід'ємне дискримінант квадратного рівняння. Квадратне рівняння має дійсні рішення. Однак, зверніть увагу на той факт, що перше рівняння системи ax 2 = y має сенс тільки при значеннях y> = 0. Тому, якщо обидва кореня квадратного рівняння ay 2 + by + c = 0 негативні, система рівнянь так само не має рішення. Крім того, якщо хоча б один з коренів квадратного рівняння ay 2 + by + c = 0 негативний, система рівнянь буде мати тільки два дійсних рішення.
І тільки в тому випадку, коли обидва кореня квадратного рівняння ненегативні, система рівнянь має чотири дійсних рішення. Дамо тепер словесний опис алгоритму.
Словесний опис алгоритму розв'язання задачі:
Ввести a, b, c.
Присвоїти d = b 2 - 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));
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 / group 34 / c 4 wu 2 / pege 3-2. Htm
Павловська, Т.А. Програмування на мові високого рівня. [Текст] / Т.А. Павловська. - М.: Питер, 2003. С. 461.
Семакін, І.Г. Основи програмування. [Текст] / І. Г. Семакін, А. П. Шестаков. - М.: Світ, 2006. C. 346.