Sie sind auf Seite 1von 4

Vectores

La idea de vector, en informtica, es la siguiente: imaginad que en vuestro programa necesitis 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 declaracin de variables, a declarar una por una las 10.000 variables que se necesitan. Dado que son variables que estn relacionadas entre s por su significado (y eso es algo que lo decide siempre el programador), parece lgico querer ponerles un nombre comn, 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 slo un ndice. Declararemos algo como esto (lo precisamos un poco ms 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, slo tendremos que poner Temperaturas (posicin), donde posicin ser el nmero de orden. Vamos a ser un poco ms 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 quines lo integren; me explico: si nuestro vector est formado por nmeros, podremos sumar, restar y multiplicar vectores. Sin embargo, estas funciones ya NO forman parte del lenguaje de programacin, si no que tendremos que hacrnoslas nosotros. En el caso de vectores numricos, veremos cmo se puede escribir el pseudocdigo para algunas de ellas. Ya he mencionado que los vectores no slo pueden ser de nmeros, sino tambin de caracteres. Por ejemplo, podemos tener el siguiente vector de caracteres:

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

|-----| | J | |-----| | H | |-----| | R | |-----|


Quiz sin mucho sentido, pero s con caracteres :) Ahora, no hace falta un alarde mucho mayor de imaginacin para poner el siguiente vector de caracteres:

|-----| | H | |-----| | O | |-----| | L | |-----| | A | |-----|


Vaya sorpresa: una palabra ;) S, los vectores de caracteres se usan para formar lo que se conoce bajo el nombre de "cadenas de caracteres". Las forma de trabajar con las cadenas de caracteres depende del lenguaje de programacin usado. Nosotros emplearemos la siguiente convencin: para declarar una cadena de caracteres, usaremos el tipo "cadena", diciendo cuntos caracteres tiene la cadena. Por ejemplo:

str: Cadena[10];
Esto ser una cadena de 10 caracteres. Adems, escribiendo str estamos haciendo referencia a la cadena completa, mientras que si escribimos str[i] nos estamos refiriendo al carcter i-simo de la cadena. Como deca ms arriba, la suma de dos vectores tiene sentido si hablamos de vectores numricos, pero, qu sentido tiene "sumar" dos cadenas de caracteres? Pues el que nosotros le queramos dar, y este suele ser el de CONCATENAR, es decir, obtener una nueva cadena de caracteres, de mayor tamao, y que tenga, primero, los caracteres de la primera cadena para, a continuacin, pasar a tener los caracteres de la segunda cadena (mucho ojo, que esto no es tan trivial como suena). Por ejemplo, supongamos que tenemos las cadenas siguientes:

cadena1 <- ('H','o','l','a') cadena2 <- ('M','u','n','d','o')


y hacemos:

Cadena <- cadena1+cadena2


Tendremos, en cadena:

Cadena <- ('H','o','l','a','M','u','n','d','o')


y no

Cadena <- ('H','o','l','a',' ','M','u','n','d','o')


Puesto que al concatenar, no se aaden espacios. El mundo de las cadenas de caracteres es un tanto especial, y lo dejamos por ahora. Antes, cuando he hablado de "operaciones" con vectores, he dicho que haba que definirlas. Veamos algunos ejemplos: Queremos sumar dos vectores. Lo primero de todo, es que el nmero de componentes ha de ser el mismo (si nos vamos al smil de algn espacio Rn). Llamamos U y V a nuestros dos vectores, y W al vector suma. Las componentes de W, como sabemos, las obtendremos as:

Desde i=1 hasta i=tamanyo hacer W (i) <- U(i) + V(i) Fin hacer
La resta es igualmente sencilla (y queda como ejercicio al lector ;) ). Ahora, multiplicar dos vectores... cmo? Si nuestro vector representara algo en R3, tenemos dos productos (conocidos) para estos vectores: el vectorial y el escalar, en otro Rn, tenemos el producto escalar. Pongamos que queremos calcular el producto escalar. Sabemos que el resultado de esa multiplicacin NO es un vector, sino que el resultado es un nmero. En el caso del producto vectorial, el resultado es un vector. O podemos inventarnos nosotros el producto. 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. Todo depende del sentido que le queramos dar a esa operacin.

