Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример оформления курсовой на 5.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
322.56 Кб
Скачать

2 Алгоритм основной программы

3 Алгоритмы функций

3.1 Алгоритм функции для построения графика исходного массива

3.2 Алгоритм функции для построения гистограммы и графика функции Лапласа

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

//Программа для статистических расчетов

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <graphics.h>

//Задание констант.

#define COL 256

#define MAX 50

//Инициализация глобальных переменных

int i,y1,y2;

//Функция инициализации графического режима

void initgr(void) //Тип и имя функции

{

int gdriver=DETECT,gmode,errorcode; /*Задание необходимых переменных*/

initgraph( &gdriver, &gmode, "D:\\"); /*Установка видеоадаптера в графический режим*/

errorcode=graphresult(); /*Возращение кода ошибки и присвоение его переменной errorcode*/

if(errorcode != grOk) //Проверка на наличие ошибки

{

printf("Ошибка :%s \n",grapherrormsg(errorcode));

printf("Для останова нажмите любую клавишу \n");

getch();

exit(1);

}

}

//Функция построения графика исходного массива

void graphmas(float V[]) //Тип и имя функции и аргумента

{

y1=3;

y2=6; //Определение изначальных координат по горизонтальной оси

setcolor(7); //Задание цвета

setviewport(20,10,630,235,1); //Создание графического окна

rectangle(1,1,610,225); //Обозначение границ окна

line(1,115,610,115);

for(i=1;i<COL;i++)

{

setcolor(5); //.

line(y1,(115-V[i-1]*0.5),y2,(115-V[i]*0.5)); //Построение графика

y1=y2;

y2+=3; //Смещение координат по горизонтальной оси

}

}

//Функция для построения гистограммы и графика функции Лапласа

void gistfun(float m[],float F[],int k)

{

y1=23;

y2=43;

setcolor(7);

setviewport(20,236,630,470,1);

rectangle(1,1,610,225);

for(i=1;i<=k;i++)

{

setfillstyle(1,5); //Задание типа и цвета заполнения

bar(y1,115,y2,(115-m[i]*50)); /*Построение гистограммы в соответствии с масштабом*/

setcolor(RED);

rectangle(y1,115,y2,(115-m[i]*50));

setcolor(GREEN);

if(i!=k)

line(y1,(115-F[i]*50),y2,(115-F[i+1]*50)); /*Построение графика функции Лапласа*/

y1=y2;

y2+=20;

}

}

void main(void) // Основная функция

{

clrscr();

//Инициализация необходимых переменных

int j;

float ojid,V[COL],sum=0,dis=0,otkl=0,VC[COL],pr,h,y1,y2,k,m[MAX],t[MAX],

F[MAX],fn[MAX],x,xn;

//Приём сигнала.

FILE *fptr; //Инициализация файловой переменной

fptr=fopen("D:\\B1B015.TXT","rt"); //Открытие файла, содержащего сигнал

if(fptr==NULL) //Проверка 

{

printf("Ошибка \n");

getch();

exit(1); //

}

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

{

fscanf(fptr,"%f",&V[i]);

sum+=V[i];

}

fclose(fptr);//Закрытие файла

/*Расчёт математического ожидания, дисперсии и среднеквадратического отклонения*/

ojid=sum/COL; //Определение математического ожидания

printf("\n");

printf("Математическое ожидание = %f \n",ojid);

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

dis+=(V[i]-ojid)*(V[i]-ojid);

dis/=COL-1; //Дисперсия

otkl=sqrt(dis); //Отклонение

printf("Дисперсия = %f \n" ,dis);

printf("Среднеквадратическое отклонение = %f \n",otkl);

// Расчёт функции Лапласа

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

VC[i]=V[i]-ojid; //Центрирование

for(i=0;i<COL;i++) //Сортировка методом выбора

for(j=i+1;j<COL;j++)

if(VC[i]>VC[j])

{

pr=VC[i];

VC[i]=VC[j];

VC[j]=pr;

}

h=(VC[255]-VC[0])/(1+3.322*log(COL)); /*Определение длины интервала по формуле Стерджеса*/

y1=VC[0]-h/2; //Начало первого интервала

y2=VC[255]+h; //Конец последнего

k=(y2-y1)/h; //Количество интервалов

k=int(k);

y2=y1+h;

for(i=1;i<=k;i++)

m[i]=0;

for(i=1;i<=k;i++) /*Частота попадания случайной величины в каждый интервал*/

{

for(j=0;j<COL;j++)

if((VC[j]>y1)&&(VC[j]<=y2))

m[i]+=VC[j];

y1=y2;

y2+=h;

}

y1=VC[0]-h/2;

x=0;

for(i=1;i<=k;i++)

{

m[i]=m[i]/COL; //Частость на данном интервале

t[i]=(y1+h/2-ojid)/dis;

y1+=h;

F[i]=exp(-t[i]*t[i]/2)/sqrt(6.28); //Функция Лапласа для текущего интервала

fn[i]=F[i]*h*COL/dis; //Теоретическая частота текущего интервала

x+=(m[i]-fn[i])*(m[i]-fn[i])/fn[i]; //Критерий Пирсона

}

xn=35.5;//Табличное значение расчётной статистики

xn*=xn;

printf("\n");

//Проверка гипотезы о нормальном распределении случайной величины

if(x<=xn)

printf("Нулевая гипотеза принимается на уровне значимости 5%.");

else printf("Гипотеза не принимается. Ищите ошибку.");

printf("\n");

getch();

//Построение графиков

initgr(); //Функция инициализации графического режима

graphmas(V); //Построение графика исходного массива

gistfun(m,F,k); //Гистограмма и функция Лапласа

getch();

closegraph(); //Закрытие графического режима

//Запись исходных данных и результатов расчётов в текстовый файл

fptr=fopen("D:\\kurs\rin.txt","w+t"); /*Создание файла для записи по указанному адресу*/

if(fptr==NULL) //Проверка

{

printf("Ошибка \n");

getch();

exit(1);

}

fprintf(fptr,"Исходные данные:\n");

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

fprintf(fptr,"%f \n",V[i]); //Запись элементов массива

fprintf(fptr,"Математическое ожидание = %f \n",ojid); /*Запись математического ожидания*/

fprintf(fptr,"Дисперсия = %f \n",dis); //Запись дисперсии

fprintf(fptr,"Среднеквадратическое отклонение = %f \n",otkl); /*Запись отклонения*/

if(x<=xn) //Запись результатов проверки гипотезы гипотезы

fprintf(fptr,"Нулевая гипотеза принимается на уровне значимости 5%.");

else fprintf(fptr,"Гипотеза не принимается. Ищите ошибку.");

fclose(fptr); //Закрытие файла.

}