📄 ulti.c
字号:
#include "Global.h"
#include "MyAssert.h"
#include "Ulti.h"
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
void swap(Type* a,Type* b)
{
Type tmpV;
assertF(a!=NULL,"in swap,a is NULL");
assertF(b!=NULL,"in swap,b is NULL");
tmpV=*a;
*a=*b;
*b=tmpV;
}
/*swap array data*/
void swapArrData(Type* arr,int pos1,int pos2)
{
Type tmpData;
assertF(arr!=NULL,"In swapArrData,arr is NULL\n");
tmpData=arr[pos1];
arr[pos1]=arr[pos2];
arr[pos2]=tmpData;
}
void outputListArrFloat(Type* arr,long startPos,long len,FILE* outputFile)
{
long i=0;/*iterator num*/
assertF(len-startPos>0,"in outputListArrFloat len-startPos<=0\n");
assertF(arr!=NULL,"In outputListArrFloat,arr is NULL\n");
assertF(outputFile!=NULL,"in outputListArrFloat ,outputFile is NULL\n");
for(i=startPos;i<len;i++)
{
fprintf(outputFile,"%10.5f ",arr[i]);
if((i+1)%10==0)
fprintf(outputFile,"\r\n");
}
fprintf(outputFile,"\r\n");
}
extern void outputListArrInt(Type* arr,long startPos,long len,FILE* outputFile)
{
long i=0;/*iterator num*/
assertF(len-startPos>0,"in outputListArrFloat len-startPos<=0\n");
assertF(arr!=NULL,"In outputListArrFloat,arr is NULL\n");
assertF(outputFile!=NULL,"in outputListArrFloat ,outputFile is NULL\n");
for(i=startPos;i<len;i++)
{
fprintf(outputFile,"%d,",arr[i]);
if((i+1)%10==0)
fprintf(outputFile,"\r\n");
}
fprintf(outputFile,"\r\n");
}
extern void outputListArrInt2(int* arr,int startPos,int len,char* outputFileName)
{
FILE* outputFile;/*the outputFile for the data output*/
int i;/*iterator number*/
/*assertion*/
assertF(len-startPos>0,"in outputListArrFloat2 len-startPos<=0\n");
assertF(arr!=NULL,"In outputListArrFloa2t,arr is NULL\n");
assertF(outputFileName!=NULL,"in outputListArrFloat2,listFileName is null\n");
/*open file*/
assertF((outputFile=fopen(outputFileName,"wb"))!=NULL,"output file open error\n");
for(i=startPos;i<len;i++)
{
fprintf(outputFile,"%10d",arr[i]);
if((i+1)%10==0)
fprintf(outputFile,"\r\n");
}
fprintf(outputFile,"\r\n");
fclose(outputFile);
}
void outputListArrFloat2(Type* arr,int startPos,int len,char* outputFileName)
{
FILE* outputFile;/*the outputFile for the data output*/
int i;/*iterator number*/
/*assertion*/
assertF(len-startPos>0,"in outputListArrFloat2 len-startPos<=0\n");
assertF(arr!=NULL,"In outputListArrFloa2t,arr is NULL\n");
assertF(outputFileName!=NULL,"in outputListArrFloat2,listFileName is null\n");
/*open file*/
assertF((outputFile=fopen(outputFileName,"wb"))!=NULL,"output file open error\n");
for(i=startPos;i<len;i++)
{
fprintf(outputFile,"%10.5f ",arr[i]);
if((i+1)%10==0)
fprintf(outputFile,"\r\n");
}
fprintf(outputFile,"\r\n");
fclose(outputFile);
}
void outputListArrIntToMatlab(int* arr,int startPos,int len,char* outputFileName)
{
FILE* outputFile;/*the outputFile for the data output*/
int i;/*iterator number*/
/*assertion*/
assertF(len-startPos>0,"in outputListArrFloat2 len-startPos<=0\n");
assertF(arr!=NULL,"In outputListArrFloa2t,arr is NULL\n");
assertF(outputFileName!=NULL,"in outputListArrFloat2,listFileName is null\n");
/*open file*/
assertF((outputFile=fopen(outputFileName,"wb"))!=NULL,"output file open error\n");
fprintf(outputFile,"arr=[");
for(i=startPos;i<len;i++)
fprintf(outputFile,"%d ",arr[i]);
fprintf(outputFile,"]\r\n");
fclose(outputFile);
}
void outputListArrFloatToMatlab(Type* arr,int startPos,int len,char* outputFileName)
{
FILE* outputFile;/*the outputFile for the data output*/
int i;/*iterator number*/
/*assertion*/
assertF(len-startPos>0,"in outputListArrFloat2 len-startPos<=0\n");
assertF(arr!=NULL,"In outputListArrFloa2t,arr is NULL\n");
assertF(outputFileName!=NULL,"in outputListArrFloat2,listFileName is null\n");
/*open file*/
assertF((outputFile=fopen(outputFileName,"wb"))!=NULL,"output file open error\n");
fprintf(outputFile,"arr=[");
for(i=startPos;i<len;i++)
fprintf(outputFile,"%f ",arr[i]);
fprintf(outputFile,"]\r\n");
fclose(outputFile);
}
void output2DArrInt(Type** arr,int col,int row,FILE* outputFile)
{
int i=0,j=0;/*iterator value*/
assertF(arr!=NULL,"In output2DArr,arr is NULL\n");
assertF(outputFile!=NULL,"in output2DArr, outputFile is NULL");
for(i=0;i<col;i++)
{
for(j=0;j<row-1;j++)
{
fprintf(outputFile,"%d,",arr[i][j]);
}
fprintf(outputFile,"%d;\r\n",arr[i][j]);
}
}
void output2DArrFloat(Type** arr,int col,int row,FILE* outputFile)
{
int i=0,j=0;/*iterator value*/
assertF(arr!=NULL,"In output2DArr,arr is NULL\n");
assertF(outputFile!=NULL,"in output2DArr, outputFile is NULL");
for(i=0;i<col;i++)
{
for(j=0;j<row-1;j++)
{
fprintf(outputFile,"%f,",arr[i][j]);
}
fprintf(outputFile,"%f;\r\n",arr[i][j]);
}
}
void show2DArrInt(Type** arr,int col,int row)
{
int i=0,j=0;/*iterator value*/
int pos=0;/*output control*/
assertF(arr!=NULL,"In showArr,arr is NULL\n");
for(i=0;i<col;i++)
{
for(j=0;j<row-1;j++)
{
printf("%d,",arr[i][j]);
pos++;
if(pos>10)
{
printf("\n");
pos=0;
}
}
printf("%d;\n",arr[i][j]);
pos=0;
}
printf("\n");
}
void show2DArrFloat(Type** arr,int col,int row)
{
int i=0,j=0;/*iterator value*/
int pos=0;/*output control*/
assertF(arr!=NULL,"In showArr,arr is NULL\n");
for(i=0;i<col;i++)
{
for(j=0;j<row-1;j++)
{
printf("%f,",arr[i][j]);
pos++;
if(pos>10)
{
printf("\n");
pos=0;
}
}
printf("%f;\n",arr[i][j]);
pos=0;
}
printf("\n");
}
void showArrListInt(Type* arr,int startPos,int len)
{
int i=0;/*iterator num*/
assertF(len-startPos>0,"in sumArr len-startPos<=0\n");
assertF(arr!=NULL,"In showArrListFloat,arr is NULL\n");
for(i=startPos;i<len-1;i++)
printf("%d,",arr[i]);
printf("%d;\n",arr[i]);
}
void showArrListFloat(Type* arr,int startPos,int len)
{
int i=0;/*iterator num*/
assertF(len-startPos>0,"in sumArr len-startPos<=0\n");
assertF(arr!=NULL,"In showArrListFloat,arr is NULL\n");
for(i=startPos;i<len-1;i++)
printf("%f,",arr[i]);
printf("%f;\n",arr[i]);
}
Type sumArr(Type* inArr,int len)
{
int i=0;/*iterator num*/
Type ans=0;
assertF(inArr!=NULL,"in sumArr,inArr is NULL\n");
for(i=0;i<len;i++)
ans+=inArr[i];
return ans;
}
void arrEachBy(Type* firstArr,Type* secondArr,Type** ansArr,int len)
{
int i=0;/*iterator num*/
/*assertion*/
assertF(firstArr!=NULL,"in arrEachBy,firstArr is NULL\n");
assertF(secondArr!=NULL,"in arrEachBy,secondArr is NULL\n");
assertF(ansArr!=NULL,"in arrEachBy,ansArr is NULL\n");
for(i=0;i<len;i++)
(*ansArr)[i]=firstArr[i]*secondArr[i];
}
void reverseArr(Type** arr,int len)
{
int i=0,j=0;/*iterator num*/
Type* tmpArr;/*tmp arr*/
assertF(*arr!=NULL,"in reverseArr,arr is NULL\n");
/*memory apply*/
tmpArr=(Type*)malloc(len*sizeof(Type));
assertF(tmpArr!=NULL,"in reverseArr,tmpArr is NULL\n");
for(i=0;i<len;i++)
tmpArr[i]=(*arr)[i];
/*rever operator*/
j=len;
for(i=0;i<len;i++)
{ j--;
(*arr)[i]=tmpArr[j];
}
free(tmpArr);
}
void twoDArrMemApply(Type*** inArr,int rowNum,int colNum)
{
int i=0;/*iterator vaule*/
(*inArr)=(Type**)malloc(sizeof(Type*)*rowNum);
for(i=0;i<rowNum;i++)
(*inArr)[i]=(Type*)malloc(sizeof(Type)*colNum);
assertF(*inArr!=NULL,"in twoDArrMemApply,inArr at last is null\n");
}
void twoDArrMemFree(Type*** inArr,int rowNum)
{
int i=0;/*iterator value*/
assertF((*inArr)!=NULL,"in 2d arr mem free,in arr is null\n");
for(i=0;i<rowNum;i++)
free((*inArr)[i]);
free((*inArr));
}
void listArrMemApply(Type** inArr,int len)
{
int i=0;/*iterator vaule*/
(*inArr)=(Type*)malloc(sizeof(Type)*len);
assertF(*inArr!=NULL,"in listArrMemApply,inArr at last is null\n");
}
void readListFloat(Type** listArr,int* len,char* listFileName)
{
int i=0;/*iterator value*/
FILE* inputFile;/*input file pointer*/
/*list file specification:
listLen;
data1,data2,data3;
*/
assertF(len!=NULL,"in readList,pointer len is null\n");
assertF(listFileName!=NULL,"in readList,listFileName is null\n");
/*open file*/
assertF((inputFile=fopen(listFileName,"rb"))!=NULL,"input file error");
/*read in list len*/
fscanf(inputFile,"%d;",len);
printf("len in %s is:%d\n",listFileName,*len);
/*mem apply*/
*listArr=(Type*)malloc(sizeof(Type)*(*len));
assertF((*listArr)!=NULL,"in readList ,listArr apply failure\n");
/*read in data*/
for(i=0;i<*len-1;i++)
fscanf(inputFile,"%f,",&(*listArr)[i]);
fscanf(inputFile,"%f;",&(*listArr)[i]);
/*show infomation*/
showArrListFloat(*listArr,0,*len);
fclose(inputFile);
}
void read2DArrFloat(Type*** twoDArr,int* rowNum,int* colNum,char* inputFileName)
{
int i=0,j=0;/*iterator values*/
FILE* inputFile;/*input file name*/
/*2d arr file specification:
rowNum,colNum;
a11,a12,a13;
...
a31,a32,a33;
*/
assertF(rowNum!=NULL&&colNum!=NULL,"in readList,pointer len is null\n");
assertF(inputFileName!=NULL,"in readList,listFileName is null\n");
/*open file*/
assertF((inputFile=fopen(inputFileName,"rb"))!=NULL,"input file error");
/*read in colNum and rowNum*/
fscanf(inputFile,"%d,%d;",rowNum,colNum);
printf("RowNum and colNum in %s is:(%d,%d)\n",inputFileName,*rowNum,*colNum);
/*mem apply*/
twoDArrMemApply(twoDArr,*rowNum,*colNum);
/*Read in data*/
for(i=0;i<*rowNum;i++)
{
for(j=0;j<*colNum-1;j++)/*attention ,have to minus 1 here*/
fscanf(inputFile,"%f,",&((*twoDArr)[i][j]));
fscanf(inputFile,"%f;",&((*twoDArr)[i][j]));
}
/*show infomation*/
show2DArrFloat((*twoDArr),*rowNum,*colNum);
fclose(inputFile);
}
/*list ulti operation*/
Type maxValInList(Type* inList,int len)
{
int i;/*iterator num*/
Type maxData;
assertF(inList!=NULL,"in maxValInList,inList is NULL\n");
maxData=inList[0];
for(i=1;i<len;i++)
if(inList[i]>maxData)maxData=inList[i];
return maxData;
}
Type maxAbsValInList(Type* inList,int len)
{
int i;/*iterator num*/
Type maxData;
assertF(inList!=NULL,"in maxValInList,inList is NULL\n");
maxData=(Type)fabs(inList[0]);
for(i=1;i<len;i++)
if(fabs(inList[i])>maxData)maxData=(Type)fabs(inList[i]);
return maxData;
}
int listNotZero(Type* inList,int len)
{
int i=0;/*iterator*/
int flag;
float e=(float)0.00001;/*the precise controller*/
Type sum=0;
assertF(inList!=NULL,"in list not zero,in list is null\n");
sum=0;
for(i=0;i<len;i++)
sum+=inList[i];
if(fabs(sum)<=e)flag=0;
else flag=1;
return flag;
}
/*matrix ulti operation*/
void matrixCopy(Type** sourceMatrix,Type** targetMatrix,int rowNum,int colNum)
{
int i,j;/*iterator num*/
assertF(sourceMatrix!=NULL,"in matrixCopy,sourceMatrix is null\n");
assertF(targetMatrix!=NULL,"in matrixCopy,targetMatrix is null\n");
for(i=0;i<rowNum;i++)
for(j=0;j<colNum;j++)
targetMatrix[i][j]=sourceMatrix[i][j];
}
Type sumSomeRow(Type** inMatrix,int rowIndex,int colStart,int colEnd)
{
Type sum;
int j;
assertF(inMatrix!=NULL,"in sumSomeRow,inMatrix is null\n");
sum=0;
for(j=colStart;j<=colEnd;j++)
sum+=inMatrix[rowIndex][j];
return sum;
}
Type sumSomeRowPower(Type** inMatrix,int rowIndex,int colStart,int colEnd,int powNum)
{
Type sum;
int j;
assertF(inMatrix!=NULL,"in sumSomeRowPower,inMatrix is null\n");
sum=0;
for(j=colStart;j<=colEnd;j++)
sum+=(Type)pow(inMatrix[rowIndex][j],powNum);
return sum;
}
Type sumTwoRowBy(Type** inMatrix,int rowIndex1,int rowIndex2,int colStart,int colEnd)
{
Type sum;
int j;
assertF(inMatrix!=NULL,"in sumSomeRowBy,inMatrix is null\n");
sum=0;
for(j=colStart;j<=colEnd;j++)
sum+=inMatrix[rowIndex1][j]*inMatrix[rowIndex2][j];
return sum;
}
Type sumArr_JKByList_K(Type** inMatrix,Type* inList,int rowIndex,int colStart,int colEnd)
{
Type sum;
int j;
assertF(inMatrix!=NULL,"in sumSomeRow,inMatrix is null\n");
assertF(inList!=NULL,"in sumSomeRow,inList is null\n");
sum=0;
for(j=colStart;j<=colEnd;j++)
sum+=inMatrix[rowIndex][j]*inList[j];
return sum;
}
Type sumArr_KJByList_K(Type** inMatrix,Type* inList,int colIndex,int rowStart,int rowEnd)
{
Type sum;
int i;
assertF(inMatrix!=NULL,"in sumSomeRow,inMatrix is null\n");
assertF(inList!=NULL,"in sumSomeRow,inList is null\n");
sum=0;
for(i=rowStart;i<=rowEnd;i++)
sum+=inMatrix[i][colIndex]*inList[i];
return sum;
}
Type sumArr1_IKByArr2_JK(Type** inMatrix1,Type** inMatrix2,int rowIndex1,int rowIndex2,int colStart,int colEnd)
{
Type sum;
int j;
assertF(inMatrix1!=NULL,"in sumArr1_IKByArr2_IK,inMatrix1 is null\n");
assertF(inMatrix2!=NULL,"in sumArr1_IKByArr2_IK,inMatrix2 is null\n");
sum=0;
for(j=colStart;j<=colEnd;j++)
sum+=inMatrix1[rowIndex1][j]*inMatrix2[rowIndex2][j];
return sum;
}
/*list data copy*/
void listArrCopy(Type* sourceListArr,Type* targetListArr,int len)
{
int i;/*iterator num*/
assertF(sourceListArr!=NULL,"in listArrCopy,sourceListArr is null\n");
assertF(targetListArr!=NULL,"in listArrCopy,targetListArr is null\n");
for(i=0;i<len;i++)
targetListArr[i]=sourceListArr[i];
}
void listArrCopy2(Type* sourceListArr,Type* targetListArr,long sourceStartPos,long targetStartPos,long len)
{
long i;/*iterator num*/
long p1,p2;
assertF(sourceListArr!=NULL,"in listArrCopy2,sourceListArr is null\n");
assertF(targetListArr!=NULL,"in listArrCop2y,targetListArr is null\n");
p1=sourceStartPos;
p2=targetStartPos;
/*init */
i=0;
while(i<len)
{
targetListArr[p2]=sourceListArr[p1];
p1++;p2++;
i++;
}
}
/*random list data fill in*/
void radnomDataFillToList(Type* listArr,long length)
{
Type tmpData;
int i;/*iterator num*/
assertF(listArr!=NULL,"in randomDataFillToList,listArr is null\n");
srand((unsigned int) time (NULL));
for(i=0;i<length;i++)
{
tmpData=((float)rand()/(float)32767)*(float)10000.0;
listArr[i]=tmpData;
}
}
Type eRandom(int upLimit)
{
Type tmpData;
do
{
tmpData=((Type)rand()/(Type)32767)*(Type)100.0*(Type)upLimit;
}
while(tmpData>upLimit);
return tmpData;
}
/*ulti file operation*/
extern FILE* createFile(char mode,char* fileName)
{
FILE* mFile;
assertF(fileName!=NULL,"in createFile,listFileName is null\n");
assertF(mode=='w'||mode=='r',"in create,mode pass in is error\n");
if(mode=='w')
assertF((mFile=fopen(fileName,"wb"))!=NULL,"in create file,output file open error\n");
else
assertF((mFile=fopen(fileName,"rb"))!=NULL,"in create file,output file open error\n");
return mFile;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -