Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример оформления курсовой работы (метод дихотомии).doc
Скачиваний:
26
Добавлен:
20.06.2014
Размер:
260.61 Кб
Скачать

3.4. Входные и выходные данные.

3.4.1. Входные данные.

Входными данными, задающимися пользователем являются:

- коэффициенты при степенях x;

- коэффициент при свободном члене уравнения;

- значение точности производимых вычислений;

- значение диапазона: начальное и конечное положение координат отрезка поиска.

3.4.2. Выходные данные.

Выходными данными являются:

- точка минимума функции;

- значение функции в этой точке;

3.5. Сообщения

Сообщения, возникают на экране во время выполнения данной программы в случае четырех возможных ошибок:

1.Пользователь ввел значение степени, не входящее в заданный интервал [2;5]

2. При неправильном указании интервала.

3.Погрешность вычисления отрицательна.

4. Значение погрешности нулевое.

4.ОПИСАНИЕ КОНТРОЛЬНОГО ПРИМЕРА

4.1 Назначение программы

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

4.2. Целью проведения испытаний

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

4.3 Требования, подлежащие проверке

- Правильность нахождения точки минимума;

- Правильность нахождения значения функции в точке;

- Верность выдаваемых сообщений об ошибке или предупредительных сообщений при наличии данных, некорректно введенных пользователем.

4.4. Технические программные средства, используемые при вводе

Технические средства: компьютер типа IBM PC, мышь и клавиатура.

Программные средства: операционная система Microsoft Windows XP Professional и тестируемая программа.

4.5. Порядок проведения тестирования

- Вести значения, соответствующие проверяемым требованиям;

- Отследить результаты работы программы;

- Сравнить полученные значения с ожидаемыми результатами.

4.6. Используемые методы тестирования

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

1) Зададим коэффициенты многочлена:

1 0 56 8 95 63

2) Введем интервал поиска:

-5 2

3) Введем точность вычислений:

0,01

4) Рассчитаем:

4.6.2. Проверка поведения программы при заведомо неправильных входных данных

Ошибки

1.Пользователь ввел значение степени, не входящее в заданный интервал [2;5]

2. При неправильном указании интервала.

3.Погрешность вычисления отрицательна.

4. Значение погрешности нулевое.

  1. Текст программы

#include <math.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#define gxy gotoxy

#define cpr cprintf

#define rpr rprintf

#define tc textcolor

int x[]={10,10,10}, y[]={7,8,9};

FILE *hlp;

void rprintf(char str[]) {

char buffer[200];

CharToOem(str,buffer);

cpr("%s",buffer); }

void draw_window(char *caption, int xl, int xr, int yu, int yd, int cf, int cb) {

register short int x, y;

tc(cf);

gxy(xl,yu); putch(218);

gxy(xl,yd); putch(192);

gxy(xr,yu); putch(191);

gxy(xr,yd); putch(217);

for(x=xl+1;x<xr;x++) {

gxy(x,yu); putch(196);

gxy(x,yd); putch(196); }

for(y=yu+1;y<yd;y++) {

gxy(xl,y); putch(179);

gxy(xr,y); putch(179);

for(x=xl+1;x<xr;x++) {

gxy(x,y);putch(32); } }

gxy(xl+floor((xr-xl-strlen(caption))/2),yu); cpr("%s",caption);

}

int selection(int *x, int *y, int cnt) {

int cur=1, i, c;

int pressed_key;

const int enter_key=13, up_arrow=72,down_arrow=80,esc_key=27;

do {

for(i=0;i<cnt;i++)

{

gxy(x[i],y[i]);

if(i+1==cur)c=14; else c=0;

tc(c); putch(16);

}

pressed_key=getch();

switch(pressed_key) {

case up_arrow: cur=(cur==1)?cnt:cur-1;break;

case down_arrow: cur=(cur==cnt)?1:cur+1;break;

case esc_key: exit(0);

case enter_key: return cur;

default: break; }

}while(pressed_key!=up_arrow||pressed_key!=down_arrow);

}

float F(float v, int n, float*k)

{

int i;

float tmp=0;

for(i=n;i>=0;i--)

{

tmp+=k[i]*pow(v,i);

}

return tmp;

}

