Witam.
Muszę zmodyfikować macierz o rozmiarach od 1 do 9 .
Kod niżej modyfikuje macierz (np. 4x4) w ten sposób:
org:
[948300][47731][459503][130050]
[987250][891212][697553][1071594]
[1165415][955787][1174668][999604]
[1077571][848460][1284764][93722]
zmodyfikowana (zamiana "połówkami" lewa z prawą):
[459503][130050][948300][47731]
[697553][1071594][987250][891212]
[1174668][999604][1165415][955787]
[1284764][93722][1077571][848460]
Teraz ja potrzebuję zmienić ostatnią część programu, aby program dzielił macierz na 4 ćwiartki i I zamieniał z IV :
tj.
[1174668][999604][459503][130050]
[1284764][93722][697553][1071594]
[1165415][955787][948300][47731]
[1077571][848460][987250][891212]
To dla parzystych wymiarów, gdy np. mamy macierz 5x5 to środkowe kolumny i wiersze zostawiamy na swoich miejscach.
#include "matrix.h"
int arr_rnd ( int arr[][N_MAX], int *m, int *n ){
int i, j;
if( 0 != arr_check( arr, *m, *n) ){ return -1; }
for( i = 0; i < *m; i++ ){
printf("\n%2d.", i);
for( j = 0; j < *n; j++ ){
printf("arr[%2d][%2d] = ", i, j);
arr[i][j]=((float)random()/RAND_MAX)*20;
}
}
return 0;
};
int arr_get ( int arr[][N_MAX], int *m, int *n ){
int i, j;
printf("Podaj rozmiary macierzy rozdzielone spacjami np. 3 3 = " );
scanf ("%d", m);
scanf ("%d", n);
if( 0 != arr_check( arr, *m, *n) ){ return -1; }
for( i = 0; i < *m; i++ ){
printf("\n%2d.", i);
for( j = 0; j < *n; j++ ){
printf("arr[%2d][%2d] = ", i, j);
scanf("%d", &arr[i][j]);
}
}
return 0;
};
int arr_disp ( int arr[][N_MAX], int m, int n ){
int i, j;
if( 0 != arr_check( arr, m, n) ){ return -1; }
for( i = 0; i < m; i++ ){
for( j = 0; j < n; j++ ){
printf("[%02d]",arr[i][j]);
}
printf("\n");
}
return 0;
};
int arr_check ( int arr[][N_MAX], int m, int n ){
if( m >= M_MAX || m <= 0 ){
printf("ERROR: bad value m = %d\n", m ); return -1;
}
if( n >= N_MAX || n <= 0 ){
printf("ERROR: bad value n = %d\n", n ); return -1;
}
if( arr == NULL ){
printf("ERROR: arr is NULL pointer\n") ; return -1;
}
return 0;
}
/* Część do modyfikacji : */
int arr_modifNR( int arr[][N_MAX], int *m, int *n ){
int i, j;
int temp_cell, end_j, start_j ;
if( 0 != arr_check( arr, *m, *n) ){ return -1; }
end_j = (*n) / 2;
start_j = end_j;
if( 0 != (*n) % 2 ){ /*end_j*/; start_j+=1; }
for( i = 0; i < *m ; i++ ){
for( j = 0; j < end_j ; j++ ){
temp_cell = arr[i][(start_j + j)];
arr[i][(start_j + j)] = arr[i][j];
arr[i][j] = temp_cell;
}
}
return 0;
}
Czy mógłby ktoś podpowiedzieć jak pozmieniać kod, aby program spełniał swoją funkcję.
Pozdrawiam