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

Почему неправильно проверяется условие? - C++

Восстановить пароль Регистрация
 
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
30.03.2013, 14:46     Почему неправильно проверяется условие? #1
Что не так? где ошибка??

например исходная матрица matrix такая:
01001
01111
00110
00100
10000

а матрицу clabel выводит такую :
00000
00000
00000
00000
10000

а по идее clabel должна выглядеть следующим образом:
01002
01111
00110
00100
30000

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
for(i=0; i<Rows; i++)
{
   for(j=0; j<Cols; j++)
   {
          if(matrix[i][j]==0) { clabel[i][j]=0; break;}
 
          if ((i!=0) && (j==0))
          {
              if(matrix[i-1][j]==0)
              {
                  clabel[i][j]=label+1;
                  label=label+1;
              }
              else clabel[i][j]=clabel[i-1][j];
          }
          if ((j!=0) && (i==0))
          {
              if(matrix[i][j-1]==0)
              {
                  clabel[i][j]=label+1;
                  label=label+1;
              }
              else clabel[i][j]=clabel[i][j-1];
          }
          if((i!=0) && (j!=0))
          {
              if((matrix[i][j-1]==0) && (matrix[i-1][j]==0))
              {
                  clabel[i][j]=label+1;
                  label=label+1;
              }
              else
              {
                   if((matrix[i][j-1]==1) && (matrix[i-1][j]==1))
                   {
                       if(clabel[i][j-1] < clabel[i-1][j])
                            clabel[i][j]=clabel[i][j-1];
                       else
                            clabel[i][j]=clabel[i-1][j];
                   }
                   if(matrix[i][j-1]==0)
                        clabel[i][j]=clabel[i-1][j];  //такая же метка как у соседа
                   else
                        clabel[i][j]=clabel[i][j-1];
              }
          }
          if((i==0) && (j==0))
          {
              clabel[i][j]=label+1;
              label=label+1;
          }
 
   }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2013, 14:53     Почему неправильно проверяется условие? #2
Задачу в студию.
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
30.03.2013, 15:47  [ТС]     Почему неправильно проверяется условие? #3
есть исходная матрица из 0 и 1. например
01001
01111
00110
00100
10000
нужно пройти по элементам матрицы, например если идем по 1 строке - там соседа сверху нет - самый первый элемент matrix[0][0], если он == 0, то переходим к следущей ячейке, если он 1, то в clabel ставим метку 1, далее смотрим следущую ячейку, если она == 0, то идем дальше, если == 1, то смотрим предыдущего соседа слева, если он 0, то ставим в clabel 2, т.е. новую метку, а если предыдущий == 1, то метка такая же как и у соседа. и тд - это что касается первой строки (т.е. нулевой где нет соседа сверху). тоже самое для 1 столбца только тут смотрим только соседа сверху.

а по всей матрицы когда идем , то если встречается 0, то просто идем дальше, т.е. в массив clabel записываем 0. если встречаем 1, то смотрим соседей слева и сверху. если они оба 0, то в clabel ставим новую метку, если 1 из них == 1 , то в clabel записываем ту метку которая стоит у этого соседа который == 1. если оба соседа == 1, то ставим метку ту которая наименьшая из двух соседей.

Добавлено через 41 минуту
Ну что никто подсказать не может в чем проблема???!!!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2013, 15:55     Почему неправильно проверяется условие? #4
Цитата Сообщение от Kr Посмотреть сообщение
например если идем по 1 строке - там соседа сверху нет
куда ж он делся?

Добавлено через 1 минуту
Кроме того, перевод алгоритма на русский не нужен, нужна постановка задачи.
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
30.03.2013, 15:56  [ТС]     Почему неправильно проверяется условие? #5
по 1строке, в смысле по нулевой, где тут сосед сверху будет ?!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2013, 15:57     Почему неправильно проверяется условие? #6
То есть ты должен написать, не как, а что требуется сделать.

Добавлено через 24 секунды
Цитата Сообщение от Kr Посмотреть сообщение
по 1строке, в смысле по нулевой, где тут сосед сверху будет ?!
Ладно, допустим.
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
30.03.2013, 15:58  [ТС]     Почему неправильно проверяется условие? #7
задача - объединить ячейки в кластеры по выше описанному алгоритму
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2013, 15:59     Почему неправильно проверяется условие? #8
Но в алгоритме ты уже на порол и не известно, правилен ли теперь получится его перевод на русский.
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
30.03.2013, 16:00  [ТС]     Почему неправильно проверяется условие? #9
перевод на русский правильный, по нему писался код - напорото в коде, а алгоритм верный
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.03.2013, 16:03     Почему неправильно проверяется условие? #10
Для каждой клетки надо посчитать количество ненулевых соседей, включая её саму и дальних соседей?

Добавлено через 2 минуты
Цитата Сообщение от Kr Посмотреть сообщение
перевод на русский правильный, по нему писался код - напорото в коде, а алгоритм верный
Плюсы предлагают больше возможностей структурирования текста и поиска глюков, чем русский, поэтому такое маловероятно, наоборот если ты понимаешь алгоритм, то вряд ли ошибёшся именно на плюсах, а если нет, то можешь ошибиться на любом языке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2013, 16:49     Почему неправильно проверяется условие?
Еще ссылки по теме:

C++ Не проверяется условие
C++ Почему не проверяется условие else if
Условие работает неправильно C++

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

Или воспользуйтесь поиском по форуму:
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
30.03.2013, 16:49  [ТС]     Почему неправильно проверяется условие? #11
вы знаете что такое кластер???

0100100
0110010
1110100
0010101
0000001

разными цветами показаны разные кластеры, вот нужно чтоб у одного кластера у ячеек была одна цифра, у другого кластера - другая и тд.

в данном случае должно получиться так:
0100200
0110030
1110400
0010405
0000005

Добавлено через 26 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
int **matrix;
int **clabel;
 
 matrix = (int **)calloc( Rows, sizeof(int*) );
  for( int i=0; i < Rows; i++ ) {
  matrix[i] = (int *)calloc( Cols, sizeof(int) );
  memset (matrix[i], 0, Cols*sizeof(int)); }
 
  clabel = (int **)calloc( Rows, sizeof(int*) );
  for( int i=0; i < Rows; i++ ) {
  clabel[i] = (int *)calloc( Cols, sizeof(int) );
  memset (clabel[i], 0, Cols*sizeof(int)); }
.....
..... ЗДЕСЬ ВСТАВИЛА ЗАПОЛНЕНИЕ CLABEL МАТРИЦЫ СЛУЧАЙНЫМИ ЧИСЛАМИ, ЧТОБЫ ПОСМОТРЕТЬ ЗАПИСЫВАЕТ ЛИ ПОТОМ НУЛИ ГДЕ ЭТО НЕОБХОДИМО В CLABEL
.....
....
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
for(i=0; i<Rows; i++)
{
   for(j=0; j<Cols; j++)
   {
          if(matrix[i][j]==0) { clabel[i][j]=0; break;}  //ЗДЕСЬ ПОЧЕМУ ТО ЧАСТО ПИШЕТСЯ ТО РАНДОМНОЕ ЧИСЛО КАКОЕ ВЫПАЛО ПРИ ЗАПОЛНЕНИИ CLABEL СЛУЧАЙНЫМИ ЧИСЛАМИ 
 
          if ((i!=0) && (j==0))
          {
              if(matrix[i-1][j]==0)
              {
                  clabel[i][j]=label+1;
                  label=label+1;
              }
              else clabel[i][j]=clabel[i-1][j];
          }
          if ((j!=0) && (i==0))
          {
              if(matrix[i][j-1]==0)
              {
                  clabel[i][j]=label+1;
                  label=label+1;
              }
              else clabel[i][j]=clabel[i][j-1];
          }
          if((i!=0) && (j!=0))
          {
              if((matrix[i][j-1]==0) && (matrix[i-1][j]==0))
              {
                  clabel[i][j]=label+1;
                  label=label+1;
              }
              else
              {
                   if((matrix[i][j-1]==1) && (matrix[i-1][j]==1))
                   {
                       if(clabel[i][j-1] < clabel[i-1][j])
                            clabel[i][j]=clabel[i][j-1];
                       else
                            clabel[i][j]=clabel[i-1][j];
                   }
                   if(matrix[i][j-1]==0)
                        clabel[i][j]=clabel[i-1][j];  //такая же метка как у соседа
                   else
                        clabel[i][j]=clabel[i][j-1];
              }
          }
          if((i==0) && (j==0))
          {
              clabel[i][j]=label+1;
              label=label+1;
          }
 
   }
}
Добавлено через 14 минут
ВСЁ ПРОБЛЕМУ РЕШИЛА!
Yandex
Объявления
30.03.2013, 16:49     Почему неправильно проверяется условие?
Ответ Создать тему
Опции темы

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