4.3 Matrices §1 Sinopsis Desde el punto de vista del programa, una matriz (array ó vector) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz [1]. Desde el punto de vista lógico podemos considerarlas como un conjunto de elementos ordenados en fila. Así pues, en principio todas las matrices son de una dimensión, la dimensión principal, pero veremos que los elementos de esta fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multi-dimensionales, aunque las más fáciles de “ver” o imaginar son las de dos y tres dimensiones.
Nota: aunque en C/C++ los conjuntos ordenados de elementos del mismo tipo se denomina matrices (arreglos), la idea aparece en otros lenguajes bajo distintos nombres. Por ejemplo, vector; lista (“list”) o secuencia (“sequence”). En
Como advertencia para los lectores que han utilizado matrices en otros lenguajes, señalar que quizás el aspecto más significativo del manejo de matrices en C++, es que el compilador desconoce su tamaño, de forma que el programador debe adoptar precauciones para no salir de sus límites, ya que el compilador permite referenciar elementos inexistentes, más allá del final de la matriz, con el consiguiente riesgo de error. En este capítulo abordaremos todo lo necesario para manejarlas en C++.
§2 Comentario Puede afirmarse que las matrices son un recurso de programación simple y socorrido; en realidad pueden considerarse como las “estructuras” de datos ( 1.8) más simples que cabe imaginar (todos los elementos del mismo tipo). Presentan la ventaja de que sus elementos son rápidamente accesibles, en especial si utiliza punteros en vez de subíndices, pero presentan una notable limitación: son de tamaño fijo; es preciso definir su tamaño desde el principio y no pueden ser fácilmente incrementadas o disminuidas sino mediante complejos procesos de copia.
Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar una lista ( 1.8).
Las matrices C++ se consideran tipos complejos ( 2.2), y se alojan en zonas de memoria contiguas, aunque tendremos ocasión de ver ( 4.3.6) que C++ permite definir unas seudo-matrices que en realidad no se almacenan de esta forma. Los programadores que hayan utilizado lenguajes con matrices dinámicas (incluso multi-dimensionales), sentirán una especial frustración con las limitaciones de las matrices C++. Sin embargo, el C++ Estándar ofrece en su Librería ( 5) alternativas interesantes a las matrices; en especial las clases vector, string (adaptada al manejo de cadenas de caracteres), list, deque y valarray. Esta última especialmente optimizada para el manejo de matrices numéricas.
Antes de abordar cualquier proyecto medianamente importante en el que se requiera el uso intensivo de matrices, aconsejamos vivamente evaluar las posibilidades que ofrecen al respecto las estructuras de la Librería Estándar, en especial si se trata de matrices cuyo tamaño deba cambiar, o no pueda ser conocido en tiempo de compilación.
Inicio.
[1] De un tiempo a esta parte, quizás desde que presto atención al tema, encuentro que prácticamente todos los libros de informática que consulto, hablan de “arreglos” cuando se refieren a “arrays”. Incluyendo no solo los traducidos del inglés (caso muy frecuente). También los escritos originariamente en español, incluyendo los de escritores supuestamente españoles (profesores de alguna Universidad española). La verdad es que no entiendo muy bien el porqué. Aunque los anglosajones han utilizado siempre “arrays” para este significado, no es menos verdad que los españoles hemos utilizado siempre “matrices” para referirnos a ellas, tanto en obras propias como en traducciones. Como todavía no he tirado los libros, puedo poneros algunos ejemplos: “Álgebra Moderna” de A. Lentin y J. Rivadud. Versión Española Editorial Aguilar 1967 (es una traducción del original francés). “Mecánica Racional” Carlos Mataix (este si es español: Catedrático de la Escuela Técnica Superior de Ingenieros Industriales de Madrid). “Programación Lineal” Robert W. Llewellyn (traducción del original inglés). Edit. Marcombo S.A. 1968. Alguno puede argumentarme que son algo antiguos, y que el lenguaje ha cambiado desde entonces. La verdad es que respeto cualquier opinión sensata, pero no creo que haya cambiado tanto (de ser así no me entendería con mis compatriotas). Sospecho que tal vez sea una peculiaridad del español de América, y que los editores obliguen a los autores a utilizar determinadas formas de lenguaje con el fin de que sus libros tengan un mercado más amplio; aunque también pudiera ser el resultado de esa estúpida moda de lo “Políticamente correcto” que obliga a llamar “morenos” a los negros. Sea cual sea la razón, permitidme que siga refiriéndome a los “arrays” como “matrices” (así me lo enseñaron). Decir otra cosa me costaría tanto trabajo como llamar guagua al autobús.
TIPOS DE MATRICES
Un tipo de matriz se define especificando el tipo de elemento de la matriz, el rango (número de dimensiones) de la matriz y los límites superior e inferior de cada dimensión de la matriz. Todos los elementos se incluyen en todas las firmas de un tipo de matriz, aunque se pueden marcar como proporcionados dinámicamente y no estáticamente. El motor en tiempo de ejecución crea automáticamente tipos de matriz exactos cuando son necesarios; no es necesaria una definición aparte de los tipos de matriz. Las matrices de un tipo dado sólo pueden contener elementos de ese tipo. Para obtener más información sobre el tipo de un valor, vea la sección “Valores y objetos” en Información general acerca del sistema de tipos común.
Los valores de tipo de matriz son objetos. Los objetos de matriz se definen como una serie de ubicaciones donde se almacenan los valores del tipo de elemento de la matriz. El número de valores repetidos se determina mediante el rango y los límites de la matriz.
Los tipos de matriz derivan del tipo System.Array. Esta clase representa todas las matrices independientemente del tipo de elementos o de rango. Las operaciones definidas en las matrices son: asignación de una matriz basándose en la información de tamaño y de límite inferior; indización de una matriz para leer y escribir un valor; cálculo de la dirección de un elemento de una matriz (un puntero administrado) y búsqueda del rango, los límites y el número total de valores almacenados en una matriz.
Las matrices de una dimensión con un límite inferior a cero para sus elementos (denominados en ocasiones vectores) tienen un tipo basado en el tipo de los elementos de la matriz, independientemente del límite superior. Las matrices con más de una dimensión, o con una dimensión pero con un límite inferior distinto de cero, tienen el mismo tipo si tienen el mismo tipo de elemento y rango, independientemente del límite inferior de la matriz. No se admiten matices con cero dimensiones.
---Estoy invitando a todos los maestros y profesionales de esta area y/o carrera a colaborar construyendo este sitio dedicado a esta hermosa y util profesion aportando el material apropiado a cada uno de los mas de 1,000 temas que lo componen.
Tambien los invito a aportar material a los mas de 30,000 temas que constituyen las 30 carreras profesionales que se imparten en los Institutos Tecnologicos de Mexico y se encuentran en este sitio.
www.MiTecnologico.com es un esfuerzo personal y de muchos amigos de MEXICO y el Mundo Hispano por devolver algo de lo mucho que hemos recibido en el proceso de la educacion superior, saludos Prof Lauro Soto, Ensenada, BC, Mexico
PARA EMPEZAR SOLO USAR OPCION edit ABAJO Y EMPIEZA A CONSTRUIR , SALUDOS Y MUCHAS GRACIAS
Competencias Digitales (Tic’s Basicas) a construir:
- Usar (click en )www.Google.com para buscar y localizar UN material academico apropiado y que se pueda recomendar para el tema, ver VIDEO BUSQUEDAS abajo en esta pagina.
- En el post ( o tema ) apropiado en el Libro de Blogger, pegar el material localizado y que se recomienda para este tema, ver VIDEO BLOGGER abajo en esta pagina.
pd: Recordar incluir la fuente del tema usando el formato de citacion apropiado, ver VIDEO WIKIPEDIA abajo en esta pagina.
- En el editor de Blogger usar colores para destacar los parrafos mas importantes y usar subrayados para las citas mas relevantes.
- En el post ( o tema ) apropiado en el libro en Blogger, para incluir ecuaciones o notacion matematica se debera usar el icono del editor de Blogger IMAGE y construir esta notacion matematica con imagenes Latex, ver VIDEO LATEX ABAJO.
- Construir al final y despues de la fuente del material, un breve resumen ( no mas de 2–3 parrafos) explicando palabras propias el contenido del tema.
pd: Se pueden usar alguna de las citas que encontradas dentro del tema, solo recordar encerrarla entre comillas.
pd: Se pueden usar tambien cambios en fonts para darle mas visibilidad, consistencia y relevancia al resumen del tema.
- PUNTOS EXTRAS Si se usa una segunda fuente valiosa de informacion y recordar encadenar los dos materiales mediante uno o dos parrafos apropiados.
- Enviar a el maestro o compañeros un correo electronico que incluya la liga a el tema en blogger para revision, recomendacion, sugerencias y evaluacion, ver VIDEO LIGAS GMAIL abajo.
- Sacar una cuenta (click en)http://docs.google.com, usando el correo de Gmail y tratar de conseguir el mismo usuario que se construyo en Gmail y Blogger ver VIDEO GOOGLE DOCS abajo en esta pagina.
pd: Si ya se tiene una cuenta ignorar esta competencia digital.
pd: Google Docs es el equivalente a OFFICE pero con la caracteristica que todos sus componentes ( procesador de palabras, presentacion electronica y hoja de calculo) estan completamente en internet, es decir todos los archivos o material estaran en linea, seguros y siempre disponibles, ademas de que se pueden trabajarlos desde cualquier pc, ya sea la personal, la del laboratorio de la escuela o la de un lugar publico como la biblioteca o un cafe internet.
- Construir una Presentacion Electronica ( usando muy pocos slides) del tema en GOOGLE DOCS e incrustrarla en el tema de bloger ver VIDEO GOOGLE DOCS en esta pagina abajo.
pd: Recordar que una presentacion electronica, es solamente un resumen muy condensado del tema ( o mapa o guia mental ), que ayuda a recordar los elementos y conceptos mas basicos del tema, cuando se estan exponiendo frente a un grupo.
pd: No olvidar incluir un primer slide con el titulo de la presentacion electronica, un segundo slide con un indice de la presentacion electronica y un ultimo slide con dos o tres parrafos de conclusiones y bibliografia.
- Buscar en Google Imagenes o www.Flickr.com o www.PhotoBucket.com una galeria de fotos o de imagenes apropiadas al tema actual,
- Para los casos de Photobucket y Flicker, ambos sitios proporcionan ligas a sus imagenes y tambien objetos (los recuerdan??), que se pueden incluir en el tema del libro apropiado en Blogger.
pd: para estos sitios deberan obtener una cuenta usando el correo de gmail y de preferencia obtener el mismo usario que se ha venido manejando a lo largo del curso.
pd: Tratar de usar resoluciones y tamaños de imagenes chicos o medianos, recordar que todo este material termina en el post del tema en Blogger y esa pagina no tiene mucho espacio para desplegar fotos o imagenes.
pd: El formato apropiado para fotos o imagenes es JPG, tratar de no usar otros formatos.
pd: Se puede construir y conseguir esta coleccion o galeria de imagenes con:
1) Usando Google Imagenes, recordar conseguir solo imagenes que tengan permiso de publicacion abierto, no usar imagenes o fotos que tengan derechos reservados.
pd: Estas fotos almacenarlas en un folder en el desktop o escritorio de su computadora y subirlas a el post en blogger usando el icono IMAGE del editor de Blogger.
2) Flickr y Photo Bucket tambien tienen una gran cantidad de imagenes que se pueden usar o mejor dicho enlazar a el tema o post en Blogger.
3) Tambien se puede usar la camaras digitales o las camaras de sus telefonos celulares.
4) Tambien se puede usar el programa o aplicacion llamado Srip32.exe( solo buscar srip32 en google) bajarlo e instalarlo, este programa permite capturar una pantalla de la pc, es decir si se encuentra un sitio con imagenes o incluso texto apropiado o relevante al tema, capturar la pantalla con srip32 y ya se tendra la imagen, ver VIDEO Srip32 abajo.
- Incluir al menos una imagen de cada uno de los dos sitios (flickr y Photobucket) en el tema o post que se esta construyendo en Blogger.
- PUNTOS EXTRAS Si se incluyen una galeria completa de imagenes apropiadas desde cualquiera de estos sitios de FLICKR o Photobucket.
- Sacar una cuenta (click en)www.DivShare.com, usando el correo de Gmail y tratar de conseguir el mismo usuario que se consiguio en Gmail y Blogger y Flickr ver VIDEO DIVSHARE abajo en esta pagina.
pd: Si ya se tiene una cuenta ignorar esta competencia digital.
pd: Usar Divshare para almacenar material en audio (MP3) apropiado a el tema ( no usarlo para almacenar material comercial o les suspenden la cuenta)
pd: El material en Audio, con formato MP3 se debera producir usando un microfono en la pc y programas de aplicacion apropiados, llamados editores de audio, un ejemplo de ellos es el SOUND RECORDER que ya viene en Windows, pero se recomienda usar mejor AUDACITY ( solo buscar en google AUDACITY) bajarlo e instalarlo, ver VIDEO AUDACITY abajo.
- Crear al menos dos archivos de audio mp3:
1) El primero de ellos sera la lectura completa de este tema en voz apropiada. ( o aprender a editar con audacity la voz)
2) El segundo de ellos sera un resumen del tema. ( buena voz o editarla con audacity)
3) Ambos archivos subirlos a Div Share (recordor que tienen que ser MP3) y el reproductor que proporciona gratis Div Share, ver VIDEO DIVSHARE abajo e insertarlo en el lugar apropiado del tema que se esta construyendo en Blogger.
4) Ejemplo del reproductor incrustado en una pagina:
- Sacar una cuenta (click en)www.YouTube.com, usando el correo de Gmail y tratar de conseguir el mismo usuario que se consiguio en Gmail y Blogger y Flickr.
pd: Si ya se tiene una cuenta ignorar esta competencia digital.
- Para producir video se pueden usar tres fuentes:
1) Localizar Videos apropiados en Youtube.
2) Usar nuestras camaras digitales o nuestros telefonos celulares para producir video.
3) Producir un video de la propia pantalla de la computadora ( muy similar a lo que se hizo con Srip32) pero usando un programa especializado en video, tal como CAMSTUDIO (click en www.CamStudio.org) bajar e instalar ( no olvidar bajar e instalar el CODEC que esta abajo en el mismo sitio.
3.1) para Usar Camstudio solo recordar que es muy similar a Srip32 Solo que el resultado final es un archivo de video AVI.
- Producir un video de resumen del tema (usar camstudio con el fondo de la pagina con el tema e irlo comentando en voz apropiada)
- Producir un video en vivo con la exposicion del tema ( pueden usar la presentacion electronica de fondo o cualquier otro material, pizarron, filminas, rotafolios, etc.)
- Subir los videos a su cuenta en Youtube e incluirlos o ligarlos en la pagina en Blogger, tambien los pueden subir directamente a BLOGGER ver VIDEO BLOGGER VIDEO abajo.
Saludos y suerte prof Lauro Soto, Ensenada, BC, Mexico.