Introducción a la programación

La idea de vector, en informática, es la siguiente: imaginad que en vuestro programa necesitais 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) <- 23.5
 Temperaturas(2) <- 22.7
 Temperaturas(3) <- 25.2
 Temperaturas(4) <- 20.4
 ...

o bien en un bucle:

 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  |   Este es Temperaturas(1)
 |--------|
 |  22.7  |   Este es Temperaturas(2)
 |--------|
 |  25.2  |   Este es Temperaturas(3)
 |--------|
 |  20.4  |   Este es Temperaturas(4)
 |--------|
 | ...... |
 |--------|
 |  19.2  |   Este es Temperaturas(10000)
 | -------|

Para acceder a cualquier componente del vector, sólo tendremos que poner Temperaturas(posicion), donde posicion 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  |
 |-----|
 |  J  |
 |-----|
 |  H  |
 |-----|
 |  R  |
 |-----|

Quizá sin mucho sentido, pero sí con caracteres :)

Ahora, 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 ;) 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 programación usado. Nosotros emplearemos la siguiente convención: para declarar una cadena de caracteres, usaremos el tipo "cadena", diciendo cuántos caracteres tiene la cadena. Por ejemplo:

str: Cadena[10];

Esto será una cadena de 10 caracteres. Además, escribiendo str estamos haciendo referencia a la cadena completa, mientras que si escribimos str[i] nos estamos refiriendo al carácter i-ésimo de la cadena.

Como decía más arriba, la suma de dos vectores tiene sentido si hablamos de vectores numéricos, 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 tamaño, y que tenga, primero, los caracteres de la primera cadena para, a continuación, 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 añaden 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 había que definirlas. Veamos algunos ejemplos:

Queremos sumar dos vectores. Lo primero de todo, es que el número de componentes ha de ser el mismo (si nos vamos al símil de algún 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... ¿cómo? 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 multiplicación NO es un vector, sino que el resultado es un número. 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 operación.

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 complicación.

 producto=0
 desde i=1 hasta i=tamanyo hacer
   producto <- producto + ( U(i)*V(i) )
 fin hacer

Resumiendo: no hay definidas operaciones para vectores, sólo las que nosotros queramos usar, y para ello tendremos que programarlas.

También podemos querer hacer otras cosas con vectores, como, por ejemplo, ORDENARLO, pero esta es una cuestión que podeis consultar en un curso de estructuras de datos.

Unos pequeños 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 número por un vector...

2.- Dados dos vectores de caracteres, escribid una función que devuelva un vector de caracteres que sea la concatenación de los dos dados.

Eso es todo por ahora :)

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
SIGUIENTE ARTÍCULO

HAY 2 COMENTARIOS
  • Anónimo dijo:

    Muy pero Muy interesante el articulo, solo que tengo una critica. Explican todo muy bien, pero donde se supone que tenemos que hacer los ejercisios, en que programa!!! en un notepad?? en un Word¡?¡ en un Exel?? en Dreamweaver?, en una hoja?? Aguardo su respuesta!! Gracias.

  • williamchn_59@yahoo.es dijo:

    En fortran !Ordenacionde vectores por el metodo de la Burbuja Program Ordena_burbuja integer,dimension(100)::x integer::i,j,k,n integer::temp print*,"Ingrese la cantidad de datos al vector" read*,n print*,"Ingrese datos al vector" read*,(x(i),i=1,n) print* !usando el algoritmo de ordenacion por la burbuja Do i=1,n-1 Do j=1,n-1 if (x(j)>x(j+1)) then temp=x(j) x(j)=x(j+1) x(j+1)=temp end if end do end do Print*,"Vector ordenado" Print*,(x(k),k=1,n) end program ordena_burbuja !Ordenacionde vectores por el metodo de seleccion Program Ordena integer,dimension(100)::x integer::i,j,min,n integer::temp print*,"Ingrese la cantidad de datos al vector" read*,n print*,"Ingrese datos al vector" read*,(x(i),i=1,n) print* !usando el algoritmo de ordenacion por seleccion Do i=1,n-1 min=i Do j=i+1,n if (x(j)<x(min)) then min=j end if temp=x(i) x(i)=x(min) x(min)=temp end do end do Print*,"Vector ordenado" Print*,(x(i),i=1,n) end program ordena atte William

Conéctate o Regístrate para dejar tu comentario.