viernes, 11 de julio de 2014

EVALP6

                 
                MATRICES

una matriz en terminos de lenguaje de programacion , es un conjunto de variables que se encuentran contiguas , una tras otra , dentro de la memoria del ordenador. 

en progamación las matrices son muy utiles , puesto que determinar la direccion en memoria de una variable dentro de una matriz es muy facil. solo hace falta saber la direccion en memoria del primer elemento de la matriz , puesto que los demas elemntos se encuentran contiguos.
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.



Matrices Dinamicas

Dejando afuera el uso de matrices en C++, en donde uno puede declarar los valores luego de una lectura. Podemos decir que solo hemos usado matrices estáticas, ya que no permitían el cambio de dimensiones una vez que el programa fuese compilado.
Con la asignación dinámica de memoria un puede definir en tipo de ejecución la cantidad de memoria, con las ventajas y desventajas que esta posee.
Solo para demostrar rapidamente el potencial y el por que usarlo, vean lo siguiente:
Anteriormente si uno deseaba leer una cadena de caracteres, declaraba un array, supongamos que deseamos leer un nombre, pero, no todos se llaman igual es por esto que debiamos darle suficiente espacio al arreglo.
Ejemplo


#include <stdio.h>
#include <stdlib.h>

int main()
{
int *puntero=NULL;
puntero = (int *)malloc(100*sizeof(int)); //Asignacion dinamica de memoria

if (puntero == NULL)  //evaluacion de condicion.
{
printf("NO hay suficiente espacio en memoria"); //Mensaje
return -1;                        //Cierra el programa con un error.
}else
printf("Se asigno memoria  ");

free(puntero);//liberacion de memoria
return 0;
}
//El programa solo asigna memoria, imprime un mensaje en dependecia de la condicion y libera


Matrices Dinamicas de Dos Dimensiones
En esta parte aprenderemos como usar la asignacion dinamica en matrices bidimensionales. Este proceso se divide en dos partes:
·         Asignar memoria a una matriz de punteros, cuyos elementos referenciaran cada una de las filas de la matriz de dos dimensiones que se desea crear.
·         Asignar memoria para cada una de las filas. El numero de elementos de cada fila puede ser variable.
Una vista rapida seria:
#define FILAS 5
#define COLS 6
...
int **matriz;
matriz = (int **)malloc (FILAS*sizeof(int *));

for (i=0;i<FILAS;i++)
matriz[i] = (int *) malloc (COLS*sizeof(int));


Suma de Matrices en C (ARRAYS)

Suma de Matrices (Arrays bidimensionales) en C. Sencillo programa que muestra el uso más simple de los arrays bidimensionales, asi como el de funciones de bucle del tipo for:



#include <stdio.h>

const int dim=100;
int i,j,fil,col;
float MatA[dim][dim],MatB[dim][dim]; /*Tamaño maximo de 100x100*/

int main(void)
{
    printf("Programa que suma matrices:\n\n");
    printf("Introduzca el tamano de las matrices:\n\n Filas:"); scanf("%i", &fil);
    printf(" Columnas: "); scanf("%i", &col);
   
 
    /*Se piden los datos*/
    printf("\n\nIntroduca los datos de la Matriz A:\n");
    for(i=1;i<=fil;i++)
    {
        for(j=1;j<=col;j++)
        {
            printf("\nIntroduzca la coordenada (%i,%i): ",i,j); scanf("%f", &MatA[i][j]);
        }
    }
   
 
    printf("\n\n\nIntroduca los datos de la Matriz B:\n");
    for(i=1;i<=fil;i++)
    {
        for(j=1;j<=col;j++)
        {
            printf("\nIntroduzca la coordenada (%i,%i): ",i,j); scanf("%f", &MatB[i][j]);
        }
    }
   
 
    for(i=1;i<=fil;i++)
    {
        for(j=1;j<=col;j++) MatA[i][j]=MatA[i][j]+MatB[i][j]; /*Se guarda el resultado de la suma en la matriz A*/
    }
   
 
    printf("\n\nLa matriz resultado es:\n\n");
    for(i=1;i<=fil;i++)
    {
        for(j=1;j<=col;j++) printf("%10f",MatA[i][j]);
        printf("\n");
    }
    return 0;
}













No hay comentarios:

Publicar un comentario