Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- double machine_epsilon(void);
- int read_array(const char *name, double *a, unsigned int n);
- void print_array(double *a, unsigned int n);
- void f(double *a, unsigned int n, double *b, unsigned int m);
- double machine_epsilon(void)
- {
- double eps = 1;
- while( (1 + eps/2)>1 )
- eps /= 2;
- return eps;
- }
- /* Ф-ия заменяет каждый элемент массива a на 0, если он совпадает с каким-то элементов в b. */
- void f(double *a, unsigned int n, double *b, unsigned int m)
- {
- unsigned int i, j;
- double eps = machine_epsilon();
- for( i = 0; i<n; i++ )
- for( j = 0; j<m; j++ )
- if( fabs(a[i] - b[j])<eps )
- {
- a[i] = 0;
- break;
- }
- }
- void print_array(double *a, unsigned int n)
- {
- unsigned int i;
- for( i = 0; i<n; i++ )
- printf("array[%u]==%lf\t", i, a[i]);
- printf("\n");
- }
- int read_array(const char *name, double *a, unsigned int n)
- {
- FILE *input;
- unsigned int i;
- if( !(input = fopen(name, "r")) ) return -1;
- for( i = 0; i<n; i++ )
- {
- if( fscanf(input, "%lf", a + i)!=1 )
- {
- fclose(input);
- return -2;
- }
- }
- fclose(input);
- return 0;
- }
- int main(int argc, const char *argv[])
- {
- unsigned int n, m;
- int res;
- double *a, *b;
- if( (argc!=5) || (sscanf(argv[1], "%u", &n)!=1) || (sscanf(argv[3], "%u", &m)!=1) )
- {
- fprintf(stderr, "Usage: %s [n] [file1] [m] [file2]\n", argv[0]);
- return -1;
- }
- a = (double *)malloc(n*sizeof(double));
- if( !a )
- {
- fprintf(stderr, "Not enough memory!\n");
- return -2;
- }
- b = (double *)malloc(m*sizeof(double));
- if( !b )
- {
- fprintf(stderr, "Not enough memory!\n");
- free(a);
- return -2;
- }
- res = read_array(argv[2], a, n);
- if( res<0 )
- {
- free(a);
- free(b);
- switch(res)
- {
- case -1:
- fprintf(stderr, "Can not open %s\n", argv[2]);
- return 0;
- case -2:
- fprintf(stderr, "Can not read %s\n", argv[2]);
- return 0;
- default:
- fprintf(stderr, "Unknown error %d in %s\n", res, argv[2]);
- return 0;
- }
- }
- res = read_array(argv[4], b, m);
- if( res<0 )
- {
- free(a);
- free(b);
- switch(res)
- {
- case -1:
- fprintf(stderr, "Can not open %s\n", argv[4]);
- return 0;
- case -2:
- fprintf(stderr, "Can not read %s\n", argv[4]);
- return 0;
- default:
- fprintf(stderr, "Unknown error %d in %s\n", res, argv[4]);
- return 0;
- }
- }
- printf("Array a[]:\n");
- print_array(a, n);
- printf("Array b[]:\n");
- print_array(b, m);
- f(a, n, b, m);
- printf("\nf(a, n, b, m) completed!\n\n");
- printf("Array a[]:\n");
- print_array(a, n);
- printf("Array b[]:\n");
- print_array(b, m);
- free(a);
- free(b);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement