lunes, 26 de enero de 2015

Matrices

5 fuentes bibliográficas de la definición matrices

-      Una matriz es una estructura de datos, o más técnicamente, un espacio de memoria que permite almacenar una colección de elementos, todos del mismo tipo. [Libro de programación: Arreglos y matrices].


 Las matrices son vectores de vectores. [El lenguaje de programación C - Vectores y matrices]

-       Es una colección de posiciones de almacenamiento de datos, todos ellas con el mismo tipo de dato. [Vectores y matrices]

-       Es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. [C++ (Matrices) ]

-       Una matriz puede verse como un vector donde cada componente es, a su vez, otro vector. [Fundamentos de programación: Vectores y Matrices]

Elaborar un mentefacto



5 ejemplos de cómo inicializar un array bidimensional
1)     char cuadro[3][3] = {
{ ‘B’, ‘N’, ‘N’ },
{ ‘N’, N’, ‘N’ },
{ ‘B’, ‘B’, ‘B’ }
};
2)     matriz={{1,2,3,4},{5,6},{7,8,9,10,11,12},{13}};


3)     ///Array bidimensional en C.
   #include <stdio.h>
   
   //Primer parámetro son los elementos
   //Pero como inicializamos el array de una,
   //es que esta vacío.
   //Segundo parámetro es la cantidad de letras
   char matriz_bidimensional[][10]=
   //Prueben a poner el número 8 en el segundo parámetro
  {
       "uno",      "dos",      "tres",     "cuatro",
       "cinco",    "seis",     "siete",    "ocho",
       "nueve",    "diez",     "once",     "doce",
       "trece",    "catorce""quince",   "dieciseis"
       //y... etc...
   };

4)     int valores[2][3] = { {10, 20, 30}, {0,1,2} };


5)     int matriz[3][4] = { 1, 2, 3, 4, 4,1,2, 3, 3, 2,1,4 };

Lluvia de ideas




Explicación de punteros de arrays

Un array multidimensional puede ser expresado como un array de punteros en lugar de como un puntero a un grupo contiguo de arrays. En estos casos el nuevo array será de una dimensión menor que el array multidimensional. Cada puntero indicará el principio de un array de dimensión (n-1). 

En muchos aspectos, existe una equivalencia entre arrays y punteros. De hecho, cuando declaramos unarray estamos haciendo varias cosas a la vez:
  • Declaramos un puntero del mismo tipo que los elementos del array.
  • Reservamos memoria para todos los elementos del array. Los elementos de un array se almacenan internamente en la memoria del ordenador en posiciones consecutivas.
  • Se inicializa el puntero de modo que apunte al primer elemento del array.
Las diferencias entre un array y un puntero son dos:
  • Que el identificador de un array se comporta como un puntero constante, es decir, no podemos hacer que apunte a otra dirección de memoria.
  • Que el compilador asocia, de forma automática, una zona de memoria para los elementos delarray, cosa que no hace para los elementos apuntados por un puntero corriente.
Ejemplo:
int vector[10]; 
int *puntero;
 
puntero = vector; /* Equivale a puntero = &vector[0]; (1) 
                     esto se lee como "dirección del primer elemento de vector" */ 
(*puntero)++;     /* Equivale a vector[0]++; (2) */ 
puntero++;        /* puntero equivale a asignar a puntero el valor &vector[1] (3) */

¿Qué hace cada una de estas instrucciones?:
En (1) se asigna a puntero la dirección del array, o más exactamente, la dirección del primer elemento del array vector.
En (2) se incrementa el contenido de la memoria apuntada por puntero, que es vector[0].
En (3) se incrementa el puntero, esto significa que apuntará a la posición de memoria del siguiente elemento int, y no a la siguiente posición de memoria. Es decir, el puntero no se incrementará en una unidad, como tal vez sería lógico esperar, sino en la longitud de un int, ya que puntero apunta a un objeto de tipo int.
Análogamente, la operación:
puntero = puntero + 7;
No incrementará la dirección de memoria almacenada en puntero en siete posiciones, sino en 7*sizeof(int).

No hay comentarios:

Publicar un comentario