domingo, 22 de noviembre de 2015

Algebra de matrices c++



Algebra de Matrices 



Códigos de ejemplo.

Suma de matrices.
#include<iostream>
using namespace std;
int main(){
int m,n;
  cin>>m>>n;
  int  A[m][n],B[m][n],C[m][n];
  for( int i=0;i<m;i++){
     for(int j=0;j<n;j++){
            cout<<"A["<<i<<"]["<<j<<"]:";
            cin>>A[i][j];
      }
  }
   for( int i=0;i<m;i++){
      for(int j=0;j<n;j++){
            cout<<"B["<<i<<"]["<<j<<"]:";
            cin>>B[i][j];
      }
   }
 for( int i=0;i<m;i++){
     for(int j=0;j<n;j++){
            C[i][j]=A[i][j]+B[i][j];
      }
 }
 for( int i=0;i<m;i++){
     for(int j=0;j<n;j++){
 
            cout<<C[i][j]<<endl;
      }
  }
}
Resta de matrices.
#include<stdio.h>
 
int a[4][4],b[4][4],c[4][4], i,j,k,l;
 
main()
{
 
printf("
");
printf("Este Programa Suma, Resta y Multiplica  Matrices de  4 * 4
");
printf("Introduce valores de la matriz a: 
");
 
 for(i=0; i<4; i++){
 
 for(j=0; j<4; j++){
 scanf("%d",&a[i][j]);
 }
 printf("
");
 }
 
printf("Introduce valores de la matriz b: 
");
 
 for(i=0; i<4; i++){
 
 for(j=0; j<4; j++){
 scanf("%d",&b[i][j]);
 }
 printf("
");
 }
 
 printf("Le Resta de la Matriz a-b es: 
");
 
 for(i=0; i<4; i++){
 
 for(j=0; j<4; j++){
 
 c[i][j]=a[i][j]-b[i][j];
 
 printf("  %d  ",c[i][j]);
 }
 printf("
 
");
 }
 
}
Multiplicación de matrices.
#include<stdio.h>
 
int a[4][4],b[4][4],c[4][4], i,j,k,l;
 
main()
{
 
printf("
");
printf("Este Programa Suma, Resta y Multiplica  Matrices de  4 * 4
");
printf("Introduce valores de la matriz a: 
");
 
 for(i=0; i<4; i++){
 
 for(j=0; j<4; j++){
 scanf("%d",&a[i][j]);
 }
 printf("
");
 }
 
printf("Introduce valores de la matriz b: 
");
 
 for(i=0; i<4; i++){
 
 for(j=0; j<4; j++){
 scanf("%d",&b[i][j]);
 }
 printf("
");
 }

printf("La Multiplicacion de la Matriz a*b es: 
");
 
 for(i=0; i<4; i++){
 
 for(j=0; j<4; j++){
   c[i][j]=0;
 for(k=0; k<4; k++){
 
 c[i][j]+=a[i][k]*b[k][j]; 
 
 
 }
 printf("  %d  ",c[i][j]);
 }
 printf("
");
 }
 
 
 
 
 
 
}

Matrices en c++

MATRICES.


Una matriz es un vector de vectores o un también llamado array bidimensional. La manera de declarar una matriz es C++ es similar a un vector:
1
int matrix[rows][cols];
int es el tipo de dato, matrix es el nombre del todo el conjunto de datos y debo de especificar el número de filas y columnas.
Las matrices también pueden ser de distintos tipos de datos como char, float, double, etc. Las matrices en C++ se almacenan al igual que los vectores en posiciones consecutivas de memoria.
Usualmente uno se hace la idea que una matriz es como un tablero, pero internamente el manejo es como su definición lo indica, un vector de vectores, es decir, los vectores están uno detrás del otro juntos.
La forma de acceder a los elementos de la matriz es utilizando su nombre e indicando los 2 subíndices que van en los corchetes.
Si coloco int matriz[2][3] = 10; estoy asignando al cuarto elemento de la tercera fila el valor 10.
No olvidar que tanto filas como columnas se enumeran a partir de 0. Bueno y para recorrer una matriz podemos usar igualmente un bucle. En este caso usando 2 for:
1
2
3
4
5
for(int i = 0; i < rows; i++) {
  for(int j = 0; j < cols; j++) {
    matrix[i][j] = i % j;
  }
}




MATRICES DINÁMICAS



Para crear una matriz dinámica debemos de crear un doble puntero int **pm y samos al igual que los vectores el operador new para reservar memoria y delete para liberar. Primero tenemos que crear el vector que contendrá a otros vectores especificando el numero de vectores que tendra este vector principal. Ejem:
1
2
3
4
pm = new int* [rows]; // creo el vector de punteros principal
for(int i = 0; i < rows; i++) {
  pm[i] = new int[cols]; // para crear los vectores dentro del vector principal
}
Ahora sí veamos un simple programa que crea una matriz dinámica, asigna valores, muestra el contenido de cada uno de los elementos los elementos así como sus direcciones de memoria.
También mostramos la matriz usando aritmética de punteros:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
using namespace std;
int main()
{
    // Puntero a una matriz
    int **pm;
    int cols;
    int rows;
    cout << "Ingresa nro de filas: ";
    cin >> rows;
    cout << endl;
    cout << "Ingresa nro de columnas: ";
    cin >> cols;
    pm = new int* [rows];
    for (int i = 0; i < rows; i++) {
        pm[i] = new int[cols];
    }
    cout << "Elementos de la Matriz con sus direcciones: " << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            pm[i][j] = i + j;
            cout << pm[i][j] << "--> ";
            cout << &pm[i][j] << endl;
        }
        cout << endl;
    }
    cout << endl;
    cout << "Elementos de la Matriz con sus direcciones, con aritmética de punteros: " << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            // Aritmética de punteros
            *(*(pm + i) + j) = i + j;
            cout << *(*(pm + i) + j) << "--> ";
            cout << &pm[i][j] << endl;
        }
        cout << endl;
    }
    // Elimino cada vector de la matriz
    for (int i = 0; i < rows; i++) {
        delete[] pm[i];
    }
    // Elimino el vector principal
    delete[] pm;
    return 0;<!--EndFragment-->
}

クリスマスの足跡ブログパーツ