⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parallel.c

📁 C语言前端编译器,yacc/lex编写,可自行修改代码.
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -