Форум программистов, компьютерный форум 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++ Матрицы и указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Алена_Коваленко
Заблокирован
24.05.2014, 10:26  [ТС]     Определить симметричность матрицы испльзуя указатели #21
Ну этот код мне понятен, только где указатели?

Добавлено через 1 минуту
Именно таким образом и была сделана эта же задача без использования указателей.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 10:56     Определить симметричность матрицы испльзуя указатели #22
То же самое в адресной арифметике (на указателях)
C++
1
2
3
4
5
6
7
8
9
10
for (flag=true, p1=(int*)a, e1=p1+n*n+n-1, p2=p1; p1<=e1; p2-=4*n-1)
 {
  for (e2=p1+n-1; p1<=e2; ++p1, p2+=n)
  {
   if (*p1!=*p2)
   {
    flag=false;
   }
  }
 }
, указатели надо объявить на элемент, то есть
C++
1
2
3
4
int *p1;
int *p2;
int *e1;
int *e2;
.

Добавлено через 12 минут
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
А на счет цикла я пыталась сделать, но там никакой закономерности нет.
Куда ж она делась?
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
От указателя смещение на n-ое кол-во элементов, смотря какие элементы использовать.
В скобках указывается только индекс и в декларации в тех же скобках количество элементов. Смещение - это p+1, p+2, p+3... Но в таком виде оно эквивалентно индексу, отличаясь лишь синтаксически, не эквивалентное индексу смещение - это от указателя на объект/структуру/образ бинарного файла.

Добавлено через 6 минут
Сам тоже ошибся.
C++
1
2
3
4
5
6
7
8
9
10
for (flag=true, p1=(int*)a, e1=p1+n*n-1, p2=p1; p1<=e1; p2-=n*n-1)
 {
  for (e2=p1+n-1; p1<=e2; ++p1, p2+=n)
  {
   if (*p1!=*p2)
   {
    flag=false;
   }
  }
 }
Алена_Коваленко
Заблокирован
24.05.2014, 11:01  [ТС]     Определить симметричность матрицы испльзуя указатели #23
taras atavin, что-то начинает прояснятся. Но думаю пока рано задавать вопросы, надо еще почитать об этих "злополучных" указателях.
Спасибо за указанные ошибки и код, с которым буду разбираться. Надеюсь сама все-таки смогу доделать работу правильно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 11:18     Определить симметричность матрицы испльзуя указатели
Еще ссылки по теме:

Симметричность матрицы C++
C++ Матрицы и указатели (найти такие k, что k-я строка матрицы совпадает с k-м столбцом; 2) найти сумму элементов)
C++ Симметричность матрицы

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 11:18     Определить симметричность матрицы испльзуя указатели #24
Указатель есть данное, хранящее адрес подпрограммы, или другого данного. Если указатель хранит адрес другого указателя, то он называется кратным указателем, иначе простым. Указатель на указатель на не указатель называется двойным указателем, указатель на указатель на указатель на не указатель - тройным указателем и так далее. Сколько указателей надо пройти, чтоб добраться до подпрограммы, или обычного данного, такова кратность. На c/c++ звёздочка разыменует, то есть обеспечивает доступ к тому данному, на которое указывает указатель (указатели на функции не требуют разыменования, а используются просто вместо имени, в круглых скобках параметры). На c/c++ обычный массив (не массив-объект) занимает непрерывный блок, упорядочен по возрастанию индексов. Индекс в скобках складывается с указателем на массив и так получается адрес элемента, при этом массив массивов считается указателем на элемент-массив непосредственно самого массива, но если далее снова следуют скобки с индексом, то полученный адрес не разыменуется, а приводится без фактического преобразования к указателю на элемент уже этого массива и снова складывается со следующим индексом, разыменование происходит после последнего сложения. Причём, индексы измеряются не в байтах, а в ячейках той же разрядности, какую имеют элементы. Например, если
C++
1
2
int a[4];
int *p;
, то индексы и при a, и при p измеряются в ячейках, минимально достаточных для хранения int, а если
C++
1
int a[4][4];
, то индекс уже измеряется в четвёрках интов, также в четвёрках интов измеряется индекс при указателе на массив из четырёх интов. Если же
C++
1
2
double a[4];
double *p;
, то индекс измеряется уже в даблах.
Yandex
Объявления
24.05.2014, 11:18     Определить симметричность матрицы испльзуя указатели
Ответ Создать тему
Опции темы

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