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

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

Войти
Регистрация
Восстановить пароль
 
 
Алена_Коваленко
Заблокирован
#1

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

23.05.2014, 23:31. Просмотров 921. Ответов 23
Метки нет (Все метки)

Задание, определить симметричность матрицы с помощью указателей.
Не могу никак разобраться с указателями, но что-то написала (просьба не смеяться )
Меня интересует как обратится к элементам матрицы что бы сравнить их.
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;   
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 23:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить симметричность матрицы испльзуя указатели (C++):

симметричность матрицы - C++
мне нужно проверить, является ли квадратная матрица симметричной, относительно главной диагонали. Как мне составить условие, чтобы я не...

Симметричность матрицы - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include &quot;MyCrt.cpp&quot; using namespace std; int...

Симметричность матрицы - C++
Дана квадратная матрица А(N, N).Составьте программу, определяющую, является ли данная матрица симметричной или нет. Если матрица...

Указатели: определить количество столбцов символьной матрицы, не содержащих ни одной буквы 'Q' - C++
Сформировать массив типа char размером в 5х10х7 элементов. Проинициализировать его случайными символами от A до Z. Определить к-во...

Проверка квадратной матрицы на симметричность - C++
Помогите сделать программу, вот мой код: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &quot;conio.h&quot; int main() {int A,i,j,B,n; ...

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

23
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.05.2014, 09:42 #16
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
taras atavin, в таком случае, лучше объяснить почему "дикая" размерность, что именно не так.
Потому что массив массивов, не содержащий ни одного массива-элемента, каждый из которых не содержит ни одного элемента.
0
Алена_Коваленко
Заблокирован
24.05.2014, 09:49  [ТС] #17
taras atavin, как запутано. Как тогда нужно его указать?
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.05.2014, 10:06 #18
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
Указатель нужен для написания проверки симметричности матрицы. В этом и суть задания.
Во-первых указатель на единичное данное не нужен. А во-вторых если ты с помощью указателя адресуешь всю матрицу, но к элементам её обращаешься по индексам, то это всё равно не использование указателя для проверки матрицы. Указатель в этом случае используется в части программы, реализующей алгоритм, одной из операций которого является проверка матрицы. В вызывающей части программы, если соблюсти декомпозицию. Но не непосредственно для проверки. Чтоб использовать указатель для проверки массива, будь то матрица, вектор, тензор третьего порядка..., надо указывать на элементы и перебирать указатель в цикле.
0
Алена_Коваленко
Заблокирован
24.05.2014, 10:12  [ТС] #19
taras atavin, но в программе же вроде не индекс написан. От указателя смещение на n-ое кол-во элементов, смотря какие элементы использовать. А на счет цикла я пыталась сделать, но там никакой закономерности нет.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
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;
  }
 }
}
.
0
Алена_Коваленко
Заблокирован
24.05.2014, 10:26  [ТС] #21
Ну этот код мне понятен, только где указатели?

Добавлено через 1 минуту
Именно таким образом и была сделана эта же задача без использования указателей.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
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;
   }
  }
 }
1
Алена_Коваленко
Заблокирован
24.05.2014, 11:01  [ТС] #23
taras atavin, что-то начинает прояснятся. Но думаю пока рано задавать вопросы, надо еще почитать об этих "злополучных" указателях.
Спасибо за указанные ошибки и код, с которым буду разбираться. Надеюсь сама все-таки смогу доделать работу правильно.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
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;
, то индекс измеряется уже в даблах.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 11:18
Привет! Вот еще темы с ответами:

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Матрицы и указатели - C++
Дана целочисленная матрица A(N,M). Вычислить сумму и произведение тех её элементов, которые при делении на 2 дают нечётное число. ...

Проход матрицы используя указатели - C++
Никогда не любил использовать указатели, а мне сказали мол лабу надо делать еще и на указателях. Условие: узнать совпадают ли сумы...

Вывод динамической матрицы через указатели - C++
Вот код программы. # include &lt;math.h&gt; # include &lt;conio.h&gt; # include &lt;iostream.h&gt; # include &lt;stdlib.h&gt; # include &lt;stdio.h&gt; ...


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

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

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