Форум программистов, компьютерный форум CyberForum.ru

Обратная матрица (перестановка строк и столбцов) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти нулевые строки и столбцы в матрице http://www.cyberforum.ru/cpp-beginners/thread1228646.html
Доброго всем дня)) помогите сделать часть кода на проверку строк и столбцов матрицы. Если все элементы строки или столбца нули то => выход из программы Заранее спасибо
C++ Стоит ли использовать std::atomic? Доброго времени суток. Есть переменная в "поток 2" (назовем так) const volatile bool *pbCancelled;, являющаяся указателем на флаг volatile bool iCancel; в "поток 1". Поток 2 запускается после потока 1 и перед использованием указателя выполняется функция void gDrawing_c::bindCancelFlag( const volatile bool *ptrbCancelled ) { http://www.cyberforum.ru/cpp-beginners/thread1228638.html
C++ Пузырьковая сортировка - исправить код
У меня есть массив unsigned char *buffer = new unsigned char. И мне нужно реализовать пузырьковую сортировку (сравниваются значения функции). unsigned char *tmp = new unsigned char; for (int i = 0; i < length; i++) { for (int j = 0; j < length - i - 1; j++) { if (function(buffer, width, j) < function(buffer, width, j+1)) { std::copy(buffer, buffer + j*width,...
Ошибка при динамическом выделении двумерного массива char C++
Ребята, спасите-помогите. Нужно выделить двумерный массив типа char для игрового поля. Выделяю вроде бы как положено, но получаю рантайм ошибку при запуске. Уже больше двух часов парюсь с этим массивом, ума не приложу где может быть ошибка. Перепроверил всё десятки раз. Код конструктора, в котором выделяется массив: GameField::GameField(size_t _sizeX, size_t _sizeY, char _markerP1, char...
C++ Реализовать функцию целочисленного деления для двух линейных двусвязных списков http://www.cyberforum.ru/cpp-beginners/thread1228587.html
Реализовать операцию / (целочисленное деление) для двух длинных натуральных чисел. Операнды должны быть представлены линейными двусвязными списками, информационная часть элементов которых одна цифра числа. #include <iostream> using namespace std; #include <stdlib.h> struct Node { int info; Node *next; Node *prev; };
C++ Как правильно создать условие, в зависимости от слова, которое вводишь в консоль Решил познать великий и могучий с++. Уже в 1ый день пошли косяки. Захотел начать с простой программы, которая в зависимости от ответа да или нет общалась с пользователем через консоль. Только вот как правильно юзать условия в зависимости от того, что пользователь ввел в строку я точно не знаю. Пожалуйста, исправьте или подскажите. #include <iostream> #include <ostream> #include <clocale>... подробнее

Показать сообщение отдельно
B@R_LOG
 Аватар для B@R_LOG
18 / 18 / 0
Регистрация: 03.07.2013
Сообщений: 49
17.07.2014, 18:03     Обратная матрица (перестановка строк и столбцов)
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
105
106
107
108
109
110
111
112
113
114
115
116
#include "stdafx.h" // for Visual Studio
#include "iostream"
using namespace std;
/* Как сделать сортировку столбцов матрицы?
1. если у меня по главной диагонали есть нуль, надо вместо этого столбца (где есть нуль)
поставить столбец без нуля, а тот столбец на место этого. 
0 7 0           7 0 0
0 0 4   =>      0 0 4
5 0 0           0 5 0
2. для этой матрицы обратной не существует,если ее преобразовывать,
а вот если поменять строки местами и получить матрицу
7 0 0
0 4 0
0 0 5
*/
//random
#include <conio.h>
#include <stdlib.h>
 
double ** creat_array2d(int m, int n)
{
    double* *array2d;
    array2d = new double*[m];
    for (int i = 0; i<m; i++)
        array2d[i] = new double[n];
    return array2d;
}
//=======================================
void delete_array2d(double **array2d, int m)
{
    for (int i = 0; i<m; i++)
        delete[] array2d[i];
    delete[] array2d;
}
//=======================================
 
void checking(double* *array2d, int m, int n)
{
    for (int i = 0; i<m; i++)
    {
        for (int j = 0; j<(n - 1); j++)
            cout << "a[" << i + 1 << "," << j + 1 << "]= " << array2d[i][j] << "    ";
        cout << "b[" << i + 1 << "]= " << array2d[i][n - 1];
        cout << endl;
    }
}
 
//=======================================
int random(int N) { return rand() % N; }
 
//=======================================
void input_array2d(double* *array2d, int m, int n)
{
    cout << "You are welcomed by the program of input of numerical values." << endl;
    cout << "If you want to enter them - enter '1', differently '2'." << endl;
    char key = '0';
    do { cin >> key; } while ((key != '1') && (key != '2'));
 
    if (key == '1')
    {
        cout << endl << endl << "Please, enter unknown persons consistently from left to right." << endl;
        for (int i = 0; i<m; i++)
            for (int j = 0; j<n; j++)
                cin >> array2d[i][j];
    }
    else
    {
        for (int i = 0; i<m; i++)
            for (int j = 0; j<n; j++)
                array2d[i][j] = random(100);
        cout << endl << endl << "Numerical values in system of the linear equations have been set in a random way." << endl;
        checking(array2d, m, n);
    }
    cout << endl;
}
 
int main()
{
    int n = -1;
    cout << "Please, enter size of the matrix (n*n) " << endl;
    while (n < 1)
        if (cin >> n)  {/* */ } else { cin.clear(); n = -1; }
    
    //Allocation of memory for a two-dimensional array of dimension m on n.
    double **array2d = creat_array2d(n, n);
    input_array2d(array2d, n, n);
    checking(array2d, n, n);
 
    // проверяем диагональные элементы
    for (int i = 0; i < n; i++) 
            if (array2d[i][i] == 0)   //нашли столбец, у которого диагональный элемент = 0
            {  
                // ищем столбец, на который можно заменить
                int num = -1;
                for (int j = 0; j < n; j++)
                    if (array2d[i][j] != 0)  { num = j; j = n; }
                if (num == -1)  {/* нет такого столбца */}
                else // меняем местами
                {
                    int z;
                    for (int k = 0; k < n; k++)
                    {
                        z = array2d[k][i];
                        array2d[k][i] = array2d[k][num];
                        array2d[k][num] = z;
                    }
                }
                
            }
        
            
    cout << endl;
    checking(array2d, n, n);
    delete_array2d(array2d, n);
    system("pause");
}
Первый пункт работает, во втором - идея аналогична.
По реализации: нужно проверять, что мы при следующем проходе не меняем обратно столбцы, что меняли ранее.
Матрица для теста:
0 1 0
0 1 0
1 1 1
 
Текущее время: 15:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru