lunes, 28 de septiembre de 2015

Lógica de programación (31) - Operaciones con vectores



Como ya mencionamos en la lección anterior, un vector es una secuencia ordenada de elementos. A fin de cuentas, los vectores son variables con las que podemos realizar diferentes operaciones como son:
  • Declaración
  • Asignación/Escritura de valores
  • Recorrido
  • Actualización
  • Ordenación
  • Búsqueda


En esta lección daremos un recorrido por las primeras cuatro de estas operaciones y dejaremos la Ordenación y la Búsqueda para lecciones posteriores.

Declaración

Por lo general, un array se declara en la sección de variables de un programa. La forma de declarar un array de elementos de un determinado tipo es muy variada en los distintos lenguajes de programación. Sin embargo, para los efectos de este curso, esta es la sintaxis que estaremos siguiendo:

array[num] de tipo : nombre_array

donde
  • num es la cantidad de elementos que tendrá el array
  • tipo es el tipo de datos de los elementos del array (entero, booleano, cadena, etc)
  • nombre_array es el nombre del arreglo


Asi pues, la expresión:

array[10] de entero : números

representa la declaración de un arreglo de 10 elementos de tipo entero, cuyos índices irán del 0 al 9.

Una vez declarado el arreglo, nos es posible acceder a cada uno de sus elementos usando el nombre del arreglo seguido del índice del elemento al cual deseamos acceder, como lo estudiamos en la lección anterior.

Asignación/Escritura de valores

Una forma de asignar valores a un elemento del vector es mediante la instrucción de asignación simple; por ejemplo, la expresión números[3] <- 5 asigna el valor 5 al elemento de índice 3 dentro del vector números.

Otra forma de hacerlo es usando la instrucción leer() como con cualquier otra variable, por ejemplo:

leer(números[0])
leer(números[1])

En cada una de las dos formas descritas podemos asignar valores a sólo uno de los elementos del vector a la vez. Si quisiéramos asignar valores a todos los elementos del vector, tendríamos que recurrir a estructuras repetitivas como en el siguiente ejemplo, en el cual usamos un ciclo desde para asignar a cada uno de los elementos del vector números un valor dado por el usuario:

algoritmo Ejemplo_Vector
var
    array[10] de entero: números
    entero: i
inicio
    desde i <- 0 hasta 9 hacer
        escribir("Proporciona un valor para el elemento con índice " + i + " del arreglo: ")
        leer(números[i])
    fin_desde
fin


Recorrido (acceso secuencial) del vector

Lo que hicimos en el ejemplo anterior fue un recorrido del vector para escribir datos en él. Se le llama recorrido a la operación de efectuar una operación general sobre todos los elementos del vector, ya sea escribir datos o leer su contenido. Estas operaciones se realizan utilizando estructuras repetitivas, cuyas variables de control se usan como índices del vector. El incremento del valor de la variable de control permite que podamos acceder secuencialmente a cada uno de los elementos del vector.

Complementaremos el ejemplo anterior para incluir ahora un recorrido de lectura que se efectuará inmediatamente después de que el usuario haya terminado de introducir valores en el vector.

algoritmo Ejemplo_Vector
var
    array[10] de entero: números
    entero: i
inicio

    //Asignar valores a cada elemento del vector
    desde i <- 0 hasta 9 hacer
        escribir("Proporciona un valor para el elemento con índice " + i + " del arreglo: ")
        leer(números[i])
    fin_desde

    //Recorrer el vector para mostrar los números introducidos
   desde i<-0 hasta 9 hacer
        escribir(números[i])
    fin_desde

fin


En este otro ejemplo solicitamos al usuario un conjunto de 15 calificaciones que almacenamos en un vector. Luego recorremos ese vector para calcular la suma de todas las calificaciones y finalmente calculamos y mostramos el promedio de las mismas:

algoritmo Promedio
var
    array[15] de real: calif
    entero: i
    real: suma, promedio
inicio
    //Asignar calificaciones al vector
    desde i <- 0 hasta 14 hacer
        escribir("Escribe una calificación")
        leer(calif[i])
    fin_desde

    //Recorrer el vector para calcular la suma de las calificaciones
    suma <- 0
    desde i <- 0 hasta 14 hacer
        suma <- suma + calif[i]
    fin_desde

    //Calcular y mostrar el promedio
    promedio <- suma / 15
    escribir("El promedio de las calificaciones proporcionadas es " + promedio)
