Перевернуть четные строки двумерного массива - 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;
}
Объяснение кода листинга программы
- В функции
setArrayсоздается двумерный массивaразмеромxнаy, заполняется случайными числами от 1 до 9 и сохраняется вbчерезcalloc. - В функции
printArrayдвумерный массивaпечатается построчно с использованиемprintfи символа табуляции\tдля выравнивания элементов. - В функции
swapArrayприjчетном выполняется перестановка элементов в строкеb[j]с помощью временной переменнойtemp. - В функции
mainпосле ввода размеров массива и его заполнения случайными числами с помощьюsetArrayиprintArray, вызываетсяswapArrayдля перестановки четных строк и затем сноваprintArrayдля вывода измененного массива.