Перевернуть четные строки двумерного массива - 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
для вывода измененного массива.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д