fin


Actualización

La actualización de un vector puede constar a su vez de tres operaciones elementales que son: añadir, insertar o borrar elementos.

Añadir datos consiste en agregar un nuevo elemento al final del vector. La única condición necesaria para llevar a cabo esta operación es que exista espacio suficiente en el vector para recibir al nuevo elemento, es decir, que el vector no esté lleno. Si esta condición se cumple, basta con referirnos a la posición en la que deseamos insertar el nuevo elemento para agregarlo. Ahora bien, si esta posición no se conoce y se desea agregar un elemento nuevo al final del vector verificando de antemano si existe lugar para ello, puede realizarse con un algoritmo como el del siguiente ejemplo:

algoritmo Añadir
var
   array[5] de cadena: colores
   entero: i
inicio
   //Asignar algunos valores al arreglo 'colores'
   colores[0] <- "verde"
   colores[1] <- "rojo"
   colores[2] <- "azul"
   
   //Insertar un nuevo color al final
   desde i<-0 hasta 4 hacer
      si (colores[i] <- nulo) entonces
         colores[i] <- "amarillo"
         interrumpir
      fin_si
   fin_desde
fin

En el ejemplo anterior recorremos el arreglo colores hasta encontrar una casilla cuyo valor sea nulo y en ella insertamos un nuevo color, terminando el recorrido en el proceso. Una vez que termina el algoritmo, nuestro arreglo contendrá los siguientes elementos:

colores[0] = verde
colores[1] = rojo
colores[2] = azul
colores[3] = amarillo
colores[4] = *nulo*

Si bien esta no es la única forma de insertar un nuevo elemento en un arreglo, es una solución sencilla y rápida para lograrlo.

A diferencia de la operación de Añadir, cuando ejecutamos una operación  Insertar lo que buscamos es colocar un nuevo elemento dentro de un arreglo en una posición específica y no necesariamente al final del mismo. En este caso aplica la misma condición que con la operación Añadir: debe existir espacio suficiente en el arreglo para insertar un nuevo elemento. Con unos pequeños ajustes, podemos emplear el algoritmo del ejemplo anterior para demostrar la operación de inserción:

algoritmo Añadir
var
   array[5] de cadena: colores
   entero: i
inicio
   //Asignar algunos valores al arreglo 'colores'
   colores[0] <- "verde"
   colores[1] <- "rojo"
   colores[3] <- "azul"
   
   //Insertar un nuevo color al final
   desde i<-0 hasta 4 hacer
      si (colores[i] <- nulo) entonces
         colores[i] <- "amarillo"
         interrumpir
      fin_si
   fin_desde
fin

Este algoritmo inserta algunos valores en las posiciones 0, 1 y 3 del arreglo y luego lo recorre para insertar un nuevo elemento en la primera posición vacía que se encuentre (en este caso, será la posición 2), quedando finalmente nuestro arreglo con los siguientes elementos:

colores[0] = verde
colores[1] = rojo
colores[2] = amarillo
colores[3] = azul
colores[4] = *nulo*

Finalmente, la operación de Borrar consiste en eliminar de un arreglo un elemento ya sea indicando su posición dentro del mismo o realizando primero una búsqueda y eliminando el elemento una vez que se ha localizado dentro del arreglo. Existen varias formas de realizar el borrado de un elemento de un arreglo, pero dejaremos los ejemplos para cuando aprendamos a realizar búsquedas dentro de un vector.


ACTIVIDADES DE APRENDIZAJE


  1. Escribe un algoritmo que lea los valores de 100 temperaturas y a partir de ellas: (a) Calcule y muestre el promedio de las temperaturas y (b) muestre todas las temperaturas que se encuentran por encima del promedio.
  2. Escribe un algoritmo que te permita calcular la desviación estándar del conjunto de temperaturas del problema anterior, sabiendo que la desviación se calcula con la fórmula siguiente:


     


Enlace: Índice del curso




0 comentarios:

Publicar un comentario

Copyright © IsraelCapetillo.com - Un blog de tecnología, noticias geek y más Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com