Mostrando entradas con la etiqueta arreglos. Mostrar todas las entradas
Mostrando entradas con la etiqueta arreglos. Mostrar todas las entradas

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,