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

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

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

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

16.01.2014, 13:40. Просмотров 1087. Ответов 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 13:40     Сделать симметричную матрицу несимметричной. Где ошибка?
Посмотрите здесь:

C++ КАК СОСТАВИТЬ МАТРИЦУ, СИММЕТРИЧНУЮ ДАННОЙ!!!
C++ Получить действительную матрицу С{c[i][j]} где i=1,2,...,20; j=1,2,...,10 по правилу: c[i][j]=a[j]/(1+|b[i]|).
C++ Отсортировать матрицу и снова сделать из нее начальную матрицу
C++ Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка)
C++ Получить матрицу A(B-E)+C, где Е-единичная матрица порядка n, а элементы матрицы C вычисляются по формуле
C++ Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил)
Создать программу выводящую симметричную матрицу на экран C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.01.2014, 14:27     Сделать симметричную матрицу несимметричной. Где ошибка? #2
Цитата Сообщение от triish Посмотреть сообщение
условие: условие: дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не симметричной, сдвинув строку, содержащую элемент с максимальным значением на 1 элемент вправо.
-------------------------------------------
Если строку на один элемент она станет не эквивалентной предыдущей. Так и надо?
S_el
2087 / 1594 / 305
Регистрация: 15.12.2013
Сообщений: 6,376
16.01.2014, 14:29     Сделать симметричную матрицу несимметричной. Где ошибка? #3
Сделал проверку на симметричность:
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>
using namespace std;
 
bool func_simmetr(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 cout<<"Simmetru4na";
 
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;
}
Ev_Hyper
Заблокирован
16.01.2014, 14:30     Сделать симметричную матрицу несимметричной. Где ошибка? #4
C++
1
2
3
4
5
6
  for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 3; j++) {
            z[i][j]=z[i][j+1];
        }
               }
обращение к элементу с индексом z[i][3]
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 14:44  [ТС]     Сделать симметричную матрицу несимметричной. Где ошибка? #5
Цитата Сообщение от Enotniy Посмотреть сообщение
Если строку на один элемент она станет не эквивалентной предыдущей. Так и надо?
строку то надо только одну сдвинуть.
ну например, если матрица
123
256
369
то должно получиться
123
256
936

Добавлено через 2 минуты
спасибо.
Цитата Сообщение от S_el Посмотреть сообщение
Сделал проверку на симметричность:
а из моей ничего нельзя уже сделать что бы норм работала?

Добавлено через 1 минуту
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
обращение к элементу с индексом z[i][3]
спасибо, но почему именно с этим индексом?
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.01.2014, 15:07     Сделать симметричную матрицу несимметричной. Где ошибка? #6
вот ваш код по правленный

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
#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;
        }
    }
}
 
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 main()
{
    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 
        {
            cout<<"Simmetru4na";
 
 
        int imax = -1;
        int jmax = -1;
        int max= mas[0][0];
 
 
        for(int i = 0; i < n; ++i)
        {
            for(int j = 0; j < n; ++j)         
            {
                if (mas[i][j] >= max)
                {
                    max=mas[i][j];
                    imax=i;
                    jmax=j;
 
                } 
            }
        }
 
        cout << "max = " << max << " pos = " << imax << " " << jmax<< endl;     
 
 
 
        int tmp =mas[imax][0];
        for (int j = 0; j < n-1; j++) 
        {
            mas[imax][j]=mas[imax][j+1];
        }
        mas[imax][n-1] = tmp;
 
 
        // zz[2][0]=z[2][2];
        //  zz[2][1]=z[2][0];
        // zz[2][2]=z[2][1];
 
 
        for(int i = 0; i < n; i++)
        {
            for(int j= 0; j < n; j++)
                cout << mas[i][j];
            cout << '\n';
        }
    }
    system("pause");
}
Ev_Hyper
Заблокирован
16.01.2014, 15:29     Сделать симметричную матрицу несимметричной. Где ошибка? #7
Цитата Сообщение от triish Посмотреть сообщение
спасибо, но почему именно с этим индексом?
потому, что у вас максимальный объявленный индекс - 2
S_el
2087 / 1594 / 305
Регистрация: 15.12.2013
Сообщений: 6,376
16.01.2014, 15:30     Сделать симметричную матрицу несимметричной. Где ошибка? #8
Цитата Сообщение от triish Посмотреть сообщение
а из моей ничего нельзя уже сделать что бы норм работала?
Можно,но зачем?

Цитата Сообщение от Enotniy Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
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;
        }
    }
}
Это лишнее.
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 16:54  [ТС]     Сделать симметричную матрицу несимметричной. Где ошибка? #9
Цитата Сообщение от Enotniy Посмотреть сообщение
вот ваш код по правленный
выводит, что матрица симметрична.
выводит максимальное значение и индекс(неправильно выводит)
и после этого не выводит больше ничего.
а должен после всего этого еще и матрицу вывести, где строка сдвинута с максимальным значением.

(все равно спасибо)

Добавлено через 45 секунд
Цитата Сообщение от S_el Посмотреть сообщение
Это лишнее.
ну так а почему лишнее?
(просто интересно)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.01.2014, 16:59     Сделать симметричную матрицу несимметричной. Где ошибка? #10
Для проверки на симметричность, транспонировать целиком не надо, достаточно сравнить элементы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool cheack(int zt[3][3])
{
 int i, j;
 for (i=1; i<3; ++i)
 {
  for (j=0; j<i; +j)
  {
   if (zt[i][j]!=zt[j][i])
   {
    return false;
   }
  }
 }
 return true;
}
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 17:04  [ТС]     Сделать симметричную матрицу несимметричной. Где ошибка? #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Для проверки на симметричность, транспонировать целиком не надо, достаточно сравнить элементы.
препод требует, что бы не было никаких отдельных функций что бы их потом вызывать в мэйне.
он говорит, что программа вообще должна быть в два цикла.
(ну и естественно все это надо будет делать в мэйне.а не отдельно функциями)



спасибо.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.01.2014, 17:05     Сделать симметричную матрицу несимметричной. Где ошибка? #12
Цитата Сообщение от triish Посмотреть сообщение
препод требует, что бы не было никаких отдельных функций что бы их потом вызывать в мэйне.
он говорит, что программа вообще должна быть в два цикла.
(ну и естественно все это надо будет делать в мэйне.а не отдельно функциями)
В два цикла и проверку, и поиск, и ещё сдвиг не сделаешь, надо минимум 5.
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 17:07  [ТС]     Сделать симметричную матрицу несимметричной. Где ошибка? #13
я тоже это прекрасно знаю.
но он идиот.
я все равно сделаю по-своему.
но хотя бы расписать все это в мэйне.

Цитата Сообщение от taras atavin Посмотреть сообщение
В два цикла и проверку, и поиск, и ещё сдвиг не сделаешь, надо минимум 5.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.01.2014, 17:13     Сделать симметричную матрицу несимметричной. Где ошибка? #14
Цитата Сообщение от triish Посмотреть сообщение
но хотя бы расписать все это в мэйне.
А это не сложно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i, j;
bool flag;
for (i=1, flag=true; i<3; ++i)
{
 for (j=0; j<i; +j)
 {
  if (zt[i][j]!=zt[j][i])
  {
   flag=false;
   i=3;
   break;
  }
 }
}
Добавлено через 2 минуты
Даже если вложенные не считать, три циклические подзадачи, три цикла.
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 17:18  [ТС]     Сделать симметричную матрицу несимметричной. Где ошибка? #15
так у меня, получается, почти вся программа, будет в этом цикле.
потому что если матрица симметрична, то мы совершаем действие из условия.
а если нет, то ничего.

Цитата Сообщение от taras atavin Посмотреть сообщение
А это не сложно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i, j;
bool flag;
for (i=1, flag=true; i<3; ++i)
{
 for (j=0; j<i; +j)
 {
  if (zt[i][j]!=zt[j][i])
  {
   flag=false;
   i=3;
   break;
  }
 }
}
Добавлено через 2 минуты
Даже если вложенные не считать, три циклические подзадачи, три цикла.
taras atavin
Ушёл с форума.
3569 / 1752 / 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] - и матрица проверена вся. Не все элементы, а именно матрица, как целое.
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] - и матрица проверена вся. Не все элементы, а именно матрица, как целое.
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.01.2014, 21:46     Сделать симметричную матрицу несимметричной. Где ошибка? #18
triish, Чем вам моё решение не нравится? по моему всё по условию. Сдвигает если симметричная. М/б я не понял, что-то в условии. по моему всё работает
triish
1 / 1 / 0
Регистрация: 16.01.2014
Сообщений: 44
16.01.2014, 22:00  [ТС]     Сделать симметричную матрицу несимметричной. Где ошибка? #19
да нет, мне все нравится.
спасибо большое, что вообще взялись помогать.
мне просто надо очень срочно. а я сижу уже который день, не получается.

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

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

Цитата Сообщение от Enotniy Посмотреть сообщение
triish, Чем вам моё решение не нравится? по моему всё по условию. Сдвигает если симметричная. М/б я не понял, что-то в условии. по моему всё работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2014, 22:23     Сделать симметричную матрицу несимметричной. Где ошибка?
Еще ссылки по теме:

C++ Смоделировать на компьютере последовательность бросаний несимметричной монеты
C++ Сформировать новую матрицу В, изъяв из матрицы А строки, где находится минимальное значение
C++ Построить симметричную матрицу и упорядочить ее по возрастанию
C++ Сформировать симметричную матрицу из элементов, лежащих выше главной диагонали исходной
C++ Вычислить матрицу А в n-степени, где n - натуральное число

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

Или воспользуйтесь поиском по форуму:
S_el
2087 / 1594 / 305
Регистрация: 15.12.2013
Сообщений: 6,376
16.01.2014, 22:23     Сделать симметричную матрицу несимметричной. Где ошибка? #20
Цитата Сообщение от triish Посмотреть сообщение
только я начала ее проверять.
условие симметричности не работает до конца.
даже если матрица не симметрична, он пишет, что она симметрична.
Пример,где моя функция не сработала?
Yandex
Объявления
16.01.2014, 22:23     Сделать симметричную матрицу несимметричной. Где ошибка?
Ответ Создать тему
Опции темы

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