Program transponujący macierze i wypisujacy je

0

Witam. Chce napisac program, który wczytuje macierz, wypisuje ja a nastepnie transponuje i ponownie wypisuje. Napisana mam funkcje transponujaca, lecz nie wiem jak poprawnie ja wypisać. Jak to zrobic?
Mój kod:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>
void wczytujaca(int x, int y,int macierz[y][x])
{
	for(int i=0; i<x; i++)
	{
	for(int j=0; j<y; j++)
		{
		printf("Podaj %d element %d kolumny: ", i+1, j+1);
		scanf("%d", &macierz[i][j]);
		}
	}
}
void wypisujaca(int x,int y, int macierz[y][x])
{
	for(int i=0; i<x; i++)
	{
	for(int j=0; j<y; j++)
		{
	printf("%d\t", macierz[i][j]);
		}
	printf("\n");
	}
}
int zamieniajaca(int x,int y, int macierz[y][x])
{
	int t_macierz[y][x];
	for(int i=0; i<y; i++)
	{
	for(int j=0; j<x; j++)
		{
		int tmp=macierz[i][j];
		t_macierz[j][i]=tmp;
		}
	}
	return t_macierz;
}
int wyzn(int x, int y,int macierz[x][y])
{
	return((macierz[0][0]*macierz[1][1])-(macierz[0][1]*macierz[1][0]));
}
int main(void)
{
	
	int a, b;
	printf ("Podaj ilosć kolumn macierzy: ");
	scanf ("%d", &a);
	printf ("Podaj ilosć wierszy macierzy: ");
	scanf ("%d", &b);
	int macierz[b][a];
	int dr_macierz[b][a];
	wczytujaca(b,a,macierz);
	printf("Macierz:\n");
	wypisujaca(b,a,macierz);
	printf("\n");
	dr_macierz[b][a]=zamieniajaca(b,a,macierz);
	wypisujaca(b,a,dr_macierz);
	return 0;
}
3

Nie rozumiem pytania. Przecież wypisujesz macierz tak samo przed i po transpozycji. Bląd u ciebie polega na tym, ze twoja funkcja transponujaca zwraca jakiegoś inta zamiast tablicy. Co więcej w ogóle nie rozumiesz jak działają przypisania bo robisz dr_macierz[b][a]=zamieniajaca(b,a,macierz); czyli do elementu [a][b] macierzy dr_macierz (która w ogóle nie ma tylu indeksów xD) wpisujesz tego inta którego zwróciła funkcja zamieniajaca a ktory jest adresem w pamięci lokalnej zmiennej w której wewnatrz funkcji zapisywana była transponowana macierz.

4

Elegancko byłoby stworzyć strukturę, macierz zawierającą tablicę dwuwymiarową, liczbę wierszy oraz kolumn; i operować na niej.

2

https://ideone.com/AiukJA

#include <stdio.h>
#include <stdlib.h>
 
typedef struct 
{
	size_t rows,cols;
	double *data;
} Matrix;

Matrix makeMatrix(size_t rows,size_t cols)
{
	Matrix m={rows,cols,0};
	m.data=(double*)malloc(rows*cols*sizeof(double));
	return m;
}

double *valueMatrix(Matrix *m,size_t r,size_t c)
{
	return &m->data[r*m->cols+c];
}

void showMatrix(Matrix *m)
{
	size_t r,c;
	for(r=0;r<m->rows;++r,printf("\n")) for(c=0;c<m->cols;++c) printf("\t%7.2lf"+!c,*valueMatrix(m,r,c));
}

void scanMatrix(Matrix *m)
{
	size_t r,c;
	for(r=0;r<m->rows;++r) for(c=0;c<m->cols;++c) scanf("%lf",valueMatrix(m,r,c));
}

void freeMatrix(Matrix *m)
{
	free(m->data);
	memset(m,sizeof(Matrix),0);
}

int main()
{
	Matrix m=makeMatrix(3,4);
	scanMatrix(&m);
	showMatrix(&m);
	freeMatrix(&m);
	return 0;
}

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