Текст ВКР (1218920), страница 10
Текст из файла (страница 10)
#include <string.h>
#include <math.h>
#include <time.h>
using namespace std;
char * starter=new char[25];
char * inp_file=new char[25];
int ochered=-1;
int stage;
int iteration;
char input[30];
char current_task[50];
char *buffer;
long dsiz, vsiz, v_star_siz;
string strar;
void percents(FILE* Out){
FILE *param;
if((param=fopen("diapaz.txt","r"))!=NULL){
int Chislo_diapazonov,i,j;
fscanf(param,"%d",&Chislo_diapazonov);
float **f=new float*[Chislo_diapazonov+1];
for(i=0;i<Chislo_diapazonov+1;++i){
f[i]=new float[2];
}
for(i=0;i<Chislo_diapazonov;++i){
fscanf(param,"%f\n",&f[i][1]);
}
fclose(param);
FILE *data;
float fl;
i=0;
FILE *dirs=fopen("dirs","r");
char path[250];
string err_path;
while(!feof(dirs)){
fscanf(dirs,"%s\n",&path);
err_path=path;
err_path+=".err";
if((data=fopen(err_path.c_str(),"r"))==NULL){
cout<<"Some troubles\n";
}
f[0][0]=0.0;
f[Chislo_diapazonov][1]=INFINITY;
int *sch1=new int[Chislo_diapazonov+1],sch_all=0;
float *perc=new float[Chislo_diapazonov+1];
for(i=0;i<Chislo_diapazonov+1;i++){
sch1[i]=0;
if(i<(Chislo_diapazonov))f[i+1][0]=f[i][1];
perc[i]=0.0;
}
i=0;
while(!feof(data)){
fscanf(data,"%f",&fl);
for(j=0;j<Chislo_diapazonov+1;j++){
if(fl<f[j][1] && fl>=f[j][0]){sch1[j]++;
break;}
}
i++;
}
fprintf(Out,"%s\n",err_path.c_str());
fprintf(Out,"%s%d\n","Total:",i);
for(j=0;j<Chislo_diapazonov+1;j++){
perc[j]=(sch1[j]*100.0)/(i);
fprintf(Out,"[%9.4f %9.4f) ~ %9d|%9.4f%s\n",f[j][0],f[j][1],sch1[j],perc[j],"%");
}
fclose(data);
}
}
}
bool areEqual(double x, double y){
static double SMALL_NUM = 1.0E-6;
if (fabs(x-y) < SMALL_NUM)
return 1;
else
return 0;
}
char* intToChar(int integer){
if(integer%99==0)buffer=new char[2];
if(integer%999==0)buffer=new char[3];
if(integer%9999==0)buffer=new char[4];
sprintf(buffer, "%d", integer);
return buffer;
}
int string_count(FILE *f){
char * s=new char[500];
int i=0;
while(!feof(f)){
fgets(s, 500, f);
if(isdigit(s[0]) && s[0]!='\n'){
i++;
}
sprintf(s, "\n");
}
rewind(f);
return i;
}
int string_count1(FILE *f){
char * s=new char[500];
int i=0;
while(!feof(f)){
fgets(s, 500, f);
if(s[0]!='\n'){
i++;
}
sprintf(s, "\n");
}
rewind(f);
return i;
}
void UpdateAnalyzeFile(char *analyzeFileName){
FILE *analyze;
char s[50];
if((analyze=fopen(analyzeFileName,"r+"))!=NULL){
fseek(analyze,-1,SEEK_END);
if(stage==0)stage++;
fputs(intToChar(stage),analyze);
fclose(analyze);
}
}
bool exist(double *array,int kolvo,int cur){
int i,j;
bool t=0;
for(i=cur*4+5;i<kolvo;i+=4){
if(areEqual(array[i],array[(cur*4)+1]) && areEqual(array[i+2],array[(cur*4)+3])){
t=1;
}
}
if(t)return 0;
else{return 1;}
}
double abs1(double chislo){
if(chislo<0)return -chislo;
return chislo;
}
void search(double **array,int Kolvo_strok, double *range,FILE * file,int query,FILE *outp){
double massive[3][3];
int Chislo_setok;
int i,j,t;
double l,r;
string buf;
fscanf( file, "%s", starter);
for(i=0;i<3;++i){
fscanf( file, "%lf %lf %lf\n", &massive[i][0], &massive[i][1],&massive[i][2]);
}
fscanf( file, "%d\n", &Chislo_setok);
int* setki=new int[Chislo_setok];
for(i=0;i<Chislo_setok;i++){
fscanf( file, "%d ", &setki[i]);
}
double left=range[(query*4)+2],right=range[(query*4)+2];
double some;
some=range[(query*4)+2]-massive[1][2];
double hag=range[(query*4)+2]-some;
for(i=0;i<Kolvo_strok;++i){
if(array[i][0]==range[(query*4)]){
for(j=i+1;j<Kolvo_strok;j++){
r=array[j][2]-right;
if(areEqual(r,hag) && areEqual(array[j][1],range[(query*4)+1]) &&areEqual(array[j][3],range[(query*4)+3])){//if((array[j][1]==range[1]) && (array[j][3]==range[3]))
right=array[j][2];
cout<<"left="<<left<<" "<<"right="<<right<<'\n';}
cout<<'\n';
}
for(t=i-1;t>=0;t--){
r=array[j][2]-right;
l=left-array[t][2];
if(areEqual(l,hag) && areEqual(array[t][1],range[(query*4)+1]) && areEqual(array[t][3],range[(query*4)+3])){//if((array[t][1]==range[1]) && (array[t][3]==range[3]))
left=array[t][2];
}
}
cout<<"left="<<left<<" "<<"right="<<right<<'\n';
}
}
buf+="new_";
buf+=intToChar(query);
if(ochered>=0){
buf+="_och[";
buf+=intToChar(ochered);
buf+="]";
}
buf+="_st[";
buf+=intToChar(stage);
buf+="]_";
buf+=current_task;
FILE* new_started=fopen(buf.c_str(),"w");
fprintf(new_started,"%s\n",starter);
fprintf(new_started,"%lf %lf %lf\n",range[(query*4)+1],range[(query*4)+1],massive[0][2]);
fprintf(new_started,"%lf %lf %lf\n",left,right,massive[1][2]/10.);
fprintf(new_started,"%lf %lf %lf\n",range[(query*4)+3],range[(query*4)+3],massive[2][2]);
fprintf(outp,"%s","d: ");
fprintf(outp," %lf\n",range[(query*4)+1]);
fprintf(outp,"%s","v: ");
fprintf(outp," %lf %lf\n",left,right);
fprintf(outp,"%s","v*: ");
fprintf(outp,"%lf\n\n",range[(query*4)+3]);
fprintf( new_started, "%d\n", Chislo_setok);
for(i=0;i<Chislo_setok;i++){
fprintf( new_started, "%d ", setki[i]);
}
fclose(new_started);
strar="started_files";
if(ochered>0){
strar+="_[";
strar+=intToChar(ochered);
strar+="]";
}
rewind(file);
if(!areEqual(left,right)){
FILE *STARTEDS=fopen(strar.c_str(),"a");
fprintf(STARTEDS,"%s\n",buf.c_str());
fclose(STARTEDS);
}
}
void print_out_double_array(double **array,int N_strok,int N_stolbcov,FILE * f){
int i,j;
for(i=0;i<N_strok;++i){
for(j=0;j<N_stolbcov;++j){ // print sorted array to another_output file
if(j==0){
fprintf(f,"%4.0f ",array[i][j]);
continue;
}
if(j==N_stolbcov-1||j==N_stolbcov-2){fprintf(f,"%8.0f ",array[i][j]);
continue;}
fprintf(f,"%11.7f",array[i][j]);
}
fprintf(f,"\n");
}
}
char * concat(char * dst, const char * s1, const char * s2){ // ob'edinenie strok БДМТ peЙedachi v funkciu "system()"
size_t l1 = strlen(s1);
size_t l2 = strlen(s2);
size_t len = l1 + l2 + 1;
memcpy(dst, s1, l1);
memcpy(dst + l1, s2, l2);
dst[len - 1] = 0;
return dst;
}
void swap(double **a, int first, int second,int chislo_stolbcov){ // pomenyat mestami stroki a[first][i]-a[second][i] (i=0..17)
double middle[chislo_stolbcov];
int i;
for(i=0;i<chislo_stolbcov;++i){
middle[i]=a[first][i];
a[first][i]=a[second][i];
a[second][i]=middle[i];
}
}
int kolvo_neg_zero(double**a,int kolvo,int nomer_stolbca){
int i,kolvo_neg=0;
for(i=0;i<kolvo;++i){
if(a[i][nomer_stolbca]<=0)kolvo_neg++;
}
return kolvo_neg;
}
int splineField(int chislo_stolbcov,bool left_right){
if(left_right){return chislo_stolbcov-1;}
else{return chislo_stolbcov-2;}
}
void sort2(double**a,int kolvo,int chislo_stolbcov){
int k,i,nomer_stolbca=chislo_stolbcov-2,chislo1=0,chislo2=0;
bool *key=new bool[kolvo];
int max1=a[0][chislo_stolbcov-2],max2=a[0][chislo_stolbcov-1];
for(i=1;i<kolvo;++i){
if(a[i][chislo_stolbcov-2]>max1)max1=a[i][chislo_stolbcov-2];
if(a[i][chislo_stolbcov-1]>max2)max2=a[i][chislo_stolbcov-1];
if(a[i][chislo_stolbcov-2]>a[i][chislo_stolbcov-1]){chislo1++;key[i]=0;}
else{chislo2++;key[i]=1;}
}
if(max2>max1)nomer_stolbca=chislo_stolbcov-1;
else{if(max2==max1){
if(chislo2>chislo1)nomer_stolbca=chislo_stolbcov-1;
}
}
for(i=1;i<kolvo;++i){
for(k=i;k>0 && a[k][splineField(chislo_stolbcov,key[k])]<a[k-1][splineField(chislo_stolbcov,key[k])];k--){
swap(a,k,k-1,chislo_stolbcov);
}
}
}
void sort(double**a,int kolvo,int chislo_stolbcov,int nomer_stolbca,bool Vozr_Ubiv){ // sortirova massiva metodom prostih vstavok (esli Vozr_Ubiv=1 - po vozrastaniu, Vozr_Ubiv=0 - po ubivaniu)
int k,i;
for(i=1;i<kolvo;++i){
if(Vozr_Ubiv){
for(k=i;k>0 && a[k][nomer_stolbca]<a[k-1][nomer_stolbca];k--){
swap(a,k,k-1,chislo_stolbcov);
}
}
else{
for(k=i;k>0 && a[k][nomer_stolbca]>a[k-1][nomer_stolbca];k--){
swap(a,k,k-1,chislo_stolbcov);
}
}
}
}
int count_of_nets(){
int p, Chislo_setok,No_rez;
FILE *fpa=fopen("analyze.txt","r+");
fscanf(fpa,"%d\n",&Chislo_setok);
int *setki=new int[Chislo_setok];
for(p=0;p<Chislo_setok;++p){
fscanf(fpa,"%d ",&setki[p]);
}
fscanf(fpa,"%d",&No_rez);
return Chislo_setok;
}
int *nets_array(){
int p, Chislo_setok,No_rez;
FILE *fpa=fopen("analyze.txt","r+");
fscanf(fpa,"%d\n",&Chislo_setok);
int *setki=new int[Chislo_setok];
for(p=0;p<Chislo_setok;++p){
fscanf(fpa,"%d ",&setki[p]);
}
fscanf(fpa,"%d",&No_rez);
return setki;
}
void printf_pars(double **massive,int * setki,int Chislo_setok,FILE *pars){
double dlya_vivoda1,dlya_vivoda2,dlya_vivoda3;
double vivod1,vivod3,vivod4;
int vivod2, t=0,i,j,h,k;
vivod2=4; //chislo potokov
dlya_vivoda1=massive[0][0];
dlya_vivoda2=massive[1][0];
dlya_vivoda3=massive[2][0];
vivod1=(massive[0][1]-massive[0][0])/massive[0][2]+1;
dsiz=vivod1;
vivod3=(massive[1][1]-massive[1][0])/massive[1][2]+1;
v_star_siz=vivod3;
vivod4=(massive[2][1]-massive[2][0])/massive[2][2]+1;
vsiz=vivod4;
for(i=0;i<vivod1;++i){
for(j=0;j<vivod3;++j){
for(h=0;h<vivod4;++h){
for(k=0;k<Chislo_setok;k++){
fprintf(pars,"%d %d %d %lf %lf %lf %d\n",t,setki[k],vivod2,dlya_vivoda1,dlya_vivoda2,dlya_vivoda3,0);
t++;
}
dlya_vivoda3+=massive[2][2];
}
dlya_vivoda2+=massive[1][2];
dlya_vivoda3=massive[2][0];
}
dlya_vivoda1+=massive[0][2];
dlya_vivoda2=massive[1][0];
}
}
void transpose(double **a, int N, int N_setok,int No_rez,int field1,int field2){
int i,j,t=0,h=0;
for(i=0;i<N/N_setok;i++){
if(i>0)t=N_setok-(i%N_setok)+(i-1-h)*N_setok;
a[i][1]=a[i+t][3];
a[i][2]=a[i+t][4];
a[i][3]=a[i+t][5];
for(j=0;j<N_setok;++j){
a[i][6+2*N_setok-1]=a[i+t+j][field2];
a[i][6+2*N_setok-2]=a[i+t+j][field1];
a[i][2*j+4]=a[i+t+j][No_rez];
a[i][2*j+5]=0;
}
if((i+1)%(N_setok)==0 && i>0)h++;
}
}
void get_shtraf(double **a, int N,int Chislo_setok,double speed,int N_fields_from_end){
int osnovanie,tika;
int i,j;















