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

Определить симметричность матрицы испльзуя указатели - C++

Восстановить пароль Регистрация
 
 
Алена_Коваленко
Заблокирован
23.05.2014, 23:31     Определить симметричность матрицы испльзуя указатели #1
Задание, определить симметричность матрицы с помощью указателей.
Не могу никак разобраться с указателями, но что-то написала (просьба не смеяться )
Меня интересует как обратится к элементам матрицы что бы сравнить их.
p.s. Программа не работает, все время пишет что матрица симметрична.
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
#include <iostream>
#include <conio.h>
 
using namespace std;
int main()
{
 
 setlocale(LC_ALL, "");     
 int m[4][4]; 
 int *p=&m[0][0];;
 for (int i=0; i<4; i++)
     {  
          for (int j=0; j<4; j++)
              {
                   cout <<i <<""<<j<< ": ";
                   cin >> m[i][j] ;                         
              }
     }
 cout << "Ââîä îêîГ*Г·ГҐГ*"<< endl;
cout << "ГЊГ*òðèöГ* èìååò ГўГЁГ¤: " << endl;
 for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
           { cout << m[i][j] << "\t";
            }
            cout << endl;
    }    
 if (p[1]!=p[4] & p[2]!=p[8] & p[3]!=p[12] & p[6]!=p[9] & p[7]!=p[13] & p[11]!=p[14])
 cout << "ГЌГҐ ñèììåòðè÷Г*Г*";  
    else cout<< "Ñèììåòðè÷Г*Г*";
    
 _getch();
 return 0;   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 23:31     Определить симметричность матрицы испльзуя указатели
Посмотрите здесь:

C++ Проверка квадратной матрицы на симметричность
C++ Проход матрицы используя указатели
симметричность матрицы C++
C++ Матрицы и указатели
C++ Вывод динамической матрицы через указатели
Симметричность матрицы C++
C++ Матрицы и указатели (найти такие k, что k-я строка матрицы совпадает с k-м столбцом; 2) найти сумму элементов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
23.05.2014, 23:53     Определить симметричность матрицы испльзуя указатели #2
только что проверял, вводил цифры от 0 до 9 и обратно, пишет не симметрична
Алена_Коваленко
Заблокирован
23.05.2014, 23:54  [ТС]     Определить симметричность матрицы испльзуя указатели #3
Q1, да, перепутала. Пишет что не симметрична в любом случае.
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
23.05.2014, 23:56     Определить симметричность матрицы испльзуя указатели #4
заполните матрицу так, чтоб элемент 0,1 был равен элементу 1,0, 0,2 = 2,0 и так далее, мне пишет симметрична, всё Вы правильно разобрались)
Алена_Коваленко
Заблокирован
23.05.2014, 23:57  [ТС]     Определить симметричность матрицы испльзуя указатели #5
Q1, она почему-то по разному пишет. Теперь с единицами симметрична, а дальше ввожу разные числа и опять - симметрична.
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
24.05.2014, 00:15     Определить симметричность матрицы испльзуя указатели #6
вроде бы после замены 28 сроки на
C++
1
if (*(p+1)!=*(p+4) || *(p+2)!=*(p+8) || *(p+3)!=*(p+12) || *(p+6)!=*(p+9) || *(p+7)!=*(p+13) || *(p+11)!=*(p+14) )
всё работает верно
Алена_Коваленко
Заблокирован
24.05.2014, 00:18  [ТС]     Определить симметричность матрицы испльзуя указатели #7
Q1, спасибо огромадное!!!! Думала у меня совсем все плохо.
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
24.05.2014, 00:19     Определить симметричность матрицы испльзуя указатели #8
т.е. у Вас ошибка была даже не в указателях, а в цикле if, который выдавал что матрица несимметрична только тогда, когда выполнялись все условия оператора, но матрица несимметрична даже если одно из неравенст не выполняется
Алена_Коваленко
Заблокирован
24.05.2014, 00:39  [ТС]     Определить симметричность матрицы испльзуя указатели #9
Q1, да, когда Вы мне написали, только тогда увидела ошибку.

