Vectores

La idea de vector, en informática, es la siguiente: imaginad que en vuestro programa necesitáis 10.000 variables de tipo entero que representen cada una de ellas la temperatura de unos pueblos. Imagino que a nadie se le habrá ocurrido ponerse, en la declaración de variables, a declarar una por una las 10.000 variables que se necesitan. Dado que son variables que están relacionadas entre sí por su significado (y eso es algo que lo decide siempre el programador), parece lógico querer ponerles un nombre común, y que sea el índice (en qué componente de vector se encuentran) lo que las distinga. Vemos pues que los vectores nos dan unas ciertas ventajas: declarar muchas variables relacionadas entre sí de un mismo tipo de una vez, y acceder a cualquiera de ellas usando tan sólo un índice. Declararemos algo como esto (lo precisamos un poco más adelante):

Temperaturas: es un vector de reales con 10.000 componentes
Para referirnos a los elementos de un vector, tenemos que especificar el índice del elemento que estamos tratando: v[i]. Así, asignaremos un valor haciendo v[i] <- 3 y leeremos un valor haciendo m <v[i]. Asignaremos valores a cada una de esas componentes, bien a mano:

Temperaturas(1) Temperaturas(2) Temperaturas(3) Temperaturas(4) ...
o bien en un bucle:

<<<<-

23.5 22.7 25.2 20.4

Desde i=1 hasta i=10.000 hacer Temperaturas (i) <- Medida Temperatura fin desde
y, en la memoria del ordenador, lo que tendremos será algo como:

|--------| | 23.5 | |--------| | 22.7 | |--------| | 25.2 | |--------| | 20.4 | |--------| | ...... | |--------| | 19.2 | | -------|

Este es Temperaturas (1) Este es Temperaturas (2) Este es Temperaturas (3) Este es Temperaturas (4)

Este es Temperaturas (10000)

Para acceder a cualquier componente del vector, sólo tendremos que poner Temperaturas (posición), donde posición será el número de orden. Vamos a ser un poco más precisos con la nomenclatura: para declarar un vector de N elementos (numerados del 1 al N) de tipo X, lo haremos de la siguiente manera:

Variable: Vector[1..N] de Tipo;
Por ejemplo, para declarar un vector de 20 enteros, haremos:

v: Vector[1..N] de Entero;
¿Qué cosas podemos hacer con un vector? Esto depende de quiénes lo integren; me explico: si nuestro vector está formado por números, podremos sumar, restar y multiplicar vectores. Sin embargo, estas funciones ya NO forman parte del lenguaje de programación, si no que tendremos que hacérnoslas nosotros. En el caso de vectores numéricos, veremos cómo se puede escribir el pseudocódigo para algunas de ellas. Ya he mencionado que los vectores no sólo pueden ser de números, sino también de caracteres. Por ejemplo, podemos tener el siguiente vector de caracteres:

|-----| | A | |-----| | G |

'd'. como sabemos. Veamos algunos ejemplos: Queremos sumar dos vectores. Ahora.'l'. ¿cómo? Si nuestro vector representara algo en R3.('H'. Podemos querer que sea como la suma: que la componente i-ésima del vector sea el producto de las componentes i-ésimas de los vectores factores.' '.) ). que esto no es tan trivial como suena).'M'. y que tenga.. Pongamos que queremos calcular el producto escalar. y W al vector suma. los caracteres de la primera cadena para. diciendo cuántos caracteres tiene la cadena. supongamos que tenemos las cadenas siguientes: cadena1 <. tenemos dos productos (conocidos) para estos vectores: el vectorial y el escalar. . pero sí con caracteres :) Ahora. y este suele ser el de CONCATENAR. Antes.'u'. multiplicar dos vectores.'o') Puesto que al concatenar.'l'. el resultado es un vector.'l'.('H'.('H'. O podemos inventarnos nosotros el producto.'a'. obtener una nueva cadena de caracteres. de mayor tamaño.'o') y no Cadena <. en otro Rn.'o') y hacemos: Cadena <. primero. no se añaden espacios. ¿qué sentido tiene "sumar" dos cadenas de caracteres? Pues el que nosotros le queramos dar.'o'. Lo primero de todo. en cadena: Cadena <.'d'. El mundo de las cadenas de caracteres es un tanto especial. escribiendo str estamos haciendo referencia a la cadena completa.U(i) + V(i) Fin hacer La resta es igualmente sencilla (y queda como ejercicio al lector . Además. sino que el resultado es un número. Llamamos U y V a nuestros dos vectores. mientras que si escribimos str[i] nos estamos refiriendo al carácter i-ésimo de la cadena. pero..|-----| | J | |-----| | H | |-----| | R | |-----| Quizá sin mucho sentido.'a'. la suma de dos vectores tiene sentido si hablamos de vectores numéricos. Por ejemplo: str: Cadena[10]. Esto será una cadena de 10 caracteres.'M'. En el caso del producto vectorial. Nosotros emplearemos la siguiente convención: para declarar una cadena de caracteres.'o'.'n'.'u'. es que el número de componentes ha de ser el mismo (si nos vamos al símil de algún espacio Rn). tenemos el producto escalar.('M'.'n'.'a') cadena2 <.cadena1+cadena2 Tendremos. y lo dejamos por ahora. las obtendremos así: Desde i=1 hasta i=tamanyo hacer W (i) <.'u'.'n'. Sabemos que el resultado de esa multiplicación NO es un vector. Todo depende del sentido que le queramos dar a esa operación. Las componentes de W. Las forma de trabajar con las cadenas de caracteres depende del lenguaje de programación usado. he dicho que había que definirlas.'o'. Por ejemplo. los vectores de caracteres se usan para formar lo que se conoce bajo el nombre de "cadenas de caracteres". Como decía más arriba. a continuación. no hace falta un alarde mucho mayor de imaginación para poner el siguiente vector de caracteres: |-----| | H | |-----| | O | |-----| | L | |-----| | A | |-----| Vaya sorpresa: una palabra . usaremos el tipo "cadena".) Sí. pasar a tener los caracteres de la segunda cadena (mucho ojo. es decir.'d'. cuando he hablado de "operaciones" con vectores.

Siguiendo este proceso.. sería: desde i <. pero esta es una cuestión que podeis consultar en un curso de estructuras de datos. producto=0 desde i=1 hasta i=tamaño hacer producto <.-2.4. Para referirnos a la posición (i.3. m[1. Por ejemplo. sólo las que nosotros queramos usar. Podemos entender las matrices como vectores cuyas componentes son vectores. o tipos definidos por el usuario (estos los estudiamos en el capítulo siguiente). y para ello tendremos que programarlas.1. escribid una función que devuelva un vector de caracteres que sea la concatenación de los dos dados. ¿Por qué? Pues porque.. y dentro de la fila 2 volvemos a recorrer los elementos 1 a M de las columnas. del producto escalar.j] <. siendo N el número de filas que tendrá la matriz. Enteros.Dados dos vectores de caracteres. También podemos querer hacer otras cosas con vectores.. por ejemplo. en el caso. Recorrer los elementos de una matriz requiere de un bucle dentro de otro bucle. empezaremos entrando en la fila 1. Eso es todo por ahora :) Matrices Tenemos otra estructura. ORDENARLO.Escribid funciones que implementen las operaciones conocidas con vectores (y las que se os ocurran): suma y resta de vectores. columna 3) es el -1. y que tiene el mismo nombre: matriz (o "array".3) (fila 2.1 ]. Según este punto de vista. en casi todos los lenguajes de programación. Por ejemplo: m: Array[1..A[i. almacenando su suma en una tercera. en el caso en que queramos que cada componente sea el producto de las otras dos.1 2 -1 ] En este ejemplo tenemos una matriz formada por dos filas y tres columnas. Hecho esto. Para declarar una variable de tipo matriz escribiremos: m: Array[1. para cada fila que recorramos. esto es así.1 2 -1 ]. . Una algoritmo sencillo para sumar dos matrices. producto de un número por un vector.M] de Tipo.Por ejemplo.1 hasta i = N hacer desde j <. Unos pequeños ejercicios: 1. reales. la matriz del primer ejemplo es un vector de dos elementos: el primero. cadenas de caracteres. y dentro de la fila 1 recorreremos los elementos 1 a M de que constan las columnas. usaremos la nomeclatura m[i. el vector [ 4.j).1.1 hasta j = M hacer C[i.U(i)*V(i) fin hacer Y..j]. el algoritmo es un mero calco del de la suma: desde i=1 hasta i=tamanyo hacer W(i) <.3] <. 2. acabaremos recorriendo todos los elementos de la matriz. m[2. teniendo en cuenta que entonces serán de tipo numérico).5 0. De hecho. Es obvio que la suma de dos matrices sólo tiene sentido cuando las matrices a sumar tienen el mismo número de filas y de columnas. No perder de vista la declaración de una matriz: puede contener elementos de cualquier tipo. para sumar dos matrices (en el sentido matemático.N. para quien le guste más el inglés).j]. Por ejemplo: [ 3 -4. Una matriz representa la idea de "tabla": una disposición de la información en forma de filas y columnas. Así. pasamos a la fila 2. tendremos que ir elemento a elemento sumando los valores que se encuentren en las posiciones (i.5] de Entero.j] + B[i.producto + ( U(i)*V(i) ) fin hacer Resumiendo: no hay definidas operaciones para vectores. fin desde fin desde Análogamente realizaríamos la resta. fuertemente basada en la idea matemática de matriz. El elemento de la posición (2.5] <. tampoco tiene mucha complicación. y el segundo.. y M el número de columnas.1 ] [ 4.. el vector [ 3 -4.. tendremos que recorrer cada elemento de las columnas. como.5 0.j).

Tenemos una clara aplicación de las matrices en el mundo de la programación gráfica. Las transformaciones de los puntos pueden representarse en términos de unas ciertas matrices. . y obtener la transformación de un punto (una rotación. una traslación o un cambio de escala) consiste sencillamente en multiplicar las coordenadas del punto por la matriz correspondiente.