Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
#1

Сделать симметричную матрицу несимметричной. Где ошибка? - C++

16.01.2014, 13:40. Просмотров 1176. Ответов 31
Метки нет (Все метки)

условие: условие: дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не симметричной, сдвинув строку, содержащую элемент с максимальным значением на 1 элемент вправо.
-------------------------------------------

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

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
#include<iostream>
#include<iomanip>
 
using namespace std;
 
 
void transpose(int zt[3][3])
{
    int t;
    for(int i = 0; i < 3; i++)
    {
        for(int j = i; j < 3; j++)         //процедура транспонирования матрицы
        {
            t = zt[i][j];
            zt[i][j] = zt[j][i];
            zt[j][i] = t;
        }
    }
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
 
    cout<<"fedor\n";
 
    int z[3][3] = {{1,1,3},
                   {2,5,6},
                   {3,6,9}};
 
    int z_new[3][3]; //транспонированная матрица
 
       for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)         
        {
            z_new[i][j]=z[i][j];
        }
       }
 
       transpose(z_new); //транспонируем матрицу
 
        for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 3; j++)//выводим транспонированную матрицу
 
            cout << z_new[i][j];
            cout << '\n' ; 
       }
 
       for(int i=0;i<3;i++)
        {
                for(int j=0;j<3; j++) {
                
                        if (z[i][j]==z_new[i][j]) {
 
 
    int imax = -1;
    int jmax = -1;
    int max;
    max= z[0][0]; // считаем, что первый элемент массива - максимальный
 
       for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)         
        {
            if (z[i][j] >= max) {
                max=z[i][j];
                imax=i;
                jmax=j;
 
} 
        }
       }
                cout << "max = " << max << " pos = " << imax << " " << jmax<< endl;     
        
 
     
   
             // zz[3][3]; //выводимая матрица на консоль(конечная)
             int m=3;
             int n=3;
 
                for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 3; j++) {
            z[i][j]=z[i][j+1];
        }
               }
 
    
          // zz[2][0]=z[2][2];
           //  zz[2][1]=z[2][0];
            // zz[2][2]=z[2][1];
             
 
        for(int n = 0; n < 3; n++)
    {
        for(int m = 0; m < 3; m++)
            cout << z[n][m];
        cout << '\n';
       }
                        }
                }
       }
       system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 13:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сделать симметричную матрицу несимметричной. Где ошибка? (C++):

КАК СОСТАВИТЬ МАТРИЦУ, СИММЕТРИЧНУЮ ДАННОЙ!!! - C++
Дана квадратная матрица А. Как составить матрицу, симметричную данной относительно побочной диагонали, и записать на месте данной? Язык С....

Построить симметричную матрицу и упорядочить ее по возрастанию - C++
заданы два целых массивы чисел A(n), n&lt;=300 B(m), m&lt;=300. Разработать программу, которая строит симметричную разницу A\B\bigcupB\A и...

Создать программу выводящую симметричную матрицу на экран - C++
Помогите пожалуйста !

Сформировать симметричную матрицу из элементов, лежащих выше главной диагонали исходной - C++
Сформировать из элементов А, лежащих на главной диагонали и над ней, симметричную матрицу С (квадратная матрица С -симметричная, если Сij =...

Отсортировать матрицу и снова сделать из нее начальную матрицу - C++
значит условие таково: с клавиатуры вводится ряд чисел, его нужно занести в матрицу 6х6, потом отсортировать матрицу и снова сделать из нее...

Смоделировать на компьютере последовательность бросаний несимметричной монеты - C++
Смоделировать на компьютере последовательность бросаний несимметричной монеты. Смещение центра тяжести монеты задается величиной p, 0&lt;p&lt;1,...

31
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.01.2014, 18:04 #16
Цитата Сообщение от triish Посмотреть сообщение
так у меня, получается, почти вся программа, будет в этом цикле.
потому что если матрица симметрична, то мы совершаем действие из условия.
а если нет, то ничего.
Проверить надо всю матрицу, не совпадать могут zt[2][1] и zt[1][2], пока вся не проверена двигать нельзя. Но при этом первое же обнаруженное неравенство даже zt[1][0] и zt[0][1] - и матрица проверена вся. Не все элементы, а именно матрица, как целое.
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 19:39  [ТС] #17
почему?


Цитата Сообщение от taras atavin Посмотреть сообщение
Проверить надо всю матрицу, не совпадать могут zt[2][1] и zt[1][2], пока вся не проверена двигать нельзя. Но при этом первое же обнаруженное неравенство даже zt[1][0] и zt[0][1] - и матрица проверена вся. Не все элементы, а именно матрица, как целое.
0
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.01.2014, 21:46 #18
triish, Чем вам моё решение не нравится? по моему всё по условию. Сдвигает если симметричная. М/б я не понял, что-то в условии. по моему всё работает
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 22:00  [ТС] #19
да нет, мне все нравится.
спасибо большое, что вообще взялись помогать.
мне просто надо очень срочно. а я сижу уже который день, не получается.

только я начала ее проверять.
условие симметричности не работает до конца.
даже если матрица не симметрична, он пишет, что она симметрична.

потом он должен найти максимальное значение.
он его находит, но неправильное. и индекс неправильный.
потом он еще раз выводит это неправильное максимальное значение и больше ничего.
а матрицу, где сдвиг строки должен быть, он не выводит.

Цитата Сообщение от Enotniy Посмотреть сообщение
triish, Чем вам моё решение не нравится? по моему всё по условию. Сдвигает если симметричная. М/б я не понял, что-то в условии. по моему всё работает
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
16.01.2014, 22:23 #20
Цитата Сообщение от triish Посмотреть сообщение
только я начала ее проверять.
условие симметричности не работает до конца.
даже если матрица не симметрична, он пишет, что она симметрична.
Пример,где моя функция не сработала?
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 23:22  [ТС] #21
матрицу ввожу, я знаю, что она не семмитрична.
он пишет, что она симметрична.

или тебе скрин сделать?

Цитата Сообщение от S_el Посмотреть сообщение
Пример,где моя функция не сработала?
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
16.01.2014, 23:26 #22
Цитата Сообщение от triish Посмотреть сообщение
или тебе скрин сделать?
Зачем,набери здесь.
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
17.01.2014, 00:15  [ТС] #23
ввожу матрицу:
1 1 3
2 5 6
3 6 9

выводит: симметрична
max- 1
pos - 0 0
1

========
это ведь неправильно
Цитата Сообщение от S_el Посмотреть сообщение
Зачем,набери здесь.
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
17.01.2014, 00:40 #24
Цитата Сообщение от triish Посмотреть сообщение
ввожу матрицу:
1 1 3
2 5 6
3 6 9
выводит: симметрична
Мой вариант выводит:
Кликните здесь для просмотра всего текста
Vvedute n
3
1
1
3
2
5
6
3
6
9
Matrica ne simmetru4na
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
17.01.2014, 00:43  [ТС] #25
почему тогда у меня не работает???
и почему там 10 элементов, когда если 3х3, то 9?


Цитата Сообщение от S_el Посмотреть сообщение
Мой вариант выводит:
Кликните здесь для просмотра всего текста

Matrica ne simmetru4na
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
17.01.2014, 00:45 #26
Цитата Сообщение от triish Посмотреть сообщение
и почему там 10 элементов, когда если 3х3, то 9?
Первое число размерность.Смотрите на код.
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
17.01.2014, 01:21  [ТС] #27
извиняюсь, туплю.

а сдвиг строки точно верный?
ввела:
1 2 3
2 5 6
3 6 9

вывел:
1 2 3
2 5 6
6 3 9

хотя по идеи должен был вывести
1 2 3
2 5 6
9 3 6


Цитата Сообщение от S_el Посмотреть сообщение
Первое число размерность.Смотрите на код.
0
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
17.01.2014, 08:46 #28
Цитата Сообщение от triish Посмотреть сообщение

потом он должен найти максимальное значение.
он его находит, но неправильное. и индекс неправильный..
а по-моему правильно, просто индекс 2 2 значит, что элемент в третьем столбце и третьей строке ( индекс с нуля идёт)
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
17.01.2014, 10:36 #29
Цитата Сообщение от triish Посмотреть сообщение
вывел:
1 2 3
2 5 6
6 3 9
Неправильно вывел,ищите ошибку.

Добавлено через 42 минуты
Попробуйте так:

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
#include "stdafx.h"
# include <iostream>
using namespace std;
 
bool func_simmetr(double **arr,const int &n);
void func_sdvig(double **arr,const int &n);
 
int _tmain(int argc, _TCHAR* argv[])
{
int n,i,j;
double **mas;
cout<<"Vvedute n"<<endl;
cin>>n;
mas=new double*[n];
 
for(i=0;i<n;i++)
{
mas[i]=new double[n];
}
 
for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    cin>>mas[i][j]; 
}
 
if(!func_simmetr(mas,n)) cout<<"Matrica  ne simmetru4na"<<endl;
else func_sdvig(mas,n);
 
cin.get();
cin.get();
 
}
 
bool func_simmetr(double **arr,const int &n)
{
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(arr[i][j]!=arr[j][i]) return false;
    return true;
}
void func_sdvig(double **arr,const int &n)
{
    int i,j,max_index1=0;
    double temp=arr[0][0];
    cout<<" Do"<<endl;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cout<<arr[i][j]<<"  ";
        }
    cout<<endl;
    }
 
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(arr[i][j]>temp)
            {
                temp=arr[i][j];
                max_index1=i;
            }
 
    for(int i=0;i<n;i++)
    {
        if(i==0)
        {
        temp=arr[max_index1][i+1];
        arr[max_index1][i+1]=arr[max_index1][i];
        }
        else if(i!=0 && i!=n-1)
        {
            arr[max_index1][0]=arr[max_index1][i+1];
            arr[max_index1][i+1]=temp;
            temp=arr[max_index1][0];
        }
        if(n==2)
        {
            arr[max_index1][0]=temp;
        }
        
    }
        cout<<endl<<" Posle "<<endl;
    for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        cout<<arr[i][j]<<"  ";
    }
    cout<<endl;
}
 
 
}
0
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
17.01.2014, 22:58  [ТС] #30
индекс да, правильный.
это у меня вчера все лагало жутко.

а вот сдвиг действительно делает неправильно.
Цитата Сообщение от Enotniy Посмотреть сообщение
а по-моему правильно, просто индекс 2 2 значит, что элемент в третьем столбце и третьей строке ( индекс с нуля идёт)
0
17.01.2014, 22:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 22:58
Привет! Вот еще темы с ответами:

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка) - C++
задан текст нужно вывести на экран количество слов где первая и последняя буквы одинаковы #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил) - C++
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Получить действительную матрицу С{c[i][j]} где i=1,2,...,20; j=1,2,...,10 по правилу: c[i][j]=a[j]/(1+|b[i]|). - C++
В общем у меня огромная проблема- я совсем не могу вникнуть в Си. Учусь на 1 курсе и вроде учат нормально, но все равно ничего понять не...

Вычислить матрицу А в n-степени, где n - натуральное число - C++
Вычислить матрицу А в n-степени, где n - натуральное число. Запутался, что писал дальше, помогите, пожалуйста. #include&lt;iostream&gt; ...


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

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

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