Добавлено через 4 минуты
Q1, а вот если саму проверку написать функцией в отдельном файле, нужно там написать только 28-30 строку?
Просто таким образом опять ничего не работает.
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
24.05.2014, 01:12     Определить симметричность матрицы испльзуя указатели #10
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
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
int proverka(int *mas){
    if ( *(mas+1)!=*(mas+4) || *(mas+2)!=*(mas+8) || *(mas+3)!=*(mas+12) || *(mas+6)!=*(mas+9) || *(mas+7)!=*(mas+13) || *(mas+11)!=*(mas+14) )
        cout << "Не симметрична";
    else cout<< "Симметрична";
    return 0;
}
 
 
using namespace std;
int main()
{
 
 setlocale(LC_ALL, "");
 int m[4][4];
 int *p=&m[0][0];
 for (int i=0; i<4; i++)
     {
          for (int j=0; j<4; j++)
              {
                   cout <<i <<""<<j<< ": ";
                   cin >> m[i][j] ;
              }
     }
 cout << "Ввод окончен"<< endl;
cout << "Матрица имеет вид: " << endl;
 for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
           { cout << m[i][j] << "\t";
            }
            cout << endl;
    }
    proverka(p);
 getchar();
 return 0;
}
Алена_Коваленко
Заблокирован
24.05.2014, 01:27  [ТС]     Определить симметричность матрицы испльзуя указатели #11
Q1, имею ввиду если эту функцию в другой файл записать.

Добавлено через 1 минуту
Это записана функция в другом файле
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <conio.h>
 
using namespace std;
 int m[4][4]; 
 int *p=&m[0][0];
bool sym=true;
void proverka()
{
 setlocale(LC_ALL, ""); 
 
    if (*(p+1)!=*(p+4) || *(p+2)!=*(p+8) || *(p+3)!=*(p+12) || *(p+6)!=*(p+9) || *(p+7)!=*(p+13) || *(p+11)!=*(p+14) )
     sym=false;
             if (sym) cout <<"симметрична";
             else cout <<"не симметрична";
}
А это уже вызов
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
#include <iostream>
#include <conio.h>
#include "111.cpp"
using namespace std;
 
 
int main()
{
 setlocale(LC_ALL, "");     
 
    bool sym=true;
     int m[4][4]; 
  int *p=&m[0][0];
 for (int i=0; i<4; i++)
     {  
          for (int j=0; j<4; j++)
              {
                   cout <<i <<""<<j<< ": ";
                   cin >> m[i][j] ;                         
              }
     }
 cout << "Ввод окончен"<< endl;
cout << "Матрица имеет вид: " << endl;
 for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
           { cout << m[i][j] << "\t";
            }
            cout << endl;}
proverka(); 
 _getch();
 return 0;   
}
Добавлено через 3 минуты
Q1, вот понять не могу это в скобках параметр указан? (6 строчка)
Просто если разбить Ваш код, то все работает.
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
24.05.2014, 01:54     Определить симметричность матрицы испльзуя указатели #12
Да, это параметр, если можете, покажите, что получилось
Алена_Коваленко
Заблокирован
24.05.2014, 05:57  [ТС]     Определить симметричность матрицы испльзуя указатели #13
Q1, вот сама функция в файле:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <conio.h>
 
using namespace std;
int proverka(int *mas){
    if ( *(mas+1)!=*(mas+4) || *(mas+2)!=*(mas+8) || *(mas+3)!=*(mas+12) || *(mas+6)!=*(mas+9) || *(mas+7)!=*(mas+13) || *(mas+11)!=*(mas+14) )
        cout << "Не симметрична";
    else cout<< "Симметрична";
    return 0;
}
А это сама программа:
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
#include <iostream>
#include <conio.h>
#include "111.cpp"
using namespace std;
 
 
int main()
{
 setlocale(LC_ALL, "");     
 
     int m[4][4]; 
  int *p=&m[0][0];
 for (int i=0; i<4; i++)
     {  
          for (int j=0; j<4; j++)
              {
                   cout <<i <<""<<j<< ": ";
                   cin >> m[i][j] ;                         
              }
     }
 cout << "Ввод окончен"<< endl;
cout << "Матрица имеет вид: " << endl;
 for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
           { cout << m[i][j] << "\t";
            }
            cout << endl;}
