Wątek przeniesiony 2016-05-17 17:06 z C/C++ przez ŁF.

Transponowanie macierzy C

0

Funkcja ma transponować macierz, niestety program wypluwa jakieś bzdurne wyniki :

...
#define m 3
#define n  4

void transponuj(int tab[n][m])
{
    int tab2[m][n] ;
    int j, i ;

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            tab2[j][i]=tab[i][j];
    }
    for(i=0; i<n; i++)
    {

        for(j=0; j<m; j++)
        {

            printf("%d",tab2[j][i]);
            printf(" ");

        }
        printf("\n");
    }
}
2
  1. funkcja transponująca nie powinna nic drukować
  2. źle wyświetlasz. prawdopodobnie chcesz tak:
	for(i=0; i<m; i++)
	{
		for(j=0; j<n; j++)
		{
			printf("%d",tab2[i][j]);
			printf(" ");
		}
		printf("\n");
	}
0

Przemyśl dokladnie algorytm - nadpisujesz w tej pętli pola, które potem odczytujesz i zapisujesz jeszcze raz. Mysle ze najłatwiej Ci będzie rozwiązać ten problem przez wprowadzenie kopii tej tablicy i tam umieszczanie przekonwertowanej macierzy

0

dzięki, ale i tak dalej wyświetla bzdury :( Mógłbyś rzucić okien na tą część, która ma transponować?

1

Może podajesz bzdury na wejściu? U mnie działa: http://melpon.org/wandbox/permlink/kPvKpqeHwKm5Ekjh

0

Dobra, dzięki. Może faktycznie źle ją inicjuje

0

Dobra, wszystko śmiga :D Ale jest mały problem gdy zainicjujemy tablicę inną niż kwadratową. Wtedy po transponowaniu na ostatnich miejscach daje mi jakieś losowe liczby. Wie ktoś jak to zmienić?

#include <stdio.h>
#include <stdlib.h>
#define n 3
#define m 3
void transponuj(int tab[n][m])
{
    int tab2[m][n] ;
    int j, i ;

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
            tab2[j][i]=tab[i][j];
    }
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            printf("%d",tab2[i][j]);
            printf(" ");
        }
        printf("\n");
    }
}
void macierz(int tab[][m])
{
    int i, j ;
    srand(time(NULL));
    for (i=0; i<m; i++)
        for (j=0; j<n; j++)
            tab[i][j] = rand() % 10;
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
            printf("%3d",tab[i][j]);
        printf("\n");
    }
    printf("\n");
}
int main()
{
    int arr[n][m] ;
    macierz(arr) ;
    puts("macierz transponowana:") ;
    transponuj(arr);
}

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