Odwrócenie przekątnej w tablicy

0

Witam.
Mam taki problem. Chcę odwrócić w tablicy przekątną.

void swap(int matrix[N][M]){
  int i,t;

  for(i=0;i<N-1;i++){
    t=matrix[(N-1)-i][(M-1)-i];
    matrix[(N-1)-i][(M-1)-i]=matrix[i][i];
    matrix[i][i]=t;
  }
}

napisałem coś takiego, ale nie wiem czy mam jakiś błąd w rozumowaniu czy coś skopałem.
Mianowicie co chcę zrobić to przenieść wartość (tablica 5x5)np..

  1. matrix[4][4] do jakieś zmiennej np w/w "t"
  2. potem matrix[4][4](ostatni wyraz) przyrównać do matrix[0][0]
  3. matrix[0][0] przyrównac do wczesniej zapisanej tymczasowo zmiennej "t"

Nie wiem czy moje rozumowanie jest błędne, czy też coś w kodzie.

W/w kod jedyne co robi to zamienia pierwszą z ostatnią, a dalej nic nie rusza. (czyt [1][1] i [3][3] zostają takie same)
N,M to wcześniej określone wymiary tablicy stałymi.

0

Rozrysuj to sobie na kartce papieru.

0

Odwrócić przekątną. Przekątna to struktura liniowa, lista, talica elementów, czyli jej odwrócenie to odwrócenie kolejności elementów. Aby to zrobić Zapisz ją sobie do tablicy(w środku pętli):

if (i == j) {
    ar[cnt] = matrix[i][j];
    ++cnt;
}

A potem prozaicznie Odwróć array ar.

0

Pomyśl trochę.
Twoja pętla odwraca przekątną dwa razy, wiec wracasz do stanu wyjściowego.


Jeszcze jedno to `i<N-1;` jest potrójnie źle: * z powodu opisanego powyżej * z powodu cichego założenia że `N == M` (jeśli to nie jest prawda skończy sie crashem) * `-1` jest zbędne - efekt jest taki, jak opisałeś, że błąd się objawia tylko dla wewnętrznych elementów.

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