proverka(p); 
 _getch();
 return 0;   
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 06:09     Определить симметричность матрицы испльзуя указатели #14
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
int *p=&m[0][0];
У тебя вроде только одна матрица. Зечем тебе указатель на матрицу? И что за дикая размерность [0][0]?

Добавлено через 7 минут
Цитата Сообщение от Q1 Посмотреть сообщение
Да, это параметр, если можете, покажите, что получилось
Ничего подобного. Это размерность.
Алена_Коваленко
Заблокирован
24.05.2014, 09:31  [ТС]     Определить симметричность матрицы испльзуя указатели #15
taras atavin, в таком случае, лучше объяснить почему "дикая" размерность, что именно не так. Тема была создана для того чтобы помочь исправить ошибки и неправильное понимание о указателях, а не для констатации факта в неправильности.

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
У тебя вроде только одна матрица. Зечем тебе указатель на матрицу?
Да, одна. Указатель нужен для написания проверки симметричности матрицы. В этом и суть задания.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 09:42     Определить симметричность матрицы испльзуя указатели #16
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
taras atavin, в таком случае, лучше объяснить почему "дикая" размерность, что именно не так.
Потому что массив массивов, не содержащий ни одного массива-элемента, каждый из которых не содержит ни одного элемента.
Алена_Коваленко
Заблокирован
24.05.2014, 09:49  [ТС]     Определить симметричность матрицы испльзуя указатели #17
taras atavin, как запутано. Как тогда нужно его указать?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 10:06     Определить симметричность матрицы испльзуя указатели #18
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
Указатель нужен для написания проверки симметричности матрицы. В этом и суть задания.
Во-первых указатель на единичное данное не нужен. А во-вторых если ты с помощью указателя адресуешь всю матрицу, но к элементам её обращаешься по индексам, то это всё равно не использование указателя для проверки матрицы. Указатель в этом случае используется в части программы, реализующей алгоритм, одной из операций которого является проверка матрицы. В вызывающей части программы, если соблюсти декомпозицию. Но не непосредственно для проверки. Чтоб использовать указатель для проверки массива, будь то матрица, вектор, тензор третьего порядка..., надо указывать на элементы и перебирать указатель в цикле.
Алена_Коваленко
Заблокирован
24.05.2014, 10:12  [ТС]     Определить симметричность матрицы испльзуя указатели #19
taras atavin, но в программе же вроде не индекс написан. От указателя смещение на n-ое кол-во элементов, смотря какие элементы использовать. А на счет цикла я пыталась сделать, но там никакой закономерности нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 10:14     Определить симметричность матрицы испльзуя указатели
Еще ссылки по теме:

C++ Симметричность матрицы
C++ Определить указатели на функции, имеющие следующие прототипы
Сортировка элементов строки матрицы (указатели) C++
Указатели: определить количество столбцов символьной матрицы, не содержащих ни одной буквы 'Q' C++
C++ Зеркально отразить элементы матрицы относительно главной диагонали используя указатели

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 10:14     Определить симметричность матрицы испльзуя указатели #20
Симметрична матрица, совпадающая со своей транспонированной версией. В индексной арифметике это
C++
1
2
3
4
5
6
7
8
9
10
for (flag=true, i=0; i<n; ++i)
{
 for (j=0; j<n; ++j)
 {
  if (a[i][j]!=a[j][i])
  {
   flag=false;
  }
 }
}
.
Yandex
Объявления
24.05.2014, 10:14     Определить симметричность матрицы испльзуя указатели
Ответ Создать тему
Опции темы

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