int main(void) {

int choice,i,j;

int n,xc,yc;

float *k,a,b,p,l,r,fl,fr,fx,xp,root;

char s[50];

for(;;){

clrscr();

gxy(7,6);rpr("______________________КУРСОВАЯ РАБОТА_____________________");

gxy(7,5);rpr("__________________________________________________________");

gxy(7,6); rpr(""); tc(2);

gxy(7,7); rpr(" Ввести данные и начать работу...");

gxy(7,8); rpr(" Инфо о сие замечательном творении...");

gxy(7,9); rpr(" Выход...");

gxy(7,10); rpr(""); tc(7);

gxy(7,11); rpr("______________________КЛАВИШИ:_________________________");

gxy(7,12); rpr(" ВНИЗ, ВВЕРХ - Выбор");

gxy(7,13); rpr(" ESC - выйти; ENTER - подтвердить");

gxy(7,14); rpr("_______________________________________________________");

tc(3);

gxy(7,15); rpr("___________________ТОКАРЧУК Н.А.______________________");

choice=selection(x,y,3);

switch(choice) {

case 1: clrscr();tc(14);

rpr("____________________Вводд данных:___________________\n\r"); do {

tc(7);rpr("Введите степень многочлена из интервала [2; 5]-> ");

scanf("%d",&n);

if(n<2 || n>5)

{

tc(4);rpr("НЕПРаВИЛЬНОЕ ЗНАЧЕНИЕ!\n\r");tc(7);

}

}while(n<2 || n>5);

k=new float[n+1];

rpr("Введите коэффициенты многочлена при степенях, начиная со старшего:\n\r");

for(i=0;i<=n;i++)scanf("%f",&k[n-i]);

tc(2);rpr("ПОЛУЧЕННЫЙ МНОГОЧЛЕН:\n\r");tc(10);

for(i=n;i>=0;i--)

{

if(k[i]<0 || i==n)cpr("%f(X^%d)",k[i],i);

else if(i!=n)cpr("+%f(X^%d)",k[i],i);

}

putch(8);putch(8);putch(8);putch(8);putch(8);

cpr(" = 0 \n\r\n\r");tc(7);

do {

rpr("Введите интервал [a; b], содержащий корень

уравнения:\n\r");

rpr("Примечание: Функция y=f(x) должна иметь на указанном

интервале только 1 корень,\n\r");

rpr("быть монотонной и не иметь точек перегиба.\n\r");

scanf("%f %f", &a,&b);

if(a==b || a>b)

{

tc(4);rpr("НЕПРАВИЛЬНОЕ УКАЗАНИЕ ИНТЕРВАЛА!\n\r");tc(7);

}

}while(a==b || a>b);

do {

rpr("Введите точность вычисления корня уравнения:");

scanf("%f", &p);

if(p>0.1 || p<0.0000001)

{

tc(4);rpr("НЕПРАВИЛЬНОЕ УКАЗАНИЕ ПОГРЕШНОСТИ!\n\r");tc(7);

}

}while(p>0.1 || p<0.0000001);

if(F(a,n,k)*F(b,n,k)>0)

{

tc(14);rpr("Уравнение не имеет корней либо имеет более 1 корня

на указанном интервале!\n\r");

tc(7);rpr("Нажмите любую клавишу..."); getch();

break;

}

l=a;r=b;

fl=F(l,n,k);

fr=F(r,n,k);

do {

xp=(l+r)/2;

fx=F(xp,n,k);

if(fx==0)

{

root=fx; break;

}

if(fx*fl<0)

{

r=xp; fr=fx;

}

else

{

l=xp; fl=fx;

}

if(r-l-p<0)root=(r+l)/2;

}while(r-l-p>=0);

tc(13);rpr("Корень уравнения X = ");

cpr("%f\n\r",root);

tc(7);rpr("Нажмите любую клавишу...");

getch();

delete [] k;

break;

case 2: draw_window(" HELP ", 1, 80, 1, 23, 10, 0);

if((hlp=fopen("c:\\hlp.txt","rt"))==NULL)

{

gxy(10,8);tc(4);rpr("Файл не найден!\n\r");

gxy(10,9);tc(7);rpr("Нажмите любую клавишу...");

getch(); break;

}

xc=2,yc=2;

tc(11);

while(!feof(hlp))

{

s[0]='\0';

fscanf(hlp,"%s",&s);

strcat(s," ");

if(xc+strlen(s)>79){xc=2;yc++;}

gxy(xc,yc); rpr(s);

xc+=strlen(s);

}

rpr("\n\r\n\r"); tc(15);

putch(179);rpr("Нажмите любую клавишу...");

getch(); break;

case 3: exit(0);

default:break; }

}

}

ЗАКЛЮЧЕНИЕ

Результатом выполнения курсовой работы является программа, позволяющая находить минимум унимодальной функции, записанной в виде полинома 5-ой степени, на заданном интервале методом деления отрезка пополам (методом дихотомии).

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

Автор стремился сделать программу дружественной к пользователю. Окна не насыщены графикой и ненужными элементами.

Также были написаны некоторые документы, соответствующие заданию кафедры, прилагающиеся к программному обеспечению в соответствии с ЕСПД и СТД АСУ.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Глушаков С. В. Программирование в среде Borland C++ Builder 6.0 /

С. В. Глушаков, К. Н. Зорянский, С. Н. Хомяков.-М: Фолио,2003.-508с.

2. Архангельский А.Я. Программирование в C++Builder 6./ А.Я. Архангельский. – М.: Бином – Пресс, 2003. – 1152с.

28