Witam. Nie wiem za bardzo jak wyglądać ma funkcja w moim programie która zamieniałaby np. dwa pierwsze wiersze wczytanej macierzy.
Byłbym wdzięczny za pomoc.
Mój kod programu:
#include
#include
#include
#include
void wczytajMacierz(int n, int tab[100][100])
{
int i, j;
for(i=0; i
for(j=0; j
{
printf("Podaj element tab[%d][%d]: ", i, j);
scanf("%d", &tab[i][j]);
}
}
void wypiszMacierz(int n, int tab[100][100])
{
int i, j;
for(i=0; i
{
for(j=0; j
printf("%4d", tab[i][j]);
printf("\n");
}
}
int zamianaWierszy(int n, int tab[100][100])
{
int i, j;
return 1;
}
int main()
{
int tab1[100][100];
int n;
printf("Podaj wielkosc macierzy: ");
if(!(scanf("%d", &n)==1 && getchar()=='\n'))
printf("Zle dane!!");
printf("\n");
wczytajMacierz(n, tab1);
printf("\n");
wypiszMacierz(n, tab1);
printf("\n");
zamianaWierszy(n, tab1);
getch();
return 0;
}
Optymalnie będzie zamienić referencje. Po jednej dereferencji dobierzesz się do adresów wskazujących na poszczególne wiersze, wystarczy, że je zamienisz. Nie przepisuj przypadkiem całego wiersza wyraz po wyrazie, bo to bez sensu.
Zbiór parametrów przekazywanych do funkcji proponuje rozszerzyć o jakieś r1, r2 <- które wiersze maja być ze sobą zamienione.
Zrobiłeś dokładnie tak, jak mówiłem, żebyś nie robił. Naiwne O(|r|), podczas gdy można dla wierszy wykonać to w czasie O(1), “przepinając” odpowiednio referencje. Ehh, życie… a raczej nierozumienie wskaźników.