Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool MATRIX_Init(MATRIX *ob, size_t m, size_t n)
- {
- size_t i, j;
- ob->m = m;
- ob->n = n;
- ob->arr = (double **)malloc(m*sizeof(double *));
- if(!ob->arr)
- return 0;
- for(i=0; i<m; ++i)
- {
- ob->arr[i] = (double *)malloc(n*sizeof(double));
- if(!ob->arr[i])
- {
- for(j=0; i<i; ++j)
- {
- free(ob->arr[j]);
- ob->arr[j] = NULL;
- }
- free(ob->arr);
- ob->arr = NULL;
- return 0;
- }
- }
- for(i=0; i<m; ++i)
- {
- for(j=0; j<n; ++j)
- {
- ob->arr[i][j] = sqrt((i+1.0)*(j+1.0));
- }
- }
- return 1;
- }
- void MATRIX_Free(MATRIX * ob)
- {
- size_t i;
- if(ob->arr)
- {
- for(i=0; i<ob->m; ++i)
- {
- free(ob->arr[i]);
- ob->arr[i] = NULL;
- }
- free(ob->arr);
- ob->arr = NULL;
- }
- }
- void MATRIX_MultToVect(MATRIX * ob, double * vect, double *res)
- {
- size_t i, j;
- double register dot;
- for(i=0; i<ob->m; ++i)
- {
- dot = 0;
- for(j=0; j<ob->n; ++j)
- {
- dot += ob->arr[i][j]*vect[j];
- }
- res[i] = dot;
- }
- }0000000000000000000000000000000
- void crash(char *str);
- void check(MATRIX *ob, double *res);
- int _tmain(int argc, _TCHAR* argv[])
- {
- MATRIX matr;
- double *vect = NULL, *res = NULL;
- size_t m, n, i;
- printf("podaj m, n\n");
- scanf_s("%lu %lu", &m, &n);
- if(!MATRIX_Init(&matr, m, n))
- crash("init matr error");
- //prepare vect
- vect = (double *)malloc(n*sizeof(double));
- if(!vect)
- {
- MATRIX_Free(&matr);
- crash("vector allocation error");
- }
- res = (double *)malloc(m*sizeof(double));
- if(!res)
- {
- free(vect);
- MATRIX_Free(&matr);
- crash("vector allocation error");
- }
- for(i=0; i<n; ++i)
- vect[i] = 1.0;
- MATRIX_MultToVect(&matr, vect, res);
- check(&matr, res);
- if(vect)
- free(vect);
- vect = NULL;
- if(res)
- free(res);
- res = NULL;
- MATRIX_Free(&matr);
- system("pause");
- return 0;
- }
- void crash(char *str)
- {
- printf("%s\n", str);
- system("pause");
- exit(1);
- }
- void check(MATRIX *ob, double *res)
- {
- size_t i, j;
- double sum;
- const double eps = 1e-10;
- for(i=0; i<ob->m; ++i)
- {
- sum = 0;
- for(j=0; j<ob->n; j++)
- {
- sum += ob->arr[i][j];
- }
- if(fabs(sum-res[i]) > eps)
- {
- printf("error!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
- return;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement