Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 4
1

Программа, приводящая матрицу к ступенчатому виду

11.12.2018, 02:57. Показов 2081. Ответов 1

Author24 — интернет-сервис помощи студентам
Не подскажите, где накосячил в программе?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
 
void detFind(int n, int m, double *a, double eps);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    double eps = 0.0000001; //Погрешность
    double *a;
    int n = 3; //Кол-во строк
    int m = 3; //Кол-во столбцов
    a = (double *) malloc(n * m * sizeof(double));
 
    //Вводим массив
    for(int k = 0; k < n; k++)
    {
        for(int l = 0; l < m; l++)
        {
            printf("Введите элемент массива a[%d][%d]: ", k+1, l+1);
            scanf("%lf", &a[k*m + l]);
        }
    }
    system("cls");
    //Выводим массив
    printf("Исходный массив:\n");
    for(int k = 0; k < n; k++)
    {
        for(int l = 0; l < m; l++)
        {
            printf("%lf\t", a[k*m + l]);
        }
        printf("\n");
    }
 
    detFind(n, m, a, eps);
        //Отладка
    printf("\nМассив, приведённый к треугольному виду:\n");
    for(int z = 0; z < n; z++)
    {
        for(int y = 0; y < m; y++)
        {
            printf("%lf\t", a[z*m + y]);
        }
        printf("\n");
    }
    return 0;
}
 
void detFind(int n, int m, double *a, double eps)
{
    int i, j, k, l;
    double max = 0.0; int maxN;
    double r;
    i = j = 0;
 
    while(i < n && j < m)
    {
        //Поиск max по модулю в j-столбике
        for(k = i; k < n; k++)
        {
            if(fabs(a[k*m + j]) > fabs(max))
            {
                max = a[k*m + j]; //Запоминаем max значение
                maxN = k; //Запоминаем строку с max значением
            }
        }
        //Если max < eps => то все элементы столбца = 0 и мы переходим к следующей итерации, т.е. столбику j+1
        if(fabs(max) < eps)
        {
            for(k = j; k < n; k++)
            {
                a[k*m + j] = 0.0;
            }
            j++;
            continue;
        }
 
        //Меняем местами i-строчку с maxN
        for(l = 0; l < m; l++)
        {
            r = a[i*m + l]; //Буферная переменная равна элементы из i строчки
            a[i*m + l] = a[maxN*m + l]; //элемент i-строчки равен maxN
            a[maxN*m + l] = -r; //элемент maxN-строчки равен знач буферной пер, т.е. знач i строчки, с противоп знаком
        }
        //Обнуляем столбец j
        for(k = i + 1; k < n; k++)
        {
            r = -(a[k*m + j]/a[i*m + j]);
            a[k*m + j] = 0.0;
            for(l = j + 1; l < m; l++)
            {
                a[k*m + l] += r*a[i*m + l];
            }
        }
 
    i++;
    j++;
    }
 
return;
}
Добавлено через 9 минут
А именно, почему при выводе элементов приведённого массива вместо нулей стоят минус нули?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2018, 02:57
Ответы с готовыми решениями:

Привести лямбда матрицу к ступенчатому виду
Нужна помощь в приведении матрицы к ступенчатому виду:

Приведение матрицы к ступенчатому виду
При приведении матрицы, когда на главной диагонали нули, то выдает ошибку деления на ноль. Как...

Невозможно преобразовать аргумент. Программа с использованием OpenGL, выводящая и приводящая в движение текст
Ошибка в main при вызове функции &quot;glutDisplayFunc(glPrint);&quot; error C2664: &quot;void...

Привести матрицу к треугольному виду
Написать программу для работы с динамическим целочисленным двумерным массивом, который содержит...

1
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 4
11.12.2018, 03:20  [ТС] 2
И всё же где-то более серьёзная ошибка
Миниатюры
Программа, приводящая матрицу к ступенчатому виду  
0
11.12.2018, 03:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2018, 03:20
Помогаю со студенческими работами здесь

Свести матрицу к треугольному виду
for (int i = 1; i &lt; N; ++i) for (int k = i; k &lt; N; ++k) for (int j = N-1; j &gt;= 0; --j)...

Привести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых...

Свести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых...

Свести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru