📄 tools.cpp
字号:
//该函数实现本程序中一些常用的工具函数
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include "FuzzyNN.h"
//检测内存分配是否成功
void mcheck(int *p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(double *p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(ProtoNode *p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(ExemNode *p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(int **p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(double **p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(ProtoNode **p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(ExemNode **p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(FuzzyNum *p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
void mcheck(FuzzyNum **p)
{
if(p==NULL)
{
cout<<"空间分配失败"<<endl;
exit(1);
}
}
//计算一个梯形模糊集的中心
double coa(FuzzyNum w)
{
return ((w.w1+w.w2)/2+(w.b-w.a)/4);
}
//计算一个梯形模糊集的长度
double len(FuzzyNum w)
{
return ((w.w2-w.w1)+(w.a+w.b)/2);
}
//计算一个exemplar结点的大小
double size(ExemNode E,int L)
{
double s=0;
int i;
for(i=1;i<=L;i++)
s+=len((E.v)[i]);
return s/L;
}
//产生给定范围的随机数
double frand(double low,double high)
{
srand((unsigned)time(NULL));
return ((high-low)*rand()/RAND_MAX+low);
}
//产生给定范围的随机序列
void myrand(int num,int *seq,int low,int high)
{
int *flag;
flag=new int[high-low+1];
mcheck(flag);
int i;
for(i=0;i<=high-low;i++)
flag[i]=0;
srand((unsigned)time(NULL));
int count=0;
int temp;
while(count<num)
{
temp=(rand())%(high-low)+low;
if(flag[temp-low]==0)
{
count++;
seq[count]=temp;
flag[temp-low]=1;
}
}
delete []flag;
}
int vrand(int low,int high)
{
srand((unsigned)time(NULL));
return ((rand())%(high-low)+low);
}
void myrand(int num,int *seq)
{
int *internal;
internal=new int[num+1];
mcheck(internal);
int i;
int temp;
int index;
for(i=1;i<=num;i++)
internal[i]=i;
for(i=num;i>=2;i--)
{
index=vrand(1,i);
temp=internal[index];
internal[index]=internal[i];
internal[i]=temp;
}
for(i=1;i<=num;i++)
seq[i]=internal[num+1-i];
delete []internal;
}
//计算一个数组的和
int sum(int *a,int n)
{
int i;
int s=0;
for(i=1;i<=n;i++)
s+=a[i];
return s;
}
//下面这个函数是为了测试的方便而写的
void WeightOut(ProtoNode *prototype,int N,int L)
{
int i,j;
for(j=1;j<=N;j++)
{
cout<<"第"<<j<<"个prototype结点的权值:"<<endl;
for(i=1;i<=L;i++)
{
cout<<"W["<<i<<"]"<<"["<<j<<"]=(";
cout<<(prototype[j].w)[i].w1<<",";
cout<<(prototype[j].w)[i].w2<<",";
cout<<(prototype[j].w)[i].a<<",";
cout<<(prototype[j].w)[i].b<<")";
cout<<"LR"<<endl;
}
cout<<"------------------------------------"<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -