Основы программирования


              

Для вычисления абсолютной величины вещественного


рангу исходной матрицы.
Для вычисления абсолютной величины вещественного числа x типа double мы пользуемся стандарной математической функцией fabs(x), описанной в стандартном заголовочном файле "math.h.
#include <stdio.h> // Описания функций ввода-вывода #include <math.h> // Описания математических функций #include <stdlib.h> // Описания функций malloc и free
// Прототип функции приведения матрицы // к ступенчатому виду. // Функция возвращает ранг матрицы int gaussMethod( int m, // Число строк матрицы int n, // Число столбцов матрицы double *a, // Адрес массива элементов матрицы double eps // Точность вычислений );
int main() { int m, n, i, j, rank; double *a; double eps, det;
printf("Введите размеры матрицы m, n: "); scanf("%d%d", &m, &n);
// Захватываем память под элементы матрицы a = (double *) malloc(m * n * sizeof(double));
printf("Введите элементы матрицы:\n"); for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { // Вводим элемент с индексами i, j scanf("%lf", &(a[i*n + j])); } }
printf("Введите точность вычислений eps: "); scanf("%lf", &eps);
// Вызываем метод Гаусса rank = gaussMethod(m, n, a, eps);
// Печатаем ступенчатую матрицу printf("Ступенчатый вид матрицы:\n"); for (i = 0; i < m; ++i) { // Печатаем i-ю строку матрицы for (j = 0; j < n; ++j) { printf( // Формат %10.3lf означает 10 "%10.3lf ", // позиций на печать числа, a[i*n + j] // 3 знака после точки ); } printf("\n"); // Перевести строку }
// Печатаем ранг матрицы printf("Ранг матрицы = %d\n", rank);
if (m == n) { // Для квадратной матрицы вычисляем и печатаем // ее определитель det = 1.0; for (i = 0; i < m; ++i) { det *= a[i*n + i]; } printf("Определитель матрицы = %.3lf\n", det); }
free(a); // Освобождаем память return 0; // Успешное завершение программы }
// Приведение вещественной матрицы // к ступенчатому виду методом Гаусса с выбором // максимального разрешающего элемента в столбце. // Функция возвращает ранг матрицы int gaussMethod( int m, // Число строк матрицы int n, // Число столбцов матрицы double *a, // Адрес массива элементов матрицы double eps // Точность вычислений ) { int i, j, k, l; double r;

Содержание  Назад  Вперед