#include <stdio.h>
#include <stdlib.h>
void choose_primary(int N, double** A, int k, int *det);
void normalize_first_string(int N, double** A, int k);
void deduct(int N, double** A, int k);
void scan_matrix(int N, double **A);
void scan_b(int N, double **A);
void print_extended(int N, double **A);
int main(void) {
int N, i, k, det = 1;
double **A
= malloc(N
*sizeof(double*)); for(i
= 0; i
< N
; A
[i
++] = malloc((N
+ 1) * sizeof(double))); scan_matrix(N, A);
scan_b(N, A);
print_extended(N, A);
for(k = 0; k < N; k++)
{
choose_primary(N, A, k, &det);
det *= A[k][k];
normalize_first_string(N, A, k);
deduct(N, A, k);
}
print_extended(N, A);
return 0;
}
void choose_primary(int N, double** A, int k, int* det)
{
fprintf(stdout
, "choose_primary in\n"); int i, maxi = k;
for(i = k; i < N; i++)
if(A[i][k] > A[maxi][k])
maxi = i;
if(maxi != i)
{
int t;
for(i = k; i < N + 1; i++)
{
t = A[maxi][i];
A[maxi][i] = A[k][i];
A[k][i] = t;
}
*det *= -1;
}
fprintf(stdout
, "choose_primary out\n"); return;
}
void normalize_first_string(int N, double** A, int k)
{
fprintf(stdout
, "normalize_first_string in\n"); if(A[k][k] * A[k][k] > 0.0000000001)
{ int i;
for(i = k + 1; i < N + 1; i++)
A[k][i] /= A[k][k];
A[k][k] = 1;
}
fprintf(stdout
, "normalize_first_string out\n"); return;
}
void deduct(int N, double** A, int k)
{
int i, j;
for(i = k + 1; k < N; i++)
{
for(j = k + 1; j < N + 1; j++)
A[i][j] -= A[k][j] * A[i][k];
// A[i][k] = 0;
}
return;
}
void scan_matrix(int N, double** A)
{
fprintf(stdout
, "scan_matrix in\n"); int i, j;
for(i = 0; i < N; i++)
for(j = 0; j < N; j++)
fprintf(stdout
, "scan_matrix out\n"); return;
}
void scan_b(int N, double** A)
{
int i;
for(i = 0; i < N; i++)
return;
}
void print_extended(int N, double** A)
{
fprintf(stdout
, "print_extended in\n"); int i, j;
printf("Создана матрица %dx%d\n", N
, N
); for(i = 0; i < N; i++)
{
for(j = 0; j < N + 1; j++)
}
fprintf(stdout
, "print_extended out\n"); return;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIAp2b2lkIGNob29zZV9wcmltYXJ5KGludCBOLCBkb3VibGUqKiBBLCBpbnQgaywgaW50ICpkZXQpOwp2b2lkIG5vcm1hbGl6ZV9maXJzdF9zdHJpbmcoaW50IE4sIGRvdWJsZSoqIEEsIGludCBrKTsKdm9pZCBkZWR1Y3QoaW50IE4sIGRvdWJsZSoqIEEsIGludCBrKTsKdm9pZCBzY2FuX21hdHJpeChpbnQgTiwgZG91YmxlICoqQSk7CnZvaWQgc2Nhbl9iKGludCBOLCBkb3VibGUgKipBKTsKdm9pZCBwcmludF9leHRlbmRlZChpbnQgTiwgZG91YmxlICoqQSk7CiAKaW50IG1haW4odm9pZCkgewoJaW50IE4sIGksIGssIGRldCA9IDE7CglzY2FuZigiJWQiLCAmTik7Cglkb3VibGUgKipBID0gbWFsbG9jKE4qc2l6ZW9mKGRvdWJsZSopKTsKCWZvcihpID0gMDsgaSA8IE47IEFbaSsrXSA9IG1hbGxvYygoTiArIDEpICogc2l6ZW9mKGRvdWJsZSkpKTsKCXNjYW5fbWF0cml4KE4sIEEpOwoJc2Nhbl9iKE4sIEEpOwoJcHJpbnRfZXh0ZW5kZWQoTiwgQSk7Cglmb3IoayA9IDA7IGsgPCBOOyBrKyspCgl7CgkJY2hvb3NlX3ByaW1hcnkoTiwgQSwgaywgJmRldCk7CgkJZGV0ICo9IEFba11ba107CgkJbm9ybWFsaXplX2ZpcnN0X3N0cmluZyhOLCBBLCBrKTsKCQlkZWR1Y3QoTiwgQSwgayk7Cgl9CglwcmludF9leHRlbmRlZChOLCBBKTsKCXJldHVybiAwOwp9CiAKdm9pZCBjaG9vc2VfcHJpbWFyeShpbnQgTiwgZG91YmxlKiogQSwgaW50IGssIGludCogZGV0KQp7CglmcHJpbnRmKHN0ZG91dCwgImNob29zZV9wcmltYXJ5IGluXG4iKTsKCWludCBpLCBtYXhpID0gazsKCWZvcihpID0gazsgaSA8IE47IGkrKykKCQlpZihBW2ldW2tdID4gQVttYXhpXVtrXSkKCQkJbWF4aSA9IGk7CglpZihtYXhpICE9IGkpCgl7CgkJaW50IHQ7CgkJZm9yKGkgPSBrOyBpIDwgTiArIDE7IGkrKykKCQl7CgkJCXQgPSBBW21heGldW2ldOwoJCQlBW21heGldW2ldID0gQVtrXVtpXTsKCQkJQVtrXVtpXSA9IHQ7CgkJfQoJCSpkZXQgKj0gLTE7Cgl9CglmcHJpbnRmKHN0ZG91dCwgImNob29zZV9wcmltYXJ5IG91dFxuIik7CglyZXR1cm47Cn0KIAp2b2lkIG5vcm1hbGl6ZV9maXJzdF9zdHJpbmcoaW50IE4sIGRvdWJsZSoqIEEsIGludCBrKQp7CglmcHJpbnRmKHN0ZG91dCwgIm5vcm1hbGl6ZV9maXJzdF9zdHJpbmcgaW5cbiIpOwoJaWYoQVtrXVtrXSAqIEFba11ba10gPiAwLjAwMDAwMDAwMDEpCgl7CWludCBpOwoJCWZvcihpID0gayArIDE7IGkgPCBOICsgMTsgaSsrKQoJCQlBW2tdW2ldIC89IEFba11ba107CgkJQVtrXVtrXSA9IDE7Cgl9CglmcHJpbnRmKHN0ZG91dCwgIm5vcm1hbGl6ZV9maXJzdF9zdHJpbmcgb3V0XG4iKTsKCXJldHVybjsKfQogCnZvaWQgZGVkdWN0KGludCBOLCBkb3VibGUqKiBBLCBpbnQgaykKewoJZnByaW50ZihzdGRvdXQsICJkZWR1Y3QgaW5cbiIpOwoJaW50IGksIGo7Cglmb3IoaSA9IGsgKyAxOyBrIDwgTjsgaSsrKQoJewoJCWZvcihqID0gayArIDE7IGogPCBOICsgMTsgaisrKQoJCQlBW2ldW2pdIC09IEFba11bal0gKiBBW2ldW2tdOwoJCS8vIEFbaV1ba10gPSAwOwoJfQoJZnByaW50ZihzdGRvdXQsICJkZWR1Y3Qgb3V0XG4iKTsKCXJldHVybjsKfQogCnZvaWQgc2Nhbl9tYXRyaXgoaW50IE4sIGRvdWJsZSoqIEEpCnsKCWZwcmludGYoc3Rkb3V0LCAic2Nhbl9tYXRyaXggaW5cbiIpOwoJaW50IGksIGo7Cglmb3IoaSA9IDA7IGkgPCBOOyBpKyspCgkJZm9yKGogPSAwOyBqIDwgTjsgaisrKQoJCQlzY2FuZigiJWxmIiwgJkFbaV1bal0pOwoJZnByaW50ZihzdGRvdXQsICJzY2FuX21hdHJpeCBvdXRcbiIpOwoJcmV0dXJuOwp9CiAKdm9pZCBzY2FuX2IoaW50IE4sIGRvdWJsZSoqIEEpCnsKCWZwcmludGYoc3Rkb3V0LCAic2Nhbl9iIGluXG4iKTsKCWludCBpOwoJZm9yKGkgPSAwOyBpIDwgTjsgaSsrKQoJCXNjYW5mKCIlbGYiLCAmQVtpXVtOXSk7CglmcHJpbnRmKHN0ZG91dCwgInNjYW5fYiBvdXRcbiIpOwoJcmV0dXJuOwp9CiAKdm9pZCBwcmludF9leHRlbmRlZChpbnQgTiwgZG91YmxlKiogQSkKewoJZnByaW50ZihzdGRvdXQsICJwcmludF9leHRlbmRlZCBpblxuIik7CglpbnQgaSwgajsKCXByaW50Zigi0KHQvtC30LTQsNC90LAg0LzQsNGC0YDQuNGG0LAgJWR4JWRcbiIsIE4sIE4pOwoJZm9yKGkgPSAwOyBpIDwgTjsgaSsrKQoJewoJCWZvcihqID0gMDsgaiA8IE4gKyAxOyBqKyspCgkJCXByaW50ZigiJS4xZlx0IiwgQVtpXVtqXSk7CgkJcHJpbnRmKCJcbiIpOwoJfQoJZnByaW50ZihzdGRvdXQsICJwcmludF9leHRlbmRlZCBvdXRcbiIpOwoJcmV0dXJuOwp9