Matrices en C: Recorrido, Multiplicación, Simetría e Identidad con Código Explicado
Matrices
Recorrer una matriz
void recorrerMatriz(int mat[][2], int cantF, int cantC)
{
int i, j;
for(i=0; i<cantF; i++){
for(j=0; j<cantC; j++){
printf("%d ", mat[i][j]);
}
printf("\n");
}
}
Multiplicación de matrices
void multiMatriz(int mat[][5], int fil, int col, int mat2[][2], int fil2, int col2, int mat3[][2])
{
int i,j,k;
int acum;
if(col!=fil2)
return;
for(i=0; i<fil; i++){
for(k=0; k<col2; k++){
acum=0;
for(j=0; j<col; j++){
acum+=mat[i][j]*mat2[j][k];
}
mat3[i][k]=acum;
}
}
}
Matriz simétrica
int matSimetrica(int mat[][TAM], int fil, int col)
{
int sim = 1, i, j;
if(fil!=col)
return 0;
for(i=0; i<(fil-1); i++){
for(j=(i+1); j<col; j++){
if(mat[i][j]!=mat[j][i]){
sim = 0;
}
}
}
return sim;
}
Matriz identidad
int matIdentidad(int mat[][TAM], int fil, int col)
{
int iden = 1, i, j;
if(matSimetrica(mat, fil, col)!=1)
return 0;
for(i=0; i<fil; i++){
for(j=i; j<col; j++){
if(j==i){
if(mat[i][j]==0)
iden = 0;
}
else{
if(mat[i][j]!=0)
iden =0;
}
}
}
return iden;
}
Parte inferior de la diagonal
void debajo_diagonal_pp(int mat [][TAM], int fil, int col)
{
int i, j;
for(i=0; i<fil; i++){
for(j=0; j<i; j++){
printf("%d ", mat[i][j]);
}
printf("\n");
}
}
Triángulo izquierdo
void triangulo_izq(int mat[][TAM], int fil, int col)
{
int i,j, k=fil/2;
for(i=0; i<fil; i++){
if(i<=fil/2){
for(j=0; j<=i; j++){
printf("%d ", mat[i][j]);
}
}
else{
k--;
for(j=0; j<=k; j++){
printf("%d ", mat[i][j]);
}
}
printf("\n");
}
}
Recorrer la matriz desde el centro
void recorrerMatrizDesdeCentro(int mat[][TAM], int filas, int col)
{
int i=filas/2, j=col/2;
int lim =1;
int movX = i-lim, movY = i-lim, cont=0;
while(cont<=filas*col)
{
while(i>movX)
{
printf("%d\n", mat[i][j]);
cont++;
i--;
}
lim++;
movX = i+lim;
if(cont>=filas*col)
return;
while(j>movY)
{
printf("%d\n", mat[i][j]);
cont++;
j--;
}
movY = j+lim;
if(cont>=filas*col)
return;
while(i<movX)
{
printf("%d\n", mat[i][j]);
cont++;
i++;
}
lim++;
movX = i-lim;
if(cont>=filas*col)
return;
while(j<movY)
{
printf("%d\n", mat[i][j]);
cont++;
j++;
}
movY = j-lim;
}
}