?? parallel.c
字號:
typedef int __sig_atomic_t;
typedef struct
{
unsigned long int __val[(1024 / (8 * sizeof (unsigned long int))) ];
} __sigset_t;
struct timespec
{
long int tv_sec;
long int tv_nsec;
};
struct timeval;
typedef __fd_mask fd_mask;
typedef __fd_set fd_set;
extern int __select (int __nfds, __fd_set *__readfds,
__fd_set *__writefds, __fd_set *__exceptfds,
struct timeval *__timeout) ;
extern int select (int __nfds, __fd_set *__readfds,
__fd_set *__writefds, __fd_set *__exceptfds,
struct timeval *__timeout) ;
typedef __blkcnt_t blkcnt_t;
typedef __fsblkcnt_t fsblkcnt_t;
typedef __fsfilcnt_t fsfilcnt_t;
extern int32_t random (void) ;
extern void srandom (unsigned int __seed) ;
extern void * initstate (unsigned int __seed, void * __statebuf,
size_t __statelen) ;
extern void * setstate (void * __statebuf) ;
struct random_data
{
int32_t *fptr;
int32_t *rptr;
int32_t *state;
int rand_type;
int rand_deg;
int rand_sep;
int32_t *end_ptr;
};
extern int random_r (struct random_data *__restrict __buf,
int32_t *__restrict __result) ;
extern int srandom_r (unsigned int __seed, struct random_data *__buf) ;
extern int initstate_r (unsigned int __seed,
void * __restrict __statebuf,
size_t __statelen,
struct random_data *__restrict __buf) ;
extern int setstate_r (void * __restrict __statebuf,
struct random_data *__restrict __buf) ;
extern int rand (void) ;
extern void srand (unsigned int __seed) ;
extern int rand_r (unsigned int *__seed) ;
extern double drand48 (void) ;
extern double erand48 (unsigned short int __xsubi[3]) ;
extern long int lrand48 (void) ;
extern long int nrand48 (unsigned short int __xsubi[3]) ;
extern long int mrand48 (void) ;
extern long int jrand48 (unsigned short int __xsubi[3]) ;
extern void srand48 (long int __seedval) ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) ;
extern void lcong48 (unsigned short int __param[7]) ;
struct drand48_data
{
unsigned short int x[3];
unsigned short int a[3];
unsigned short int c;
unsigned short int old_x[3];
int init;
};
extern int drand48_r (struct drand48_data *__restrict __buffer,
double *__restrict __result) ;
extern int erand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
double *__restrict __result) ;
extern int lrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result) ;
extern int nrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result) ;
extern int mrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result) ;
extern int jrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result) ;
extern int srand48_r (long int __seedval, struct drand48_data *__buffer) ;
extern int seed48_r (unsigned short int __seed16v[3],
struct drand48_data *__buffer) ;
extern int lcong48_r (unsigned short int __param[7],
struct drand48_data *__buffer) ;
extern void * malloc (size_t __size) ;
extern void * calloc (size_t __nmemb, size_t __size) ;
extern void * realloc (void * __ptr, size_t __size) ;
extern void free (void * __ptr) ;
extern void cfree (void * __ptr) ;
extern void * alloca (size_t __size) ;
extern void * valloc (size_t __size) ;
extern void abort (void) __attribute__ ((__noreturn__));
extern int atexit (void (*__func) (void)) ;
extern int __on_exit (void (*__func) (int __status, void * __arg),
void * __arg) ;
extern int on_exit (void (*__func) (int __status, void * __arg),
void * __arg) ;
extern void exit (int __status) __attribute__ ((__noreturn__));
extern char *getenv (__const char *__name) ;
extern char *__secure_getenv (__const char *__name) ;
extern int putenv (char *__string) ;
extern int setenv (__const char *__name, __const char *__value,
int __replace) ;
extern void unsetenv (__const char *__name) ;
extern int clearenv (void) ;
extern char *mktemp (char *__template) ;
extern int mkstemp (char *__template) ;
extern int system (__const char *__command) ;
extern char *realpath (__const char *__restrict __name,
char *__restrict __resolved) ;
typedef int (*__compar_fn_t) (__const void * , __const void * ) ;
extern void * bsearch (__const void * __key, __const void * __base,
size_t __nmemb, size_t __size,
__compar_fn_t __compar) ;
extern void qsort (void * __base, size_t __nmemb, size_t __size,
__compar_fn_t __compar) ;
extern int abs (int __x) __attribute__ ((__const__));
extern long int labs (long int __x) __attribute__ ((__const__));
extern div_t div (int __numer, int __denom) __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
__attribute__ ((__const__));
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) ;
extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) ;
extern char *gcvt (double __value, int __ndigit, char *__buf) ;
extern char *qecvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign) ;
extern char *qfcvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf) ;
extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) ;
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) ;
extern int qecvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len) ;
extern int qfcvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len) ;
extern int mblen (__const char *__s, size_t __n) ;
extern int mbtowc (wchar_t *__restrict __pwc,
__const char *__restrict __s, size_t __n) ;
extern int wctomb (char *__s, wchar_t __wchar) ;
extern size_t mbstowcs (wchar_t *__restrict __pwcs,
__const char *__restrict __s, size_t __n) ;
extern size_t wcstombs (char *__restrict __s,
__const wchar_t *__restrict __pwcs, size_t __n) ;
extern int rpmatch (__const char *__response) ;
void print_array (int array[], int size, int array_num);
float find_variance (float mean, float meansq);
float find_mean_sq (int array [], int size);
float find_mean (int array[], int size);
void dual_sort (int a1[], int size1, int a2[], int size2, int out[]);
void sort_array (int array[], int size);
float find_diff_in_arrays(int a1[], int size1, int a2[], int size2);
int find_max_diff (int array[], int size);
int count_frequency_of_digit (int array[], int size, int digit);
int get_input (int array[], char * fname);
void cow();
void frog();
int main (int argc, char * argv[])
{
int array_1[10000], array_2[10000], dig_array1[11], dig_array2[11];
int full_array[20000], dig_array_full[11];
int i, num_in1, num_in2, max_diff1, max_diff2;
float mean_val1, mean_sq1, variance1;
float mean_val2, mean_sq2, variance2;
float mean_val_d, mean_sq_d, variance_d;
float ave_item_diff_pre, ave_item_diff_post;
num_in1 = get_input (array_1, argv[1]);
num_in2 = get_input (array_2, argv[2]);
max_diff1 = find_max_diff(array_1, num_in1);
max_diff2 = find_max_diff(array_2, num_in2);
ave_item_diff_pre = find_diff_in_arrays (array_1, num_in1, array_2, num_in2);
sort_array (array_1, num_in1);
sort_array (array_2, num_in2);
dual_sort (array_1, num_in1, array_2, num_in2, full_array);
ave_item_diff_post = find_diff_in_arrays (array_1, num_in1, array_2, num_in2);
mean_val1 = find_mean (array_1, num_in1);
mean_val2 = find_mean (array_2, num_in2);
mean_sq1 = find_mean_sq (array_1, num_in1);
mean_sq2 = find_mean_sq (array_2, num_in2);
variance1 = find_variance (mean_val1, mean_sq1);
variance2 = find_variance (mean_val2, mean_sq2);
print_array (array_1, num_in1, 1);
printf("maximum distance: %d\nmean: %f\nsquared mean: %f\nvariance: %f\n",
max_diff1, mean_val1, mean_sq1, variance1);
print_array (array_2, num_in2, 2);
printf("maximum distance: %d\nmean: %f\nsquared mean: %f\nvariance: %f\n",
max_diff2, mean_val2, mean_sq2, variance2);
print_array (full_array, num_in1+num_in2, 3);
printf("Average item difference before sorting: %f\n", ave_item_diff_pre);
printf("Average item difference after sorting: %f\n", ave_item_diff_post);
printf("Digit counts:\n");
printf("Digit: Array 1 Array 2 Array 3\n");
for (i = 0; i<=9; i++)
{
dig_array1[i] = count_frequency_of_digit(array_1, num_in1, i);
printf("%5d%9d", i, count_frequency_of_digit(array_1, num_in1, i));
dig_array2[i] = count_frequency_of_digit(array_2, num_in2, i);
printf("%9d", count_frequency_of_digit(array_2, num_in2, i));
dig_array_full[i] = count_frequency_of_digit(array_2, num_in2, i);
printf("%9d\n", count_frequency_of_digit(full_array, num_in1+num_in2, i));
}
mean_val_d = find_mean (dig_array_full, 10);
mean_sq_d = find_mean_sq (dig_array_full, 10);
variance_d = find_variance (mean_val_d, mean_sq_d);
printf("mean: %f\nsquared mean: %f\nvariance: %f\n",
mean_val_d, mean_sq_d, variance_d);
}
void print_array (int array[], int size, int array_num)
{
int i;
printf("Array %d\nEntry Value\n", array_num);
for (i = 0; i < size; i++)
printf("%4d: %6d\n", i, array[i]);
}
float find_variance (float mean, float meansq)
{
return (meansq - mean * mean);
}
float find_mean_sq (int array[], int size)
{
int i, sum = 0;
for (i = 0; i < size; i++)
sum += (array[i] * array[i]);
return (float)sum/(float)size;
}
float find_mean (int array[], int size)
{
int i, sum = 0;
for (i = 0; i < size; i++)
sum += array[i];
return (float)sum/(float)size;
}
void dual_sort (int a1[], int size1, int a2[], int size2, int out[])
{
int i=0, j=0, k=0;
while ((i < size1) && (j < size2))
{
if (a1[i] <= a2[j])
out[k++] = a1[i++];
else
out[k++] = a2[j++];
}
if (i < size1)
for (;i<size1;i++)
out[k++] = a1[i];
else if (j < size2)
for (;j<size2;j++)
out[k++] = a2[j];
}
void sort_array (int array[], int size)
{
int i, j, temp;
for (i = 0; i < size-1; i++)
for (j = i+1; j < size; j++)
if (array[i] > array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
float find_diff_in_arrays(int a1[], int size1, int a2[], int size2)
{
int i, min_size, diff, total_diff = 0;
if (size1 <= size2)
min_size = size1;
else
min_size = size2;
for (i = 0; i < min_size; i++)
{
diff = a1[i] - a2[i];
if (diff < 0)
diff = -diff;
total_diff += diff;
}
return (float)total_diff/(float) min_size;
}
int find_max_diff (int array[], int size)
{
int i, diff, max_diff = 0;
for (i = 1; i < size; i++)
{
diff = array[i-1] - array[i];
if (diff < 0)
diff = -diff;
if (diff > max_diff)
max_diff = diff;
}
return max_diff;
}
int count_frequency_of_digit (int array[], int size, int digit)
{
int i, count=0, number, dig;
for (i=0;i<size;i++)
{
number = array[i];
if ((number == 0) && (digit == 0))
count++;
while (number > 0)
{
dig = number % 10;
if (dig == digit)
count++;
number /= 10;
}
}
return count;
}
int get_input (int array[], char * fname)
{
FILE * fin;
int i = 0;
if (!(fin = fopen (fname, "r")))
{
printf("File not found\n");
return -1;
}
while (!feof (fin))
{
fscanf (fin, "%d", &array[i++]);
}
return i-1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -