Macierz transponowana BEZ używania dodatkowej tablicy

0

"Dopóki nie poszedłem na studia myślałem, że umiem programować" ~ Paulo Coelho.

Tak więc właśnie, chcę napisać program, który zwróci macierz transponowaną do danej, ale BEZ używania do tego dodatkowej tablicy. Z użyciem jej - zadanie wydaje się niezbyt skomplikowane.

Na razie napisałem taką głupotkę, chcąc ominąć używanie tablicy przez używanie zmiennych, ale to raczej był bezsens:

void transs(int k, int t[][n]){
	int i, j, a, b;
	
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			a=t[i][j];
			b=t[j][i];
			t[j][i]=a;
			t[i][j]=b;
		}
		
	}
} 

Ktoś pomoże, ktoś naprowadzi?

0
#define n 10
void transs(int t[][n])
for(j=i+1;j<n;++j)
  • i już będzie działać.

Dodatkowo:
# staraj się nie używać przyrostkowej formy inkrementacji no chyba że to jest konieczne.
# nie używaj int tam gdzie nie powinno być wartości ujemnych
# przestawienie wartości można zrobić przez jedną zmienną dodatkową tmp=A; A=B; B=tmp;

Nie da się przekazać bezpośrednio macierz dwu(lub więcej) wymiarową do funkcji.
Można ogarnąć to tak:

int tab[5][3];
void pokaz(tab,5,3);

void pokaz(int *tab,unsigned Y,unsigned X)
  {
   for(unsigned y=0;y<Y;++y,printf("\n")) for(unsigned x=0;x<X;++x) printf("%3d",tab[y*X+x]);
  }

Z tym że nie da się (w C/C++) napisać funkcji która by z macierzy int tab[5][3] zrobiła macierz int tab[3][5] bez użycia dodatkowej.
Możliwe że chodzi ci tylko o macierze kwadratowe, w takim razie nie ma problemu:

void transs(int t[],unsigned n)
  {
   unsigned y,x,p,q;
   int tmp;
   for(unsigned y=0;y<n;++y)
     {
      for(unsigned x=y+1;x<n;++x)
        {
         p=y*n+x
         q=x*n+y;
         tmp=t[p];
         t[p]=t[q];
         t[q]=tmp;
        }
     }
  }
0

No racja, znowu malutki, głupi błąd, dzięki.

Co do uwag - jakiś konkretniejszy powód, dlaczego nie używać postinkrementacji?

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