Перевернуть четные строки двумерного массива - C (СИ) (74984)

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

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

Здравствуйте, нужно перевернуть четные строки двумерного массива . переворот одномерного ясен но вот с двумерным не выходит. помогите добавить условие плиз!!! Вот что вышло но программа выдает ошибку
#include <iostream>
#include <stdlib.h>
#include <conio.h>
 
int **formMatr (int n, int m)
{
     
int **matr = new int *[n];
for (int i=0; i<n; i++)
matr[i]=new int [m];
return matr;
}
 
int **formMatr2 (int **matr,int n, int m)
{
 
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
  matr[i][j]=rand()%20;

return matr;
}
 
void print (int **matr, int n, int m)
{
    
    for (int i=0; i<n; i++)  
    {
    for (int j=0; j<m; j++)  printf ("%7d ",matr[i][j]) ;  
    printf ("\n" ) ;  
    }
}
int ** dell (int **matr,int n, int m)
{
    int i;
     if (i % 2 == 0)
         for (int i=0; i < n; i++)
        for (int j=0; j < m; j++)
        {
            int tmp = matr[i][j];
            matr[i][j] = matr[i][n-1-j];
            matr[i][n-1-j] = tmp;
        }
 }
int main ()
{
    int **matr;
    int n=3,m=3;
    matr=formMatr(n,m);
    matr=formMatr2(matr,n,m);
    print (matr,n,m);
     matr=dell(matr,n,m);
     print (matr,n,m);
    for (int i=0; i<n; ++i)
        delete [] matr [i];
    delete [] matr ;
    system("PAUSE");
    return 0;
    }

Решение задачи: «Перевернуть четные строки двумерного массива»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void setArray(int* b[],int x,int y)
{
int i,j;
for (j=0;j<y;j++)
    {
    int* a=calloc(x,sizeof(int));
        for (i=0;i<x;i++)
        {
        a[i]=1+rand()%9;
        }
    b[j]=&a[0];
    }
}
 
void printArray(int* a[],int x,int y)
{
int i,j;
    for (j=0;j<y;j++)
    {
        for (i=0;i<x;i++)
        {
        printf("%3d",a[j][i]);
        }
    printf("\n");
    }
}
 
void swapArray(int* b[],int x,int y)
{
int i,j,k,temp;
    for (j=0;j<y;j++)
    {
        if (j%2==0)
        {
            for (i=0,k=x-1;i<x/2;i++,k--)
            {
            temp=b[j][k];
            b[j][k]=b[j][i];
            b[j][i]=temp;
            }
        printf("\n");
        }
    }
}
 
 
 
int main()
{
// переменные
    int x,y,i,j;
// ввод размерности массива
 
    srand(time(0));
    printf("Please enter size array x:");
    scanf("%d",&x);
    printf("Please enter size array y:");
    scanf("%d",&y);
 
 
    int** b=calloc(y,sizeof(int));//выделения памяти под массив указателей
 
    setArray(b,x,y);    // функция заполнения массива случайными числами
    printArray(b,x,y);       // функция вывода массива
 
    swapArray(b,x,y);   // функция замены порядка элементов
    printf("\n");
    printArray(b,x,y);
    return 0;
}

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

  1. В функции setArray создается двумерный массив a размером x на y, заполняется случайными числами от 1 до 9 и сохраняется в b через calloc.
  2. В функции printArray двумерный массив a печатается построчно с использованием printf и символа табуляции \t для выравнивания элементов.
  3. В функции swapArray при j четном выполняется перестановка элементов в строке b[j] с помощью временной переменной temp.
  4. В функции main после ввода размеров массива и его заполнения случайными числами с помощью setArray и printArray, вызывается swapArray для перестановки четных строк и затем снова printArray для вывода измененного массива.

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


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

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

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