#include <stdio.h>
#include <conio.h>
void main()
{
int x, *matrix, j=0, len, tmp;
printf("Input number of collums and rows square matrix\n");
printf("and press ENTER to continue: ");
scanf("%i", &len);
printf("\n");
tmp = len*len;
matrix = new int[tmp];
for(int i=0; i<tmp; i++)
{
printf("input element: ");
scanf("%i", &x);
matrix=x;
};
printf("\n");
for(i=0; i<tmp; i++)
{
if(j == len)
{
printf("\n\n");
j=0;
}
printf("%i ", matrix);
j++;
};
printf("\n\n");
int a,b, schet;
for(i=0, j=0, x=0; i<len; x++)
{
if(j == len)
{
i++;
j=i;
};
a = matrix[i*len+j];
printf("%i ", a);
b = matrix[j*len+i];
printf("%i ", b);
j++;
if(a == b)
schet++;
if(a != b)
schet--;
};
if(schet == tmp+len)
printf("This matris is SIMMETRIC!");
if(schet != tmp+len)
printf("This matrix is NOT SIMMETRIC!");
printf("\n\n");
delete[] matrix; // Î÷èùàåì ïàìÿòü
getch();
}
Динамический массив
Код:
И получается такая фигня, что при выводе переменных a и b (это я для проверки сделал - их выводить не надо вовсе)
Код:
a = matrix[i*len+j];
printf("%i ", a);
b = matrix[j*len+i];
printf("%i ", b);
j++;
printf("%i ", a);
b = matrix[j*len+i];
printf("%i ", b);
j++;
выводятся последними два числа, которых в моей марице нет и быть не должно. Числа большие и их адреса выходят за пределы матрицы, предположительно ([n+1][m+1]).
Так вот, хочу у вас спросить, товарищи-господа программисты, откуда эта фигня взялась и как с этим бороться.
после вывода последнего элемента i = 2; j = 3;
i < 3; значит снова в цикл
Код:
if(j == len)
{
i++;
j=i;
};
{
i++;
j=i;
};
кроме этого schet не инициализирован, и если есть хотя бы одно несовпадение, нет смысла дальше проверять.
x в данном контексте лишний.
Чтоб исправить, двойной цикл
Код:
bool isNotEq = false;
for(i = 0; i < len; i++)
{
for(j = i + 1; j < len; j++)
{
if(matrix[i*len+j]!=matrix[j*len+i])
{
isNotEq = true;
goto alfa;
}
}
}
alfa:;
for(i = 0; i < len; i++)
{
for(j = i + 1; j < len; j++)
{
if(matrix[i*len+j]!=matrix[j*len+i])
{
isNotEq = true;
goto alfa;
}
}
}
alfa:;
Спасибочки за совет. Не совсем у меня это прокатило и яделал немного по другому.