Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамический массив

262
22 октября 2004 года
Iktomy
1.2K / / 11.10.2004
Здарасти всем! Вот дали мне задание в универе: Определите, является ли матрица АТ(nґn), элементы которой заданы, симметричной относительно главной диагонали. Решал его примерно таким способом (если кому то код покажется кривоватым - не ругайте сильно, лучше подскажите):
Код:
#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; // &#206;&#247;&#232;&#249;&#224;&#229;&#236; &#239;&#224;&#236;&#255;&#242;&#252;
    getch();
}

И получается такая фигня, что при выводе переменных a и b (это я для проверки сделал - их выводить не надо вовсе)
 
Код:
a = matrix[i*len+j];
        printf("%i ", a);
        b = matrix[j*len+i];
        printf("%i ", b);
        j++;

выводятся последними два числа, которых в моей марице нет и быть не должно. Числа большие и их адреса выходят за пределы матрицы, предположительно ([n+1][m+1]).
Так вот, хочу у вас спросить, товарищи-господа программисты, откуда эта фигня взялась и как с этим бороться.
368
22 октября 2004 года
rostyslav
629 / / 13.07.2004
проверка выхода из цикла неправильный.

после вывода последнего элемента i = 2; j = 3;

i < 3; значит снова в цикл
 
Код:
if(j == len)
{
  i++;
  j=i;
};
i = 3, j = 3 и одно и тоже число выводится дважды.

кроме этого 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:;
262
26 октября 2004 года
Iktomy
1.2K / / 11.10.2004
Спасибочки за совет. Не совсем у меня это прокатило и яделал немного по другому.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог