martes, 23 de junio de 2015

Matriz por vector en lenguaje C

En esta entrada de tutoriales en C aprenderemos a programar funciones conjuntamente con matrices, las mismas que son enviadas por el método de paso por dirección; es decir, los cambios realizadas en las funciones a estas matrices se vera reflejada en el punto de invocación (main) alterando así la información que estas matrices mantienen.


Enunciado del problema a resolver     

Ejercicio realizado en C, el cual permite ingresar una matriz de M x N elemenos y multiplicar por un Vector, para este ejercicio se utilizan funciones las cuales van a invocarse varias veces para aprovechar su re-utilización. 

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>

int leer_entero(char mensaje[50], int min, int max)
{
 int dato;
 do
 {
  printf("%s",mensaje);
  scanf("%d",&dato);
 }
 while(dato<min||dato>max);
 
 return dato; 
}
 
void leer_matriz(int m[50][50],int f,int c)
{
 srand(time(NULL));
 for(int i=0;i<f;i++)
 {
  for(int j=0;j<c;j++)
  {
   m[i][j]=1+rand()%(100);
  }
 }
}

void leer_arreglo(int v[50], int numero)
{
 srand(time(NULL));
 for(int i=0;i<numero;i++)
 {
  v[i]=1+rand()%(10);
 }
}

void multiplicar(int m[50][50], int f, int c, int v[50], int numero, int resultado[50])
{
 int acumulador;
 
 for(int i=0;i<f;i++)
 {
  acumulador=0;
  for(int j=0;j<c;j++)
  {
   acumulador=acumulador+(m[i][j]*v[j]);
  }
  resultado[i]=acumulador;
 } 
}

void imprimir_matriz(int m[50][50], int f, int c)
{
 printf("\n\n----Matriz---\n\n");
 for(int i=0;i<f;i++)
 {
  for(int j=0;j<c;j++)
  {
   printf("%3d\t",m[i][j]);
  }
  printf("\n");
 }
}

void imprimir_arreglo(int v[50], int numero)
{
 printf("\n\n----Vector---\n\n");
 for(int i=0;i<numero;i++)
 {
  printf("%3d\t",v[i]);
 }
}

int main()
{
 int matriz[50][50];
 int vector[50];
 int resultado[50];
 
 int filas=leer_entero("Ingrese el numero de filas: ",1,50);
 int columnas=leer_entero("Ingrese el numero de columnas :",1,50);
 int tamano_vector=leer_entero("Ingrese el tamaño del vector: ",1,50);
 
 leer_matriz(matriz,filas,columnas);
 imprimir_matriz(matriz,filas,columnas);
 leer_arreglo(vector,tamano_vector);
 imprimir_arreglo(vector,tamano_vector);
 
 if(columnas==tamano_vector)
 {
  multiplicar(matriz,filas,columnas,vector,tamano_vector,resultado);
  imprimir_arreglo(resultado,filas);
 }
 else
 {
  printf("\n\nNo se puede multiplicar, no sea ignorante.");
 }
 
 getch();
 return 0;
}


Cualquier duda escriba un comentario para poder despejarla, 

No hay comentarios:

Publicar un comentario