Etiquetas

miércoles, 20 de mayo de 2015

12. Aplicaciones con vectores

En el escrito anterior habíamos definido que es un vector que es analógicamente es un arreglo en programación, se continuara con otros conceptos de vectores, así como la definición de una bandera y su función en una estructura, además se desarrollara algunas aplicaciones de problemas en que se podrá evidenciar el uso de vectores como la mejor alternativa para el desarrollo de los programas.

Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque dependiendo del tipo de vector y del lenguaje de programación un vector podría tener una cantidad variable de datos en el mismo programa. En este caso, se les denomina vectores dinámicos, en oposición, a los vectores con una cantidad fija de memoria asignada se los denomina vectores estáticos. El uso de vectores dinámicos requiere realizar una apropiada gestión de memoria dinámica. Un uso incorrecto de los vectores dinámicos, o mejor dicho, una mala gestión de la memoria dinámica, puede conducir a una fuga de memoria. Al utilizar vectores dinámicos siempre habrá que liberar la memoria utilizada cuando ésta ya no se vaya a seguir utilizando.

Habiendo definido los vectores de una forma general, aunque existen libros que definen muchos tipos de vectores, hasta el momento nos conformaremos con los conceptos que hemos visto, ya que en todos los artículos hemos hablado de programación en una forma básica y en paralelo con el lenguaje de programación de MATLAB.

Ahora bien. Cuando se diseñan algoritmos que incluyen estructuras de control repetitivas, existen ciertas variables que cumplen una función específica en cada iteración del ciclo; las más comunes son: las variables contadoras, las variables acumuladoras y las variables bandera.

¿Pero que es una Variables bandera?
¡Pues fácil! Una variable bandera es utilizada dentro de la condición del ciclo, ya sea sin negar, negada o conectada con una expresión booleana, ¿Cómo así booleana?, ¡pues fácil! En datos lógicos que puede representar valores de lógica binaria.  Para determinar cuándo un ciclo se sigue iterando o cuando no. De esta manera una variable bandera debe ser de tipo booleano.

Ejemplo. Realizar un programa que lea una serie de números reales y los sume. El programa debe preguntar al usuario cuando desea ingresar un siguiente dato y si el usuario responde que no desea ingresar más datos el programa debe confirmar la respuesta. Si el usuario desea continuar ingresando datos se debe seguir solicitando datos y si el usuario confirma su deseo de salir, el programa debe mostrar la suma de los datos leídos y terminar.

Especificación:
Donde, datos es la colección de n números reales que el usuario ingresa hasta que decide no continuar ingresando datos y sumaÎ R es la suma de dichos números.

Algoritmo Solución

bandera: booleano
suma: real
dato: real
c: caracter
bandera := verdadero
suma := 0.0
mientras (bandera) hacer
escriba( “Ingrese un dato:” )
leer (dato)
suma := suma + dato
escriba( “Desea continuar ingresando datos (S/N):” )
lea( c )
si (c = ‘N’ | c = ‘n’) entonces
escriba( “Realmente desea salir (S/N):” )
lea( c )
si (c = ‘S’ | c = ‘s’) entonces
bandera := falso
Fin (si)
Fin (si)
Fin_mientras
escriba( “La suma es:”)
escriba( suma )

Vale la pena recordar que una variable del tipo booleano toma valores de verdad y por lo tanto, por sí sola es una expresión lógica. Adicionalmente, la expresión lógica bandera = verdadero es equivalente a la expresión lógica bandera.

A continuación vas a ver una serie de aplicaciones donde se evidencia la utilización de vectores para dar solución a cada problema.

Ejercicio 1
Escriba un algoritmo que muestre por pantalla el contenido de un vector. Los valores de las componentes de vector se introducen por teclado (hasta que introduzca el numero 0). 
 Algoritmo
Variables
  Entero: i, num
  Vector Entero: a
Inicio
  i = 0
  Escriba(“Introduzca un valor de una componente del vector o 0
para finalizar”)
  Lea (num)
  Mientras (num <> 0) hacer ¡Relleno el vector con los valores
leídos desde teclado
  a[i] = num
  i = i+1
  Fin (Mientras)
  i = i - 1
  Mientras (i >= 0) hacer
  Escriba a[i]
  i = i-1
  Fin (Mientras)
Fin

Ejercicio 2
Considere una encriptación de mensajes muy antigua inventada por Isaac newton, la cual se basa en que a cada letra de un mensaje se le asocia un número (el orden en el abecedario), luego se suma al número de  cada letra otro número la clave y el resultado es una nueva letra, mira en el abecedario. Por ejemplo, el mensaje “cruzad el rubicon”, se transformaría en “dsvabeUfmUsvcjdpo” si le sumo el número clave 1 a  cada letra (ya que la primera letra del mensaje cifrado, la ‘d’, es la que va tras la ‘c’, etc.). Note que la ch, ll, ñ no existen, y que después de la ‘z’ va la ‘a’. Además los espacios en blanco se convierten en letras U  si la clave es 1, en V si es 2, etc.  Para ello, elabore en pseudocódigo un algoritmo que a partir de un texto (cadena de caracteres leída por  teclado) imprima texto cifrado con la clave entera, también leída desde teclado. Pista: Dentro del bucle que debe recorrer todas las letras del texto, use la siguiente fórmula para encriptar: 
Texto_encriptado[i] =(texto_original[i]-'a'+clave)%26+'a';  /*26 es el número de letras del alfabeto ASCII*/
Algoritmo Encriptación
Constante
 Entero: LetrasASCII, N ¡N es la longitud del texto  
Variable
 Entero: i, clave
 Vector Caracter: texto_encriptado, texto_original
Inicio
 LetrasASCII = 26
 Escriba(“Leer el texto a encriptar:”)
 Para i<-0 hasta N-1 hacer
  Lee texto_original[i]
 Fin (Para)
 Para i<-0 hasta N-1 hacer
  texto_encriptado[i] =(texto_original[i]-'a'+clave)%26+'a')
 Fin (Para )
 Escriba( “El texto encriptado es:”)
 Para i<-0 hasta N-1 hacer
  Escriba( texto_encriptado[i] )
 Fin (Para)
Fin

POR CAMILO BORJA © 2015 ALL RIGHTS RESERVED. 

Fuentes consultadas.

INTRODUCCIÓN A LA ALGORITMICA (FUNDAMENTOS DE INFORMÁTICA). (Curso 03-04). 2011.E.U.P. Universidad de Sevilla
Tipos de variables .Conceptos.2014. cursos.ingenieria.

Alegsa. Definición bandera algoritmos.informatica.2015

0 comentarios:

Publicar un comentario