Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2007, 18:19   #1
KJIOyH
Пользователь
 
Регистрация: 22.09.2007
Сообщений: 15
По умолчанию Работа с двумерными массивами

Дана матрица,надо проверить симметричность (симметрия относительной главной диагонали).
ВОт код
Код:
bool sim,ref;

	
	for(i=0;i<x;i++)
	{
			for(j=0;j<x;j++)
			{
				if (a[i][j]==a[j][i]) sim=true;
				else sim=false;
			}
	}
	if(sim==true) cout<<"Sim"<<endl;
	else cout<<"Ne sim"<<endl;
всегда выдает тру,в чем причина ?
KJIOyH вне форума Ответить с цитированием
Старый 02.11.2007, 18:39   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Как только получили sim=false, нужно выходить из циклов, вот и все!
mihali4 вне форума Ответить с цитированием
Старый 03.11.2007, 08:37   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Правильно, иначе при завершении цикла (i=x-1, j=x-1) у тебя получится сравнение: a[x-1][x-1]==a[x-1][x-1] что естественно будет верно, поэтому и возвращало всегда true.
Код:
bool sim,ref;

	
	for(i=0;i<x;i++)
	{
			for(j=0;j<x;j++)
			{
				if (a[i][j]==a[j][i]) sim=sim && true;
				else sim=false;
			}
	}
	if(sim==true) cout<<"Sim"<<endl;
	else cout<<"Ne sim"<<endl;
Я бы так исправил.
AND в "С" как '&&' обозначается вроде...
zetrix вне форума Ответить с цитированием
Старый 03.11.2007, 13:10   #4
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Можно так:
Код:
#include <iostream>
#include <conio.h>

using namespace std;

bool IsSymmetric(int **A, int N)
{
	for (int i = 1; i < N; i++)
		for (int j = 0; j < i; j++)
			if (A[i][j] != A[j][i]) return false;
	return true;
}

void main()
{
	int N;
	cout << "Input size of matrix: ";
	cin >> N;

	int **A = new int*[N];
	for (int i = 0; i < N; i++)
		A[i] = new int[N];

	cout << "Input elements of matrix: " << endl;
	for (int i = 0; i < N; i++)
		for (int j = 0; j < N; j++)
			cin >> A[i][j];

	cout << endl;
	if (IsSymmetric(A, N)) cout << "YES!";
	else cout << "NO!";

	for (int i = 0; i < N; i++)
		delete []A[i];
	delete []A;
	getch();
}
still_alive вне форума Ответить с цитированием
Старый 03.11.2007, 20:03   #5
KJIOyH
Пользователь
 
Регистрация: 22.09.2007
Сообщений: 15
По умолчанию

Спасибо!Второй вариант для меня сложноват,подкорректировал первый.
KJIOyH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с массивами mager JavaScript, Ajax 5 27.08.2008 22:02
Работа с массивами Stelix Паскаль, Turbo Pascal, PascalABC.NET 1 20.06.2008 11:37
Работа с массивами в C# MaskEdit Общие вопросы .NET 3 17.05.2008 17:59
Работа с массивами rexec Microsoft Office Excel 12 21.04.2008 13:29
Работа с массивами Hakman Общие вопросы C/C++ 1 19.02.2008 15:11