Дан прямоугольный массив. Переместить элементы массива, стоящие по периметру на 2 элемента против часовой стрелки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот такое задание стоит, нужна помощь. Заранее спасибо!

Решение задачи: «Дан прямоугольный массив. Переместить элементы массива, стоящие по периметру на 2 элемента против часовой стрелки»

textual
Листинг программы
#include <stdlib.h> /*для функции malloc*/
#include <stdio.h> /*для функции printf*/
 
#define ROW 6
#define COL 7
 
int main()
{
    int mArray[ROW][COL] =      {1, 2, 3, 4, 5, 6, 7,
                                 22, 0, 0, 0, 0, 0, 8,
                                 21, 0, 0, 0, 0, 0, 9,
                                 20, 0, 0, 0, 0, 0,10,
                                 19, 0, 0, 0, 0, 0,11,
                                 18,17,16,15,14,13,12};
    int * arrPerimetr = NULL,
    perimetr = 0,
    i = 0, j = 0, n = 0, m = 0, k = 0,
 
    shift = 2; /*  насколько сдвигаем  */
 
    perimetr = (ROW + COL) * 2 - 4;
    m = perimetr - 1;
    arrPerimetr = (int*)malloc(sizeof(int) * perimetr);
 
    for ( i = 0 ; i <  ROW; i++ )
    {
        printf("\n");
        for ( j = 0 ; j <  COL; j++ )
        {
            if(i == 0 || (i > 0 && j == COL - 1))
           {
               arrPerimetr[n] = mArray[i][j];
               n++;
           }
             if(j == 0 && i > 0|| (i == ROW - 1 && j < COL - 1))
           {
               arrPerimetr[m] = mArray[i][j];
               m--;
           }
           printf("\t%d",mArray[i][j] );
        }
    }
 
    puts("\n\n   New Array :");
 
        /*fill*/
    n = shift;
    k = 0;
    m = perimetr - 1 ;
    for ( i = 0 ; i <  ROW; i++ )
    {
        printf("\n");
        for ( j = 0 ; j <  COL; j++ )
        {
            if(i == 0 || (i > 0 && j == COL - 1))
           {
                mArray[i][j] = arrPerimetr[n];
               n++;
           }
 
           if(j == 0 && (i > 0 && i <= shift))
               {
                 mArray[i][j] = arrPerimetr[k];
                 k++;
               }
 
           if( 
                (j == 0 && i > shift &&  i < COL - 1)
                 ||
                (  i == ROW - 1 && j > 0 && j <= ROW )
                )
                   {
                        mArray[i][j] = arrPerimetr[m];
                       m--;
                   }
 
            printf("\t%d",mArray[i][j] );
        }
    }
    printf("\n");
    free(arrPerimetr);
    system("pause");
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы