Задача заключается в том, что нужно найти ранг матрицы с помощью элементарных преобразований. Я в. начале привожу её к ступенчатому виду. При к = 0;1 все работает, а дальше выводит нули. Что делать?
#include "stdio.h"
#include "stdlib.h"
double **input_matrix(double **A, int l, int c) {
double x = 1;
A = (double **) malloc(l * sizeof(double *));
for (int i = 0; i < l; ++i) {
A[i] = (double *) malloc(c * sizeof(double));
for (int j = 0; j < c; ++j) {
// double x;
// scanf("%lf", &x);
A[i][j] = x;
++x;
}
}
for (int i = 0; i < l; ++i) {
for (int j = 0; j < c; ++j) {
printf("%lf ", A[i][j]);
}
printf("\n");
}
printf("\n");
return A;
}
double **trans_matrix(double **A, int l, int c) {
double **B = (double **) malloc(c * sizeof(double *));
for (int i = 0; i < c; ++i) {
B[i] = (double *) malloc(l * sizeof(double));
}
for (int i = 0; i < l; ++i) {
for (int j = 0; j < c; ++j) {
B[j][i] = A[i][j];
}
}
return B;
}
void print_matrix(double **A, int l, int c) {
for (int i = 0; i < l; ++i) {
for (int j = 0; j < c; ++j) {
printf("%lf ", A[i][j]);
}
printf("\n");
}
}
void free_matrix(double **A, int l) {
for (int i = 0; i < l; ++i) {
free(A[i]);
}
free(A);
}
double **rang_matrix(double **A, int l, int c) {
for (int i = 0; i < c; ++i) {
if (A[i][i] == 0) {
} else {
for (int j = i + 1; j < l; ++j) {
double temp = A[j][i] / A[i][i];
for (int k = 0; k < c; ++k) {
A[j][k] = A[j][k] - (temp * A[i][k]);
}
}
}
}
return A;
}
int main() {
int l, c;
printf("Enter the number of line: ");
scanf("%d", &l);
printf("Enter the number of column: ");
scanf("%d", &c);
double **A = input_matrix(A, l, c);
// double **B = trans_matrix(A, l, c);
// print_matrix(B, c, l);
A = rang_matrix(A, l, c);
print_matrix(A, l, c);
// free_matrix(B, c);
free_matrix(A, l);
return 0;
}