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

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

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

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

23.05.2014, 23:31. Просмотров 844. Ответов 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
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
23.05.2014, 23:53 #2
только что проверял, вводил цифры от 0 до 9 и обратно, пишет не симметрична
0
Алена_Коваленко
Заблокирован
23.05.2014, 23:54  [ТС] #3
Q1, да, перепутала. Пишет что не симметрична в любом случае.
0
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
23.05.2014, 23:56 #4
заполните матрицу так, чтоб элемент 0,1 был равен элементу 1,0, 0,2 = 2,0 и так далее, мне пишет симметрична, всё Вы правильно разобрались)
0
Алена_Коваленко
Заблокирован
23.05.2014, 23:57  [ТС] #5
Q1, она почему-то по разному пишет. Теперь с единицами симметрична, а дальше ввожу разные числа и опять - симметрична.
0
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) )
всё работает верно
1
Алена_Коваленко
Заблокирован
24.05.2014, 00:18  [ТС] #7
Q1, спасибо огромадное!!!! Думала у меня совсем все плохо.
0
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
24.05.2014, 00:19 #8
т.е. у Вас ошибка была даже не в указателях, а в цикле if, который выдавал что матрица несимметрична только тогда, когда выполнялись все условия оператора, но матрица несимметрична даже если одно из неравенст не выполняется
0
Алена_Коваленко
Заблокирован
24.05.2014, 00:39  [ТС] #9
Q1, да, когда Вы мне написали, только тогда увидела ошибку.

Добавлено через 4 минуты
Q1, а вот если саму проверку написать функцией в отдельном файле, нужно там написать только 28-30 строку?
Просто таким образом опять ничего не работает.
0
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;
}
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 строчка)
Просто если разбить Ваш код, то все работает.
0
Q1
2 / 2 / 1
Регистрация: 07.06.2013
Сообщений: 14
Завершенные тесты: 1
24.05.2014, 01:54 #12
Да, это параметр, если можете, покажите, что получилось
0
Алена_Коваленко
Заблокирован
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;   
}
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 06:09 #14
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
int *p=&m[0][0];
У тебя вроде только одна матрица. Зечем тебе указатель на матрицу? И что за дикая размерность [0][0]?

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

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
У тебя вроде только одна матрица. Зечем тебе указатель на матрицу?
Да, одна. Указатель нужен для написания проверки симметричности матрицы. В этом и суть задания.
0
24.05.2014, 09:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 09:31
Привет! Вот еще темы с ответами:

Указатели и указатели на указатели, а также типы данных - 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; ...


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

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

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