Manejo de Matrices en C

Posted on Viernes, abril 2nd, 2010 at 19:45

TP1 para UP.
Les dejo ejemplificado con estos ejercicios el manejo de matrices en C..

Cargar una matriz de 5 filas y 5 columnas y calcular y mostrar:
1. la matriz transpuesta
2. El promedio de los elementos de las dos diagonales (principal y secundaria)
3. Multiplicar la matriz por su transpuesta.
4. Determinar cuantos números primos hay en la matriz.

Funciones en el código:
- Cargar matriz cuadrada
- Mostrar matriz cuadrada
- Calcular matriz transpuesta
- Multiplicar matrices
- Sacar el promedio de las diagonales
- Contar la cantidad de primos en la matriz

Aca el codigo completo:

/* 
* TRABAJO PRACTICO N.1
*           (matrices)
* Compilado con wxDev - C++ en Windows Seven 
*/
#include <stdio.h>
#include <conio.h>
// Defino el Tamaño de la Matriz Cuadrada.
#define _TAM 3
 
//Declaracion de Funciones
void mat2_cargar(int M[_TAM][_TAM], int tm);
void mat2_mostrar(int M[_TAM][_TAM], int tm);
void mat2_traspuesta(int M[_TAM][_TAM], int tm, int T[_TAM][_TAM]);
void mat2_multiplicar(int A[_TAM][_TAM], int B[_TAM][_TAM], int tm, int C[_TAM][_TAM]);
float mat2_promDiagonales(int M[_TAM][_TAM], int tm);
int mat2_cantPrimos(int M[_TAM][_TAM], int tm);
 
/*******************************/
/***** TRABAJO PRACTICO 1 ******/
/*******************************/
 int main(){
    //clrscr();
    //Declaraciones
    int MAT[_TAM][_TAM];
    int TRAS[_TAM][_TAM];
    int MULTI[_TAM][_TAM];
    float prom=0.0;
    int primos=0;
 
    //Cargar Matriz MAT
    mat2_cargar(MAT, _TAM);
      //Mostrar Matriz MAT
      printf("\n\n** Matriz Cargada **\n");
      mat2_mostrar(MAT, _TAM);
 
    //Promedio de las Diagonales
    prom = mat2_promDiagonales(MAT, _TAM);
      printf("\n\n** Promedio de Elementos de las Diagonales de la Matriz **\n");
      printf("%.2f\n",prom);
 
    //Crear Traspuesta de Matriz MAT
    mat2_traspuesta(MAT, _TAM, TRAS);//da como resultado la matriz TRA
      //Mostrar TRA
      printf("\n** Matriz Traspuesta **\n");
      mat2_mostrar(TRAS, _TAM);
 
    //Multiplicar MAT*TRA, resultado
    mat2_multiplicar(MAT,TRAS,_TAM,MULTI);
      //Mostrar MULTI 
      printf("\n** Matriz Resultado de la multiplicacion **\n");
      mat2_mostrar(MULTI, _TAM);
    //Cantidad de Numeros primos entre los elementos de la Matriz
    primos = mat2_cantPrimos(MAT, _TAM);
      //Mostrar Numeros Primos
      printf("\n\n** Cantidad de Numeros Primos **\n");
      printf("%d",primos);
 
    getch();
    return 0;
  }
 
 
/**********************/
/***** FUNCIONES ******/
/**********************/
 
 
//Cargar Matriz Cuadrada
void mat2_cargar(int M[_TAM][_TAM], int tm){
  int i,j;  
  for(i=0;i<tm;i++){
    for(j=0;j<tm;j++){
      printf("%d,%d: ",i,j);
	  scanf("%d",&M[i][j]);
    }
  }
}
//Mostrar Matriz Cuadrada
void mat2_mostrar(int M[_TAM][_TAM], int tm){
  int i,j;
  for(i=0;i<tm;i++){
    for(j=0;j<tm;j++){
      printf("%d\t",M[i][j]);
    }
    printf("\n");
  }
}
//Sacar Traspuesta de una Matriz Cuadrada
void mat2_traspuesta(int M[_TAM][_TAM], int tm, int T[_TAM][_TAM]){
  int i,j;
  for(i=0;i<tm;i++){
    for(j=0;j<tm;j++){
      T[j][i] = M[i][j];
    }
  }
}
 
//Multiplicacion de matrices cuadradas.
void mat2_multiplicar(int A[_TAM][_TAM], int B[_TAM][_TAM], int tm, int C[_TAM][_TAM]){
  int i,j,k;
  int parc=0;
  for(i=0;i<tm;i++){
    for(j=0;j<tm;j++){
	  for(k=0;k<tm;k++){
        parc = parc + (A[i][k] * B[k][j]);
      }
      C[i][j] = parc;
      parc=0;
    }
  }
}
 
//Promedio de Diagonales
float mat2_promDiagonales(int M[_TAM][_TAM], int tm){
  int i,j;
  float cant=0.0;
  float prom=0.0;
  int sum = 0;
  int card = tm-1;
  for(i=0;i<tm;i++){
    for(j=0;j<tm;j++){
	  if((i==j) || (j==(card-i)) ){//Diagonal principal || secundaria
        sum = sum + M[i][j];
		cant++;
      }
	}
  }
  if(cant!=0)
    prom = sum/cant;
  return prom;
}
 
int mat2_cantPrimos(int M[_TAM][_TAM], int tm){
  int i,j,k;
  int c=0;
  int aux=0;
  for(i=0;i<tm;i++){
    for(j=0;j<tm;j++){
      if((M[i][j]==1) || (M[i][j]==2))
        c++;
      if(M[i][j]>2){
        for(k=2;k<M[i][j];k++){
          if((M[i][j]%k)==0)
	        aux++;
        }
        if(aux==0)
          c++;
        else
          aux=0;
      }
    }
  }
  return c;
}
You can leave a response, or trackback from your own site.

Leave a reply

Name (*)
Mail (will not be published) (*)
URI
Comment