Por ejemplo, en el caso en que queramos que cada componente sea el producto de las otras dos, el algoritmo es un mero calco del de la suma:

desde i=1 hasta i=tamanyo hacer W(i) <- U(i)*V(i) fin hacer
Y, en el caso, del producto escalar, tampoco tiene mucha complicacin.

producto=0 desde i=1 hasta i=tamao hacer producto <- producto + ( U(i)*V(i) ) fin hacer
Resumiendo: no hay definidas operaciones para vectores, slo las que nosotros queramos usar, y para ello tendremos que programarlas. Tambin podemos querer hacer otras cosas con vectores, como, por ejemplo, ORDENARLO, pero esta es una cuestin que podeis consultar en un curso de estructuras de datos. Unos pequeos ejercicios: 1.- Escribid funciones que implementen las operaciones conocidas con vectores (y las que se os ocurran): suma y resta de vectores, producto de un nmero por un vector... 2.- Dados dos vectores de caracteres, escribid una funcin que devuelva un vector de caracteres que sea la concatenacin de los dos dados. Eso es todo por ahora :)

Matrices
Tenemos otra estructura, fuertemente basada en la idea matemtica de matriz, y que tiene el mismo nombre: matriz (o "array", para quien le guste ms el ingls). Una matriz representa la idea de "tabla": una disposicin de la informacin en forma de filas y columnas. Por ejemplo: [ 3 -4.5 0.1 ] [ 4.1 2 -1 ] En este ejemplo tenemos una matriz formada por dos filas y tres columnas. El elemento de la posicin (2,3) (fila 2, columna 3) es el -1. Podemos entender las matrices como vectores cuyas componentes son vectores. De hecho, en casi todos los lenguajes de programacin, esto es as. Segn este punto de vista, la matriz del primer ejemplo es un vector de dos elementos: el primero, el vector [ 3 -4.5 0.1 ], y el segundo, el vector [ 4.1 2 -1 ]. Para declarar una variable de tipo matriz escribiremos: m: Array[1..N,1..M] de Tipo; siendo N el nmero de filas que tendr la matriz, y M el nmero de columnas. Para referirnos a la posicin (i,j), usaremos la nomeclatura m[i,j]. Por ejemplo: m: Array[1..3,1..5] de Entero; m[2,3] <- 4; m[1,5] <- -2; No perder de vista la declaracin de una matriz: puede contener elementos de cualquier tipo. Enteros, reales, cadenas de caracteres, o tipos definidos por el usuario (estos los estudiamos en el captulo siguiente). Recorrer los elementos de una matriz requiere de un bucle dentro de otro bucle. Por qu? Pues porque, para cada fila que recorramos, tendremos que recorrer cada elemento de las columnas. As, empezaremos entrando en la fila 1, y dentro de la fila 1 recorreremos los elementos 1 a M de que constan las columnas. Hecho esto, pasamos a la fila 2, y dentro de la fila 2 volvemos a recorrer los elementos 1 a M de las columnas. Siguiendo este proceso, acabaremos recorriendo todos los elementos de la matriz. Por ejemplo, para sumar dos matrices (en el sentido matemtico, teniendo en cuenta que entonces sern de tipo numrico), tendremos que ir elemento a elemento sumando los valores que se encuentren en las posiciones (i,j). Es obvio que la suma de dos matrices slo tiene sentido cuando las matrices a sumar tienen el mismo nmero de filas y de columnas. Una algoritmo sencillo para sumar dos matrices, almacenando su suma en una tercera, sera: desde i <- 1 hasta i = N hacer desde j <- 1 hasta j = M hacer C[i,j] <- A[i,j] + B[i,j]; fin desde fin desde Anlogamente realizaramos la resta.

Tenemos una clara aplicacin de las matrices en el mundo de la programacin grfica. Las transformaciones de los puntos pueden representarse en trminos de unas ciertas matrices, y obtener la transformacin de un punto (una rotacin, una traslacin o un cambio de escala) consiste sencillamente en multiplicar las coordenadas del punto por la matriz correspondiente.

Das könnte Ihnen auch gefallen