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

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

Войти
Регистрация
Восстановить пароль
 
pepsi-_-cola
0 / 0 / 0
Регистрация: 30.10.2011
Сообщений: 13
#1

Является ли матрица симметричной относительно главной диагонали (templates) - C++

01.05.2012, 15:47. Просмотров 723. Ответов 5
Метки нет (Все метки)

С помощью функции шаблона выяснить, является ли матрица симметричной относительно главной диагонали
Вот мой код
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
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include "iostream"
#include "conio.h"
 
using namespace std;
 
 
template <typename X>
 X **creat(int n)
{
    X **mas=new X*[n];
    for(int i=0;i<n;i++) mas[i]=new X [n];
 
    for(int i=0;i<n,i++)
        for(int j=0;j<n;j++)
            cin>>mas[i][j];
    return mas;
}
 
template <typename X>
bool func(X **a, int n)
{
    int count=0;
    
 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if (a[i][j]==a[j][i]) count++;
        }
        if (count==2*n) return true;
        else return false;
    
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int k=3;
    int **a=creat(k);
    float **b;
    bool q;
    q=func(a,3);
    cout<<q<<"\n";
    q=func(b,3);
    cout<<q<<"\n";
    getch();
    return 0;
}
почему он мне выводит ошибку, где int **a=creat(k) ???
и сам код верный вообще?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 15:47     Является ли матрица симметричной относительно главной диагонали (templates)
Посмотрите здесь:

Определить, является ли заданная матрица симметричной относительно главной диагонали C++
Определить, является ли данная квадратная матрица симметричной относительно главной диагонали. C++
Определить, является ли заданная квадратная матрица симметричной относительно главной диагонали. C++
C++ использование функций шаблонов (выяснить является ли матрица симметричной относительно главной диагонали)
C++ Определить является ли заданная квадратная матрица симметричной относительно главной диагонали
Определил, является ли заданная квадратная матрица симметричной относительно главной диагонали! C++
Определить, является ли заданная квадратная матрица симметричной относительно главной диагонали C++
C++ Проверить, является ли заданная матрица симметричной относительно главной диагонали
Определить, является ли матрица симметричной (относительно главной диагонали) C++
C++ Определить, является ли заданная квадратная матрица симметричной относительно своей главной диагонали
C++ Определить является ли матрица симметричной относительно главной диагонали
C++ Определить является ли целочисленная матрица симметричной относительно главной диагонали

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
02.05.2012, 11:48     Является ли матрица симметричной относительно главной диагонали (templates) #2
Цитата Сообщение от pepsi-_-cola Посмотреть сообщение
почему он мне выводит ошибку, где int **a=creat(k) ???
Потому, что нельзя вывести тип на основании возвращаемого значения. Пиши так:
C++
1
int **a=creat<int>(k);
В строке 14 синтаксическая ошибка. Стоит запятая вместо точки с запятой.

Добавлено через 7 минут
Цитата Сообщение от pepsi-_-cola Посмотреть сообщение
C++
1
2
if (count==2*n) return true;
else return false;
Почему это должно получиться 2*n? В случае симметричной матрицы получится n. Больше, чем есть итераций (элементов матрицы) насчитать не удастся.
pepsi-_-cola
0 / 0 / 0
Регистрация: 30.10.2011
Сообщений: 13
18.05.2012, 14:28  [ТС]     Является ли матрица симметричной относительно главной диагонали (templates) #3
Добавлено через 7 минут

Почему это должно получиться 2*n? В случае симметричной матрицы получится n. Больше, чем есть итераций (элементов матрицы) насчитать не удастся.[/QUOTE]

потому что будет двойной проход по матрице
сначала будут сравниваться элементы [k][l] с [l][k], а потом будет [l][k] с [k][l]
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
18.05.2012, 14:38     Является ли матрица симметричной относительно главной диагонали (templates) #4
Цитата Сообщение от pepsi-_-cola Посмотреть сообщение
потому что будет двойной проход по матрице
сначала будут сравниваться элементы [k][l] с [l][k], а потом будет [l][k] с [k][l]
Звучит вроде убедительно, но, тем не менее, это не верно.
Выбирается элемент слева от знака сравнения, а элемент справа от сравнения просто проверяется на соответствие ему. В цикле n*n будет выбрано n*n пар элементов для сравнения, сравнение будет произведено n*n раз и, поскольку матрица симметричная, то n*n раз будет увеличен счётчик. Удвоению взяться неоткуда.
-=ЮрА=-
Заблокирован
Автор FAQ
18.05.2012, 14:57     Является ли матрица симметричной относительно главной диагонали (templates) #5
pepsi-_-cola, вот твоя задача
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
using namespace std;
 
template <class X> X **creat(int n, X**mas);
template <class X> void show(int n, X**mas);
template <class X> bool func(int n, X**a);
 
int main()
{
    int n = 0;
    int **a = NULL;
    cout<<"Enter n : ";cin>>n;
    
    a = creat(n,a);
    show (n,a);
    if(!func(n,a))
        cout<<"Matrix not symetric\n";
    else
        cout<<"Matrix is symetric\n";
    system("pause");
    return 0;
}
 
template <class X> X **creat(int n, X**mas)
{
    int i,j;
    mas = new X*[n];
    for(i = 0; i < n; i++) 
    {
        mas[i] = new X[n];
        for(j = 0; j < n; j++)
        {
            cout<<"X["<<i + 1<<"]["<<j + 1<<"] = ";
            cin>>mas[i][j];
        }
    }
    return mas;
}
 
template <class X> void show(int n, X**mas)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
            cout<<mas[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
}
 
template <class X> bool func(int n, X**a)
{
    int i, j;
    bool bSym = true;
    for(i = 0; i < n/2 && bSym; i++)
    for(j = 0; j < n/2 && bSym; j++)
    {
        if(a[i][j] != a[j][i])
             bSym = false;
    }
    return bSym;
}
Миниатюры
Является ли матрица симметричной относительно главной диагонали (templates)  
-=ЮрА=-
Заблокирован
Автор FAQ
18.05.2012, 15:00     Является ли матрица симметричной относительно главной диагонали (templates) #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 0; i < n/2 && bSym; i++)
* * for(j = 0; j < n/2 && bSym; j++)
* * {
* * * * if(a[i][j] != a[j][i])
* * * * * * *bSym = false;
* * }
- вот проверка симетричности.
Во-первых пробираем лишь половину элементов (вторая половина у нас справа в сравнении), будет до n 2 раза проведём проверку.
Во-вторых проще всего ввести флаг говорящий о том что попалось несиметричное значение
Yandex
Объявления
18.05.2012, 15:00     Является ли матрица симметричной относительно главной диагонали (templates)
Ответ Создать тему
Опции темы

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