Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Andaluz
0 / 0 / 0
Регистрация: 12.12.2017
Сообщений: 47
1

Работа с for и матрицами

12.12.2017, 20:00. Просмотров 757. Ответов 10
Метки нет (Все метки)

Помогите пожалуйста, есть задача: Дана матрица 8х8, нужно поделить каждый элемент столбца на элемент этого же столбца, который находится на главной диагонали, если этот элемент == 0.
Когда я писал программу, то у меня выходила ровно половина - или под главной диагоналлю, либо над.
Вот мой код:
C++
1
2
3
4
5
6
for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            if (A[i][i] != 0)
                A[i][j] = A[i][j] / A[i][i];
        }
Так же интересует как в этой же матрице находить максимальный элемент в каждом столбце и делать весь столбец на найденный элемент. Вообще было бы не плохо объяснить мне, новичку, как это работает. Буду очень признателен.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2017, 20:00
Ответы с готовыми решениями:

Работа с матрицами
Всем привет. У меня возникла не большая проблема. Никак не могу разобраться со...

Работа с матрицами
Мне необходимо заполнить матрицу размера 9 на 9 случайными числами и повернуть...

Работа с матрицами
#include&lt;iostream&gt; #include &quot;math.h&quot; using namespace std; double...

работа с матрицами в файлах
Люди, помогите сделать задачи, очень прошу на языке С Задача 1. Дан файл...

Работа с двухмерными матрицами
Дана квадратная матрица целых чисел размером NxM. N - нечетное число от 5 до...

10
nmcf
6412 / 5673 / 2582
Регистрация: 14.04.2014
Сообщений: 24,016
12.12.2017, 20:31 2
C++
1
2
            if (A[j][j] != 0)
                A[i][j] /= A[j][j];
1
Andaluz
0 / 0 / 0
Регистрация: 12.12.2017
Сообщений: 47
12.12.2017, 20:51  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
if (A[j][j] != 0)
* * * * * * * * A[i][j] /= A[j][j];
Увы, но эффект тот же - делит ровно половину.
0
nmcf
6412 / 5673 / 2582
Регистрация: 14.04.2014
Сообщений: 24,016
12.12.2017, 21:22 4
Ты сами диагональные элементы-то пропускай. Добавь условие соответствующие.
1
Andaluz
0 / 0 / 0
Регистрация: 12.12.2017
Сообщений: 47
12.12.2017, 22:14  [ТС] 5
Цитата Сообщение от nmcf Посмотреть сообщение
Ты сами диагональные элементы-то пропускай. Добавь условие соответствующие.
C++
1
2
if (A[i][i] != 0 && A[i][j]!=A[j][j])
                A[i][j] /= A[i][i];
Вторая часть в условии вообще игнорируется. Или я что-то не так пишу?
0
Kuzia domovenok
2436 / 2144 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 1
12.12.2017, 22:24 6
C++
1
&& i !=j
1
Andaluz
0 / 0 / 0
Регистрация: 12.12.2017
Сообщений: 47
12.12.2017, 22:31  [ТС] 7
Все равно делит ровно половину, при том даже вместе с диагональными элементами.
Вот код полный на всякий случай:
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
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
    const int n = 8;
    float A[n][n];
    float min = -10, max = 40;
    srand(time(0));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            A[i][j] = min + (rand() % (int)(max - min + 1));
            cout << A[i][j] << '\t';
        }
            cout << endl;
        }
    cout << endl << endl;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            if (A[j][j] != 0)
                A[i][j] /= A[j][j];
        }
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            if (A[i][i] != 0 && i != j)
                A[i][j] /= A[i][i];
        }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << A[i][j] << '\t';
        cout << endl;
    }
    system("pause");
    return 0;
}
0
Kuzia domovenok
2436 / 2144 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 1
12.12.2017, 22:37 8
Лучший ответ Сообщение было отмечено Andaluz как решение

Решение

Зачем тут строки 20-25 если есть двадцать шестая и далее?!
1
Andaluz
0 / 0 / 0
Регистрация: 12.12.2017
Сообщений: 47
12.12.2017, 22:41  [ТС] 9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Зачем тут строки 20-25 если есть двадцать шестая и далее?!
Хороший вопрос) Забыл удалить еще когда делал в 2 цикла.
Теперь все вроде бы выходит, благодарю.
Можна теперь объяснить это: "Так же интересует как в этой же матрице находить максимальный элемент в каждом столбце и делать весь столбец на найденный элемент. Вообще было бы не плохо объяснить мне, новичку, как это работает. Буду очень признателен."?
0
Kuzia domovenok
2436 / 2144 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 1
12.12.2017, 22:50 10
C++
1
2
3
4
5
6
7
8
9
10
   for (int i = 0; i < n; i++){
        float max=A[0][i];
        for (int j = 1; j < n; j++)
        {
            if (A[j][i]>max)
                max= A[j][i];
        } 
        for (int j = 0; j < n; j++)
             A[j][i]/=max;
}
1
Andaluz
0 / 0 / 0
Регистрация: 12.12.2017
Сообщений: 47
12.12.2017, 23:56  [ТС] 11
Огромное спасибо!
0
12.12.2017, 23:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2017, 23:56

Работа с матрицами. Ошибочка
class matrix{ private: double **Matrix; int Rows, Cells; public:...

Работа с файлами и матрицами
Всем здравствуйте! У меня есть проблема. Имеется такое задание: В заданной...

Работа с матрицами - завал(с++)
Необходимо сформировать и обработать двумерных массивов. Значение элементов...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru