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

lunes, 23 de abril de 2012

Matrices con Boost

La librería Boost es un conjunto de bibliotecas de software libre preparadas para extender las capacidades del lenguaje de programación C++. Es decir que es una extensión de las librerías STL que incluye C++ estándar en la que entre otras cosas podemos encontrar una extensión que nos permite trabajar con matrices y operar con ellas tal y como veremos a continuación.

Instalación

Para instalar Boost en vuestro sistema os recomiendo que sigáis la guía oficial para vuestro sistema operativo (Linux, Windows). Existen versiones pre-compiladas y dependiendo del vuestra de distribución Linux en ocasiones Boost viene pre-instalado directamente. Por otro lado si trabajáis en Windows con Visual Studio podeis bajaros la versión binaria que proporciona BoostPro con la librería pre-compilada para cada una de las versiones de Visual Studio. 

Matrices

Y ahora vamos al grano. La clase template matrix nos permite trabajar de una forma fácil con matrices de cualquier tipo y realizar sobre ellas operaciones simples (sumas, restas, etc.) . En el siguiente ejemplo en primer lugar se importa la clase, después se definen los namespaces en los que se trabaja y finalmente se muestra el un código que realiza la carda de una matriz, una serie de operaciones y vuelve a mostrar los resultados:

// includes
#include <boost/numeric/ublas/matrix.hpp>
#include <iostream>
// seleccion namespaces
using namespace std;
using namespace boost::numeric::ublas;

int main(int argc, char* argv[]) {
    matrix<int> mt (3, 3);   
    cout << "Generacion de la matriz: " << endl;
    for (unsigned r=0; r < mt.size1(); r++) {
        for (unsigned c=0; c < mt.size2(); c++) {
            mt(r,c) = r+c;
            cout << mt(r,c) << " ";
        }
        cout << endl;
    }
    cout << "Operaciones con la matrix y resultados: " << endl;
    mt = mt + mt;    // operacion entre matrices
    mt = mt * 4;        // matriz y escalar.
    mt = mt / 2;
    mt = mt - mt;
    // Impresion resultados
    for (unsigned r=0; r < mt.size1(); r++) {
        for (unsigned c=0; c < mt.size2(); c++) {
            cout << mt(r,c) << " ";
        }
        cout << endl;
    }
   
}

 

Matrix en C++

Aquí tenéis el código:

#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;



int main(int argc, char* argv[])
{
    int a;
    srand(time(NULL));    
    // Inicialización de la tabla de caracteres seleccionables.
    char arr[64]={'A','0','B','C','3','D','E','7','F','G','H',' ','I','J','5','K',
                  '6','L','M','N','O','P','Q','!','R','S','T','U','V','W','X','Y',
                  ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Z','1','2','4','6','8',
                  '9',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', '};
    system("color 0A"); // Consola en verde.
    while (1)
    {
          Sleep(50);
          char pline[40];
          for(int i=0; i<39; i++)
          {
             a=rand()%64; // Selecciona un char aleatorio
             if (pline[i] != ' ') {   
                cout<<arr[a]<<" "; // Se imprime
             } else {
                cout<<" "<<" ";
             }
             pline[i] = arr[a];
          }
          cout<<endl;
    }
    system("pause");
    return 0;
}


Y aquí el resultado: