Odwrócenie przekątnej w tablicy

Odwrócenie przekątnej w tablicy
K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

Kopiuj
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.

  • Rejestracja: dni
  • Ostatnio: dni
0

Rozrysuj to sobie na kartce papieru.

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5068
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):

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

A potem prozaicznie Odwróć array ar.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.