Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Не делит на диагональный элемент

15.10.2011, 21:08. Показов 770. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
суть в том что мне надо чтобы все элементы матрицы+ вектор свободных членов были поделены на соответсвующие элементы главной диагонали т.е
все элементы на a[i][j]=a[i][j]/a[i][i]; b[i]=b[i]/a[i][i];
но оно почему-то делит неправильно.
сначала первый элемент на первой строке
второй элемент и первый элемент на второй
первый, второй, третий элемент на третьей
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
static int size = 0;
        static void Main(string[] args)
        {
            Console.WriteLine("Кол-во элементов");
            size = int.Parse(Console.ReadLine());
            Console.WriteLine("Коэф. матрицы");
            double[][] a = new double[size][];
            for (int i = 0; i < size; i++)
                a[i] = new double[size];
            double[] b=new double[size];
            for (int i = 0; i < size; i++)
                for (int j = 0; j < size; j++)
                    a[i][j] = double.Parse(Console.ReadLine());
            Console.WriteLine("Коэф. свобод. чл.");
            for (int i = 0; i < size; i++)
                b[i] = double.Parse(Console.ReadLine());
            Console.WriteLine("Начальная система");
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                    Console.Write("{0}x{1} +", a[i][j], j);
                Console.WriteLine("= {0}", b[i]);
            }
            int k = 0;
            while (k < size)//сортировка строк максимальнодиагональных
            {
                for (int i = size; i >= k + 1; i--)
                    for (int j = k + 1; j < i; j++)
                        if (a[j][k] > a[j - 1][k])
                        {
                            double[] t = (double[])a[j].Clone();
                            a[j] = (double[])a[j - 1].Clone();
                            a[j - 1] = (double[])t.Clone();
                            double kt = b[j];
                            b[j] = b[j - 1];
                            b[j - 1] = kt;
                        }
                k++;
            }
            Console.WriteLine("После перестановки");
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                    Console.Write(a[i][j] + " ");
                Console.WriteLine();
            }
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                    a[i][j] /= a[i][i];
                b[i] /= a[i][i];
            }
            Console.WriteLine("После деления");
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                    Console.Write(a[i][j] + " ");
                Console.WriteLine();
            }
            //........
       }
    }
}
наверное я что-то проглядел....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2011, 21:08
Ответы с готовыми решениями:

Диагональный элемент поместить в переменную
Поместить М в переменную чтоб она не изменялась во время деления M=M/ M. const int RAZM = 200; string temp; ...

В матрице Z (n, n) каждый элемент разделить на диагональный
В матрице Z(n,n) каждый элемент разделить на диагональный,стоящий в том же столбце.

Найдите элемент который делит максимальное значение элементов массива без остатка
Дан целочисленный массив из n элементов. Элементы могут принимать целые значения от 1 до 500. Найдите максимальное значение среди...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2011, 22:47
Цитата Сообщение от Artishok Посмотреть сообщение
надо чтобы все элементы матрицы+ вектор свободных членов были поделены на соответсвующие элементы главной диагонали
Не могу понять что конкретно нужно.

a[0][0] /= a[0][0]
a[0][1] /= a[1][1]
a[0][2] /= a[2][2]
a[0][3] /= a[3][3]
a[1][0] /= a[0][0]
a[1][1] /= a[1][1]
...
Что-то вроде этого?
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.10.2011, 23:12  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Не могу понять что конкретно нужно.

a[0][0] /= a[0][0]
a[0][1] /= a[1][1]
a[0][2] /= a[2][2]
a[0][3] /= a[3][3]
a[1][0] /= a[0][0]
a[1][1] /= a[1][1]
...
Что-то вроде этого?
нет
a[0][0] /=a[0][0]
a[0][1] /=a[0][0]
.......
b[0] /=a[0][0]
a[1][0] /=a[1][1]
a[1][1] /=a[1][1]
......
b[1] /=a[1][1]
a[2][0] /=a[2][2]
a[2][1] /=a[2][2]
.....
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2011, 23:30
В таком случае ваш код все делает правильно.
Я не знаю, какой результат вы ожидаете, но возможно проблема в том, что вы делите на элемент матрицы и тут же записываете новое значение в тот элемент, который будет позже использоваться при делении. То есть при последующих делениях уже будет использоваться новое значение.

Поясню.
Допустим, ести матрица 4х4:
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7

Начинаем делить:
1/1 2/1 3/1 4/1 - Первая строчка, все ОК.
2/3 3/3 4/1 5/1 - Обратите внимание, 4 и 5 делятся уже на единицу, т.к. во втором шаге мы 3 разделили на себя и вписали результат в то же место.
3/4 4/4 5/1 6/1 - То же самое
4/5 5/5 6/1 7/1 - И тут так же

Если проблема в этом, то решается просто:
C#
1
2
3
4
5
6
7
            for (int i = 0; i < size; i++)
            {
                int d = a[i][i]; // Сохраняем значение
                for (int j = 0; j < size; j++)
                    a[i][j] /= d;
                b[i] /= d;
            }
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.10.2011, 23:45  [ТС]
точно. надо было проверку на совпадение индексов поставить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2011, 23:45
Помогаю со студенческими работами здесь

Задана матрица порядка n и число k. Разделить элементы k-й строки на диагональный элемент
Задана матрица порядка n и число k. Разделить элементы k-й строки на диагональный элемент, расположенный в этой строке ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru