В заданной матрице циклически сдвинуть элементы каждой строки вправо на число позиций, равное индексу строки - C (СИ)

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

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

Не понимаю, почему при запуске программы компилятор вылетает. Задание - написать программу, которая в двумерном статическом массиве типа int(при этом элементы инициализируются случайным образом) размеров N строк на M столбцов циклически сдвигает элементы каждой строки вправо на число позиций, равное индексу этой строки. Вот, собственно, и программа:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
const unsigned M=5;
 
void init_array(int A[][M], unsigned n);
void print_of_array(int A[][M], unsigned n);
void swap (int *pa, int *pb);
void changing_of_array(int A[][M], unsigned n);
int main(){
    const unsigned N=5;
        int A[N][M];
        init_array(A,N);
        print_of_array(A,N);
        printf("\n");
                printf("\n");
        changing_of_array(A,N);
        print_of_array(A,N);
        getchar();
        return 0;
    
}
 
void init_array(int A[][M], unsigned n){
    for (unsigned i=0; i<n; i++)
    for (unsigned j=0; j<M;j++)
    A[i][j]=rand()%100;
}
void print_of_array(int A[][M], unsigned n){
    for (unsigned i=0; i<n; i++){
    for (unsigned j=0; j<M;j++)
        printf("%5d", A[i][j]);
    printf("\n");}
}
void swap(int *pa, int *pb){
    int temp=*pa;
    *pa=*pb;
    *pb=temp;
    return;
                                      }
void changing_of_array(int A[][M], unsigned n)  {
    unsigned l=1;
    for (unsigned i=1; i<n; i++)              {
    for (unsigned j=M-1; j+1>0; j--){
        if ((j-l)<0) break;
    swap(&A[i][j],&A[i][j-l]);            }
l++;    
                                                             }
    
                                                                  }

Решение задачи: «В заданной матрице циклически сдвинуть элементы каждой строки вправо на число позиций, равное индексу строки»

textual
Листинг программы
    unsigned i, j;
    for (i=0; i<n; i++)
        for (j=0; j<M; j++)
            A[i][j]=rand()%100;

Объяснение кода листинга программы

  1. Объявляются две переменные i и j типа unsigned, которые будут использоваться в цикле.
  2. Задается условие для цикла for, которое будет выполняться, пока значение переменной i меньше n.
  3. Внутри цикла for, объявляется вложенный цикл for, который будет выполняться, пока значение переменной j меньше M.
  4. Внутри вложенного цикла for, каждый элемент матрицы A[i][j] присваивается случайное число от 0 до 99 с помощью функции rand()%100.
  5. После завершения циклов, матрица A заполнена случайными числами.

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


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

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

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