Scusami, ma ero impegnato e non ti ho potuto rispondere prima di adesso. Eccoti del codice di esempio, puoi studiarlo e modificarlo per capire meglio:
codice:
#include <stdio.h>
#include <stdbool.h>
#define N 5
#define M 3
int main(int argc, char **argv) {
int j, k;
int mat[N][M];
int *p_mat = (int *)mat;
int tmp;
bool change;
//inserimento dati
printf("Inserire una matrice di %ux%u elementi:\n", N, M);
for(j = 0; j < N; j++) {
for(k = 0; k < M; k++) {
scanf("%d", &mat[j][k]);
}
}
while(getchar() != '\n'); //pulisce il buffer dopo la lettura con scanf
//stampa dati
printf("\n\n");
for(j = 0; j < N; j++) {
for(k = 0; k < M; k++) {
printf("%d ", mat[j][k]);
}
printf("\n");
}
//ordinamento dati
for(j = N*M - 1, change = false; j > 0; j--) {
for(k = 0; k < j; k++) {
if(p_mat[k] > p_mat[k+1]) {
tmp = p_mat[k];
p_mat[k] = p_mat[k+1];
p_mat[k+1] = tmp;
change = true;
}
}
if(!change) break;
}
//stampa dati
printf("\n\n");
for(j = 0; j < N; j++) {
for(k = 0; k < M; k++) {
printf("%d ", mat[j][k]);
}
printf("\n");
}
//alternativa di inserimento puramente dimostrativa
printf("\n\n");
printf("Inserire una matrice di %ux%u elementi:\n", N, M);
for(j = 0; j < N; j++) {
for(k = 0; k < M; k++) {
scanf("%d", &p_mat[j*M+k]);
}
}
while(getchar() != '\n');
printf("\n\n");
for(j = 0; j < N; j++) {
for(k = 0; k < M; k++) {
printf("%d ", mat[j][k]);
}
printf("\n");
}
for(j = N*M - 1, change = false; j > 0; j--) {
for(k = 0; k < j; k++) {
if(p_mat[k] > p_mat[k+1]) {
tmp = p_mat[k];
p_mat[k] = p_mat[k+1];
p_mat[k+1] = tmp;
change = true;
}
}
if(!change) break;
}
printf("\n\n");
for(j = 0; j < N; j++) {
for(k = 0; k < M; k++) {
printf("%d ", mat[j][k]);
}
printf("\n");
}
getchar();
return 0;
}