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