#ifndef __BACEDATA__
#define __BACEDATA__
/*baseDataFun.h*/
#include "baseDataFun.h"
#include <stdlib.h>
#include <stdio.h>
#ifndef bool
#define bool unsigned char
#endif
#ifndef true
#define true 1
#endif
#ifndef false
#define false 0
#endif
typedef struct
{
double * data;
unsigned int size;
}data;
bool initData(data * Data, const unsigned int Size)
{
unsigned int ii = 0;
Data->data = malloc(Size*sizeof(double));
Data->size = Size;
if (Data->data)
{
for (; ii < Size; ++ii)
{
(Data->data)[ii] = 0;
}
}
return (Data->data!=0);
}
bool deleteData(data * Data)
{
if (Data->data)
{
free(Data->data);
Data->data = 0;
Data->size = 0;
return true;
}
return false;
}
unsigned int getSize(data * Data)
{
return(Data->size);
}
bool setData(data * Data,const unsigned int n,const double num)
{
if (n<getSize(Data))
{
if (Data->data)
{
(Data->data)[n] = num;
}
return true;
}
return false;
}
double getData(data * Data, const unsigned int n)
{
double temp = 0;
if (n < getSize(Data))
{
return((Data->data)[n]);
}
return 1.0/temp;
}
double average(data * Data)
{
double sumtemp = 0;
unsigned int ii = 0;
unsigned int size = 0;
if (getSize(Data))
{
size = getSize(Data);
for (; ii<size; ++ii)
{
sumtemp += getData(Data,ii);
}
return sumtemp / (double)getSize(Data);
}
return 1.0 / sumtemp;
}
double averageRange(data * Data)
{
double subtemp=0;
double sumtemp = 0;
unsigned int ii = 0;
unsigned int size = 0;
if (getSize(Data)>1)
{
size = getSize(Data);
for (; ii < size-1; ++ii)
{
subtemp = getData(Data, ii) - getData(Data, ii + 1);
sumtemp += subtemp;
return sumtemp / (double)(size-1);
}
}
return 1.0 / subtemp;
}
double ucl(data * Data)
{
return(average(Data)+3*averageRange(Data));
}
double lcl(data * Data)
{
return(average(Data) - 3 * averageRange(Data));
}
double uclr(data * Data)
{
return 3.267*averageRange(Data);
}
double lclr(data * Data)
{
return 0;
}
void showNotInUCLLCL(data * Data)
{
double ucl_data = ucl(Data);
double lcl_data = lcl(Data);
unsigned int ii = 0;
unsigned int size = getSize(Data);
if (size <= 0){ return; }
for (; ii < size;++ii)
{
if ((getData(Data, ii) > ucl_data) || (getData(Data, ii) < lcl_data))
{
printf("Not_In_UCL_LCL %f\n", getData(Data, ii));
}
}
printf("\n");
}
void showNotInUCLRLCLR(data * Data)
{
double uclr_data = uclr(Data);
double lclr_data = lclr(Data);
double range_temp = 0;
unsigned int ii = 0;
unsigned int size = getSize(Data);
if (size <= 1){ return; }
for (;ii<size-1;++ii)
{
range_temp = (getData(Data, ii) - getData(Data, ii+1));
if ((range_temp > uclr_data) || (range_temp < lclr_data))
{
printf("Not_In_UCLR_LCLR %f,%f,%f\n", getData(Data, ii),getData(Data,ii+1),range_temp);
}
}
printf("\n");
}
#endif
//main.c
#include "baseDataFun.h"
int main()
{
data m;
initData(&m,10);
setData(&m,3,6);
double temp = getData(&m,3);
temp = average(&m);
temp = averageRange(&m);
showNotInUCLLCL(&m);
showNotInUCLRLCLR(&m);
deleteData(&m);
system("pause");
return 0;
}
追问大哥,能给些注释嘛?跪谢啊,看不懂