Code:
int LineCount(FILE* fptr);
double ReadFile(FILE *filename, int num_lines, double *array);
double *splitme(double *array, size_t *p, size_t *q);
int main(void)
{
size_t j, encrypt_lines, bfun_lines, p1, q1;
size_t *p, *q;
FILE *encrypt, *blurring;
double *encrypt_array, *bfun_array, *split_array;
const char input1[]="toencrypt.txt", input2[]="bfun.txt";
encrypt=fopen("toencrypt.txt","r");
blurring=fopen("bfun.txt","r");
if (encrypt ==NULL || blurring == NULL)
{
printf("Cannot open required file!\n");
printf("Please ensure your data file\n");
printf("is in the correct directory\n");
exit(EXIT_FAILURE);
}
encrypt_lines=LineCount(encrypt);
printf("%i\n", encrypt_lines); //remove
bfun_lines=LineCount(blurring);
printf("%i\n", bfun_lines); //remove
encrypt_array = malloc ((encrypt_lines)*sizeof(double));
bfun_array = malloc ((bfun_lines)*sizeof(double));
split_array = malloc ((bfun_lines)*sizeof(double));
*encrypt_array= ReadFile(encrypt, encrypt_lines, encrypt_array);
*bfun_array= ReadFile(blurring, bfun_lines, bfun_array);
j=0;
for(j=0; j<encrypt_lines; j++)
{
printf("main encrypt array %i is %lf\n", j, encrypt_array[j]);
}
j=0;
for(j=0; j<bfun_lines; j++)
{
printf("main bfun array %i is %lf\n", j, bfun_array[j]);
}
fclose(encrypt);
fclose(blurring);
*p = bfun_lines;
*q=0;
*split_array= *splitme(bfun_array, p, q);
j=0;
for (j=0; j<bfun_lines; j++)
{
printf("split main array %i is %lf\n", j, split_array[j]);
}
printf("p is %i\n", p);
printf("q is %i\n", q);
return(0);
}
int LineCount(FILE* fptr)
{
int count = 0;
char check[81];
char temp[81];
while (fgets(temp, sizeof(temp), fptr) != NULL)
{
fscanf(fptr, "%s", &check);
if (check != "\n")
{
count++;
}
}
count = ((count+1)*2);
return(count);
}
double ReadFile(FILE *filename, int num_lines, double *array)
{
int i;
rewind(filename);
i=0;
for(i=0; i<(num_lines); i++)
{
if((i & 1) == 0)
{
fscanf(filename, "%lf", &array[i]);
}
else
{
array[i]=0.0;
}
}
i=0;
for(i=0; i<(num_lines); i++)
{
printf("array %i is %lf\n", i, array[i]);
}
rewind(filename);
return(*array);
free(array);
}
double *splitme(double *array, size_t *p, size_t *q)
{
size_t i, n, j;
double sum1, sum2;
double *bfun_split, *ptr;
size_t array_size, centroid;
array_size = *p;
for (i=0; i<array_size; i++)
{
sum1 += (i * array[i]);
sum2 += array[i];
}
centroid = (round)(sum1/sum2);
printf("centroid is %d\n", centroid);
*q = centroid - 1;
*p = array_size - centroid - 1;
printf("array size is %i\n", array_size);
printf("p is %i\n", p);
printf("q is %i\n", q);
bfun_split = malloc((array_size)*sizeof(double));
i=0;
for (i=0; i<*p; i++)
{
bfun_split[i] = array[i+centroid];//allocate the right of the centroid
}
i=0;
//x=(array_size - q - 1);
for (i=(array_size - *q - 1); i<array_size; i++)
{
bfun_split[i] = array[i-centroid]; //allocate the left of centroid
}
i=0;
for (i=0; i<array_size; i++)
{
printf("split array %i is %lf\n", i, bfun_split[i]);
}
free(array);
array = malloc((array_size)*sizeof(double));
i=0;
for (i=0; i<array_size; i++)
{
array[i] = bfun_split[i];
}
i=0;
for (i=0; i<array_size; i++)
{
printf("split array normal %i is %lf\n", i, array[i]);
}
return(array);
}