tablice dwuwymiarowe

0

Napisz program, który wypełni macierz o wymiarach 5x5 liczbami naturalnymi losowanymi z zakresu od 0 do 15, wypisze zawartość tej macierzy na ekran, a następnie odwróci kolejność liczb leżących na przekątnej i ponownie wypisze zawartość tej macierzy na ekran.
mam tylko tyle kodu co niżej, nie wiem jak zrobić tą zamiane żeby była po przekątnej, macie jakiś pomysł ?

#include <time.h>
#define KOLUMNA 5
#define WIERSZ 5
void zapelnij_tablice (int macierz[5][5])
{
    int i,j;
    srand(time(0));
    for (i=0; i<KOLUMNA; i++)
        for (j=0; j<WIERSZ; j++)
        {
            macierz[i][j]=rand()%16;
        }
}

void wyswietl_tablice (int macierz[5][5])
{
    int i,j;
    printf("\n[\n");
    for (i=0; i<KOLUMNA; i++)
    {
        for (j=0; j<WIERSZ; j++)
            printf("%d\t", macierz[i][j]);
        printf("\n");
    }
    printf("]\n");
}

void zamiana(int macierz [5][5])
{
    int i,j;
    for (i=0; i<5; i++)
        for (j=0; j<1; j++)
    {
        int tmp;
        tmp=macierz[i][j];
        macierz[i][j]=macierz[j][i];
        macierz[j][i]=tmp;
    }
}

void wyswietl_zamiana (int macierz [5][5])
{
    int i,j;
    printf("\n[\n");
    for (i=0; i<5; i++)
        for (j=0; j<1; j++)
        {
            printf("%d\t", macierz[j][i]);
            printf("\n");
        }
        printf("]\n");
}

int main ()
{
    int macierz[5][5];
    zapelnij_tablice(macierz);
    wyswietl_tablice(macierz);
    zamiana(macierz);
    wyswietl_zamiana(macierz);
    return 0;
}
0

Tak samo jak odwracanie wektora:

void reverseDiagonal(int a[5][5]) {
	int k = 4, l = 4, tmp;
	for (size_t i = 0; i < k; ++i){
		for (size_t j = 0; j < l; ++j){
			if (i == j) {
				tmp = a[i][j];
				a[i][j] = a[k][l];
				a[k][l] = tmp;
				--k;
				--l;
			}
		}
	}
}

int main(){
	int arr[5][5];
	zapelnij_tablice(arr);
	wyswietl_tablice(arr);
	reverseDiagonal(arr);
	wyswietl_tablice(arr);
	printf("\n");
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1