Курсовая работа: Разработка программного обеспечения для решения уравнений с одной переменной методом Ньютона (касательных)
если (a = 0) то
вывод
number: =0;
иначе
выполнять
i: =1; если (a*ln(b*m) *(-a/sqr(m))) > 0 то
mass [i]: =m;
code_of: =1;
иначе
Рисунок 5.4 – Алгоритм решения уравнения вида y(x) =a×ln(b×x)
если (a*ln(b*n) *(-a/sqr(n))) > 0 то
mass [i]: =n;
code_of: =1;
иначе
вывод
number: =0; code_of: =0;
если (code_of = 1) то
выполнять
x1: =mass [i] -a*ln(b*mass [i]) /
(a/mass [i]);
root: =Abs (x1-mass [i]);
i: =i+1;
mass [i]: =x1;
пока (root < E);
если (x1 < m) или (x1 > n) то
вывод
number: =0; code_of: =0;
вывод
Рисунок 5.4 – Алгоритм решения уравнения вида y(x) =a×ln(b×x) (продолжение)
5.7.2. Алгоритм нахождения корня уравнения y(x) =a×x2+b×x+c
Алгоритм решения уравнения вида y(x) =a×x2+b×x+c приводится на рисунке 5.5.
выполнять
ввод
если (a = 0) и (b = 0) и (c = 0) то
вывод
number: =0;
иначе
выполнять
i: =1;
если (a*sqr(m) +b*m+c) *(2*a) >= 0 то
mass [i]: =m;
code_of: =1;
иначе
Рисунок 5.5 – Алгоритм решения уравнения вида y(x) =a×x2+b×x+c
если (a*sqr(n) +b*n+c) *(2*a) >= 0 то
mass [i]: =n;
code_of: =1;
иначе
вывод
number: =0; code_of: =0;
если (code_of = 1) то
выполнять
x1: =mass [i] -((a*sqr(mass [i]) +
b*mass [i] +c) /(2*a*mass [i] +b));
root: =Abs (x1-mass [i]);
i: =i+1;
mass [i]: =x1;
пока (root < E);
если (x1 < m) или (x1 > n) то
вывод
number: =0; code_of: =0;
вывод
Рисунок 5.5 – Алгоритм решения уравнения вида y(x) =a×x2+b×x+c (продолжение)
Алгоритмы решения уравнений рис.5.4 и рис.5.5 соответствуют procedure equation_1 и procedure equation_2 в программе соответственно.
6. КОМПЛЕКТАЦИЯ И ЗАГРУЗКА ПРОГРАММЫ
6.1. Комплектация
Папка my_stuff, в которой содержится:
– RUOP. exe – основной файл программы;
– help. asc – файл с методологической информацией;
– m_n. txt – файл, содержащий значения промежутков m и n;
– a_b_c. txt – файл, содержащий значения параметров a, b, c;
– E. txt – файл, содержащий значение погрешности E;
– egavga. bgi – файл для работы с графикой;
– keyrus. com – файл для работы с русским языком;
– trip. chr – файл, содержащий русский шрифт.
6.2. Порядок инсталляции и запуск программы
Требуется скопировать папку my_stuff с содержащимися в ней файлами в папку “c: \temp\”. Для запуска программы необходимо запустить файл RUOP. exe, расположенный в папке my_stuff.
При копировании программы в иную папку, невозможными становятся работа "Справки" загрузка и автоматическое сохранение информации в файлы.
7. ТЕСТОВЫЕ ПРИМЕРЫ
Тестовые примеры необходимы пользователю для того, чтобы узнать возможности, которые предоставляет данный программный продукт или протестировать его на правильность решения уравнений.
Тестовые примеры для решения уравнения вида y(x) =a*ln(b*x) приводятся в таблице 6.1.
Таблица 7.1. Тестовые примеры для уравнения вида y(x) =a*ln(b*x)
m | n | a | b | E | Результат |
1 | 10 | 1 | 0.5 | 0.01 | 2 |
-20 | -0.01 | 9 | -2 | 0.01 | -0.2 |
9 | 14 | 100 | 1 | 0.01 | Уравнение не имеет корней |
Тестовые примеры для решения уравнения вида y(x) =a*x^2+b*x+c приводятся в таблице 6.2.
Таблица 7.2. Тестовые примеры для уравнения вида y(x) =a*x^2+b*x+c
m | n | a | b | c | E | Результат |
-10 | 10 | 5 | 29 | 3 | 0.01 | -0.1054 |
-10 | 10 | 0 | 4 | 10 | 0.01 | -2.5 |
5 | 20 | 5 | 29 | 4 | 0.01 | Уравнение не имеет |
При введении в программу данных, не отвечающих требованиям типу, будет появляться сообщение "Ошибка ввода", пока не будут введены правильные данные, соответствующие требованиям программы.
Если уравнение не имеет корней, то построение графика и сохранение данных, результатов становиться невозможным.
При введении в программу данных, отвечающих требованиям, будут появляться сопроводительные сообщения (советы) по дальнейшим вариантам продолжения.
Если уравнение имеет корень, то построение графика и сохранение данных, результатов становится возможным.
ВЫВОДЫ
В процессе создания была написана программа, осуществляющая решение уравнения с одной переменной методом Ньютона (касательных). Программа способна решать два вида уравнений, а также выстраивать график по вводимым данным.
В программе реализована работа с графикой и с файлами, имеет интуитивно понятный интерфейс, реализована возможность справки.
Корректная работа программы обеспечивается строгим следованием методическим указаниям, а также надёжной системой проверки промежуточных результатов в ходе выполнения самой программы.
Однако ощутимыми недостатками являются расчёт результатов всего для двух функций и отсутствие касательных к графику при построении графика функции, устранение которых планируется в ближайшее время.
В целом получившийся программный продукт является отличным пособием для студентов высших учебных заведений и для учащихся математических классов среднеобразовательных школ.
ПЕРЕЧЕНЬ ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Фаронов В.В. "Turbo Pascal 7.0. Начальный курс": учебное пособие. – М.: Кнорус, 2006. – 576 с.
2. Сухарёв М. Turbo Pascal 7.0. Теория и практика программирования. – СПб: "Наука и техника", 2003. – 576 с.
3. Методические указания по оформлению студенческих работ для студентов специальностей 080403 "Программное обеспечение автоматизированных систем", 080404 "Интеллектуальные системы принятия решений", 050103 "Экономическая кибернетика"; Утверждено на заседании учёного совета ДонГИИИ протокол № 7 от 23.02. 2004 г. – Донецк: ДонГИИИ, 2004, 46 с.
Приложение А
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
А.1 Общие сведения
Полное название программного продукта: "Численные методы. Решение уравнений с одной переменной методом Ньютона (касательных)". Её условное обозначение РУОП. Работа выполняется студентом 1-го курса Донецкого государственного института искусственного интеллекта (ДонГИИИ), факультета СКИТ, группы СУА-05, Николаевым Алексеем Сергеевичем.
Основанием для разработки РУОП является задание, выданное кафедрой Программного обеспечения интеллектуальных систем (ПОИС).
Плановый срок начала работы: 17 февраля 2006 года.
Дата защиты работы: 22 мая 2006 года.
А.2 Назначения и цели создания программы
Данная программа создана как учебное пособие для студентов высших учебных заведений и для учащихся математических классов среднеобразовательных школ. Позволяет решать уравнения вида y(x) =a×ln(b×x) и y(x) =ax2+bx+c методом Ньютона (касательных).
А.3 Требования к программному продукту
А.3.1. Общие требования
Программа должна выполнять следующие требования:
1) решать два вида уравнений: y(x) =a×ln(b×x) и y(x) =ax2+bx+c методом Ньютона (касательных);
2) поддержку графического меню, состоящего из пяти пунктов:
– помощь и справочная информация;
– y(x) =a×ln(b×x);
– y(x) =a×x^2+b×x+c;
– построение графика;
– выход;
3) по вводимым значениям промежутков уравнения и по вводимым значениям коэффициентов уравнения:
– вычислять корень уравнения в зависимости от вводимых данных;
– выстраивать график уравнения, отмечая, на оси абсцисс, промежуточные корни уравнения, выводить значение корня уравнения.
А.3.2. Функциональные требования
Для реализации программного продукта необходимо разработать:
1) поддержку файлов, предоставление возможности решать пользователю самому, вводить начальные данные из файла или с клавиатуры, необходимость сохранения данных и полученных результатов в файлы;
2) систему справочной информации по реализуемому в РУОП методу Ньютона.
А.3.2. Требования к техническому обеспечению
Рекомендуемые характеристики аппаратных средств:
– КПУ: i486;
– ОЗУ: 4 мб;
– видеоадаптер VGA, EGA;
– монитор: VGA, EGA;
– клавиатура;
– свободное дисковое пространство – около 100 килобайт.
А.3.3. Требования к программному обеспечению
Для успешной загрузки программы требуется наличие операционной системы MS DOS 6.0.
А.3.5. Требования к организационному обеспечению
Организационное обеспечение включает в себя пояснительную записку с приложениями: техническое задание, руководство пользователя, экранные формы, тексты программы.
Приложение Б
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Главное меню появляется после титульного листа. Меню состоит из пяти пунктов. Скроллинг осуществляется клавишами "z" и "x". Вход в подменю осуществляется клавишей "Enter".
В пункте "Справка" содержится методологическая информация по методу Ньютона.
В пункте "y(x) =a*ln(b*x)" осуществляется решение уравнения y(x) =a*ln(b*x) по вводимым параметрам, промежуткам и погрешности. В пункте осуществляется загрузка данных из файлов и сохранение данных в файлы по желанию пользователя.
В пункте "y(x) =a*x^2+b*x+c" осуществляется решение уравнения y(x) =a*x^2+b*x+c по вводимым параметрам, промежуткам и погрешности. В пункте осуществляется загрузка данных из файлов и сохранение данных в файлы по желанию пользователя.
В пункте "Построение графика" осуществляется построение графика по вводимым в уравнение данным.
В пункте "Выход" осуществляет выход из программы.
Приложение В
ЭКРАННЫЕ ФОРМЫ
Рисунок В.1 – Заставка, титульная страница
Рисунок В.2 – Меню
Рисунок В.3 – Общий вид окна "y(x) =a*ln(b*x)"
Рисунок В.4 – Общий вид окна "y(x) =a*x^2+b*x+c"
Рисунок В.5 – График функции y(x) =1*ln(0.5*x) на промежутке [1; 10]
Рисунок В.6 – График функции y(x) =5*sqr(x) +29*x+3 на промежутке [-10; 10]
Приложение Г
ЛИСТИНГ ПРОГРАММЫ
program Restorant;
uses CRT, Graph;
var a, b, c, m, n: real;
number, i: byte;
mass: array [1. . 20] of real;
{***************************************************************************}
procedure title;
begin
textcolor(2);
writeln (' Министерство образования Украины');
writeln (' Донецкий государственный институт искусственного интеллекта');
writeln;
writeln (' Кафедра ПОИС');
writeln;
writeln;
writeln (' Курсовая работа');
writeln (' По курсу "АЯ и П"');
writeln (' На тему: "Решение нелинейных уравнений методом Ньютона');
writeln (' (методом секущих)" ');
writeln;
writeln;
writeln (' Выполнил: ');
writeln (' Студент группы СУА-05');
writeln (' Николаев А.С. ');
writeln (' Проверил: ');
writeln (' cт. преп. кафедры ПОИС');
writeln (' Бычкова Е.В. ');
writeln (' асс. кафедры ПОИС');
writeln (' Волченко E. B. ');
writeln;
writeln (' 2005');
writeln;
writeln;
textcolor (red);
writeln ('Нажмите "Ввод" для продолжения"');
textcolor (lightgray); Readln;
end;
{***************************************************************************}
procedure pro; FORWARD;
{***************************************************************************}
procedure graphica;
var d, r, e: integer;
begin
d: =detect;
InitGraph (d, r, '');
e: =GraphResult;
if e <> grOK then WriteLn (GraphErrorMsg (e)) else pro;
end;
{***************************************************************************}
procedure setka (yn: integer; y2: real);
var x, y, cross, dcross: integer;
lx, ly, dlx, dly: real;
st: string;
begin
If abs (m) < abs (n) then
dlx: =Abs (n/6.25) else dlx: =Abs (m/6.25);
dly: =y2/((yn-110) /40);
dcross: =0;
lx: =6*dlx;
SetColor (LightGray);
For cross: = 1 to 7 do
begin
Str (lx: 0: 1, st);
If lx >=0 then
OutTextXY (535-dcross, yn+7, st) else
OutTextXY (525-dcross, yn+7, st);
lx: =lx-2*dlx;
dcross: =dcross+80;
end;
x: =80;
Repeat
SetLineStyle (DottedLn, 0, NormWidth);
Line (x, yn-3, x, 110); Line (x, yn+3, x, 360);
SetLineStyle (SolidLn, 0, NormWidth);
Line (x, yn-3, x, yn+3);
x: =x+40;
Until x = 600;
ly: =0;
y: =yn;
Repeat
If ly > 0 then
begin
Line (317, y, 323, y);
Str (ly: 0: 1, st);
OutTextXY (295, y+7, st);
end;
ly: =ly+dly;
SetLineStyle (DottedLn, 0, NormWidth);
Line (323, y, 570, y); Line (70, y, 317, y);
SetLineStyle (SolidLn, 0, NormWidth);
y: =y-40;
Until (y < 110);
ly: =0;
y: =yn;
Repeat
If ly < 0 then
begin
Line (317, y, 323, y);
Str (ly: 0: 1, st);
OutTextXY (285, y+7, st);
end;
ly: =ly-dly;
SetLineStyle (DottedLn, 0, NormWidth);
Line (323, y, 570, y); Line (70, y, 317, y);
SetLineStyle (SolidLn, 0, NormWidth);
y: =y+40;
Until (y > 360);
end;
{***************************************************************************}
{***************************************************************************}
procedure groffunc;
var l, y0: integer;
y1, y2, x, y, mx, my: real;
gr, grand: string;
{***************************************************************************}
function f (x: real): real;
begin
Case number of
1: f: =a*ln(b*x);
2: f: =a*sqr(x) +b*x+c;
end;
end;
{***************************************************************************}