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

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

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

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

23.05.2014, 23:31. Просмотров 799. Ответов 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;   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 23:31     Определить симметричность матрицы испльзуя указатели
Посмотрите здесь:
Симметричность матрицы C++
симметричность матрицы C++
C++ Симметричность матрицы
Указатели: определить количество столбцов символьной матрицы, не содержащих ни одной буквы 'Q' C++
C++ Проверка квадратной матрицы на симметричность
C++ Матрицы и указатели (найти такие k, что k-я строка матрицы совпадает с k-м столбцом; 2) найти сумму элементов)
C++ Матрицы и указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2014, 06:09     Определить симметричность матрицы испльзуя указатели #14
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
int *p=&m[0][0];
У тебя вроде только одна матрица. Зечем тебе указатель на матрицу? И что за дикая размерность [0][0]?

Добавлено через 7 минут
Цитата Сообщение от Q1 Посмотреть сообщение
Да, это параметр, если можете, покажите, что получилось
Ничего подобного. Это размерность.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 09:31     Определить симметричность матрицы испльзуя указатели
Еще ссылки по теме:
C++ Проход матрицы используя указатели
C++ Вывод динамической матрицы через указатели
C++ Указатели, выделение памяти для матрицы
Сортировка элементов строки матрицы (указатели) C++
C++ Указатели и матрицы: как правильно передать матрицу в функцию?

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

Или воспользуйтесь поиском по форуму:
Алена_Коваленко
Заблокирован
24.05.2014, 09:31  [ТС]     Определить симметричность матрицы испльзуя указатели #15
taras atavin, в таком случае, лучше объяснить почему "дикая" размерность, что именно не так. Тема была создана для того чтобы помочь исправить ошибки и неправильное понимание о указателях, а не для констатации факта в неправильности.

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
У тебя вроде только одна матрица. Зечем тебе указатель на матрицу?
Да, одна. Указатель нужен для написания проверки симметричности матрицы. В этом и суть задания.
Yandex
Объявления
24.05.2014, 09:31     Определить симметричность матрицы испльзуя указатели
Ответ Создать тему
Опции темы

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