Как грамотно перебрать массив по диагонали

 

*дополнено

Переборка массива, как реализовать грамотнее?

1       2       4       7

3       5       8       11

6       9       12      14

10      13      15      16

или

1       2       6       7

3       5       8       13      

4       9       12      14

10      11      15      16
void MassDev() // первая часть массива
  {
   int countp=0;
   for(int p=1; p<ARRAY_SIZE_X; p++) // отбор по периодам
     {
      countp++;
      for(int b=1; b<countp; b++) //отбор по барам
           {
            if(arrayZ[2][p-b][b]>0)
              {
              }
        }
     }
  }
  
  void MassDevZ()//вторая половина массива
  {
   int countp=0;
   for(int b=2; b<ARRAY_SIZE_Y; b++) // отбор по периодам
     {
      int coubtb=-1;
      countp++;
      for(int p=ARRAY_SIZE_X-2; p>countp; p--) //отбор по барам
        {
      coubtb++;
            if(arrayZ[2][p][b+coubtb]>0)
              {
              }
        }
     }
  }


 Что то не красиво, возможно и не совсем работа способна, может кто поделится опытом...

 
Что такое "перебор массива по диагонали"?
 
Dmitry Fedoseev:
Что такое "перебор массива по диагонали"? 

перебор элементов должен осуществляться в таком виде.

1       2       4       7

3       5       8       11

6       9       12      14

10      13      15      16

или

1       2       6       7

3       5       8       13      

4       9       12      14

10      11      15      16
 
Если размер массива постоянный, то создать дополнительный массив, в ините заполнить его индексами.
 
Dmitry Fedoseev:
Если размер массива постоянный, то создать дополнительный массив, в ините заполнить его индексами.

Это вы о чем?

Задача, перебрать двумерный массив показанным ранее способом(где целые числа это направление перебора).

 

 

По этой диагонали? 

 
Top2n:
Это вы о чем?
Об упрощении и ускорении сего действа в случае, когда массив имеет постоянный размер. 
 
Evgeny Belyaev:

 

По этой диагонали? 

Нет. Массив двухмерный, но перебирать его надо в том порядке как стоят числа: один элемент из левого верхнего угла, потом два (0-1 и 1-0), им т.д.
 
Dmitry Fedoseev:
Об упрощении и ускорении сего действа в случае, когда массив имеет постоянный размер. 
И все же я не понял, как может дополнительный массив помочь.
 
/*
   1 2 3
   4 5 6
   7 8 9
*/
  

   int m[9][2]={{0,0},{0,1},{1,0},{0,2},{1,1},{2,0},{1,2},{2,1},{2,2}};
  
   int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
  
   int r=ArrayRange(m,0);
  
   Alert("---");
   for(int i=0;i<r;i++){
      Alert(a[m[i][0]][m[i][1]]);
   }
 
Dmitry Fedoseev:
/*
   1 2 3
   4 5 6
   7 8 9
*/
  

   int m[9][2]={{0,0},{0,1},{1,0},{0,2},{1,1},{2,0},{1,2},{2,1},{2,2}};
  
   int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
  
   int r=ArrayRange(m,0);
  
   Alert("---");
   for(int i=0;i<r;i++){
      Alert(a[m[i][0]][m[i][1]]);
   }
Все равно ни хрена не понял, но это я тупой) у меня массив большого объема, присваивать индексы не вижу смысла
Причина обращения: