Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int n;
- int *p;
- int *c;
- double *m;
- double det;
- int inversions(int *p) {
- extern int n;
- int s = 0;
- for (int i = 0; i < n; i++)
- for (int j = i + 1; j < n; j++)
- s += *(p + i) > *(p + j);
- return s;
- }
- void swap(int i, int j) {
- extern int *c;
- int t = *(c + i);
- *(c + i) = *(c + j);
- *(c + j) = t;
- }
- void calc(int k) {
- extern int n;
- extern int *p;
- extern int *c;
- extern double *m;
- extern double det;
- if (k == n) {
- for (int i = 0; i < n; i++)
- *(p + i) = *(c + i);
- double a = 1.0;
- for (int i = 0; i < n; i++) {
- a *= *(m + (*(p + i) - 1) * n + i);
- }
- det += pow(-1, inversions(p)) * a;
- }
- else {
- for (int j = k; j < n; j++) {
- swap(k, j);
- calc(k + 1);
- swap(k, j);
- }
- }
- }
- int main(int argc, char *argv[]) {
- extern int n; // matrix size
- extern int *p; // rearrangements
- extern int *c; // canonical sequence
- extern double *m; // matrix
- extern double det;
- printf("РАЗМЕР МАТРИЦЫ = "); scanf("%d", &n);
- putchar('\n');
- p = (int *)malloc(sizeof(int) * n);
- c = (int *)malloc(sizeof(int) * n);
- m = (double *)malloc(sizeof(double) * n * n);
- det = 0.0;
- for (int i = 0; i < n; i++)
- *(c + i) = i + 1;
- for (int i = 0; i < n; i++) {
- printf("---СТРОКА #%d---\n", i + 1);
- for (int j = 0; j < n; j++) {
- printf("столбец #%d = ", j + 1);
- scanf("%lf", m + i * n + j);
- }
- putchar('\n');
- }
- putchar('\n');
- calc(0);
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++)
- printf("%-g ", *(m + i * n + j));
- putchar('\n');
- }
- putchar('\n');
- putchar('\n');
- printf("ОПРЕДЕЛИТЕЛЬ = %g\n", det);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment