ALGORITMIA II


ALGORITMIA II.(PSIENT)

CONDICIONALES.
Las estructuras en Pseint se dividen en condiciones y repetitivas:

Condicionales 

Condicional Si-Entonces 

   La secuencia de instrucciones ejecutadas por la instrucción Si-Entonces-Sino depende del valor de una condición lógica.
      Si <condición>
            Entonces
                 <instrucciones> 
            Sino 
                  <instrucciones>
      FinSi 
   Al ejecutarse esta instrucción, se evalúa la condición y se ejecutan las instrucciones que correspondan: las instrucciones que le siguen al Entonces si la condición es verdadera, o las instrucciones que le siguen al Sino si la condición es falsa. La condición debe ser una expresión lógica, que al ser evaluada retorna Verdadero o Falso. 
   La cláusula Entonces debe aparecer siempre, pero la cláusla Sino puede no estar. En ese caso, si la condición es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente.
   El ejemplo Triangulo lee las medidas de los tres lados de un triángulo y utiliza esta estructura para determinar cual es el mayor de los tres, y verificar luego si se trata de un triángulo rectángulo o no.

Selección Multiple 

   La secuencia de instrucciones ejecutada por una instrucción Segun depende del valor de una variable numérica.
      Segun <variable> Hacer 
            <número1>: <instrucciones> 
            <número2>,<número3>: <instrucciones> 
            <...> 
            De Otro Modo: <instrucciones> 
      FinSegun 

   Esta instrucción permite ejecutar opcionalmente varias acciones posibles, dependiendo del valor almacenado en una variable de tipo numérico. Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia de instrucciones asociada con dicho valor. 
   Cada opción está formada por uno o más números separados por comas, dos puntos y una secuencia de instrucciones. Si una opción incluye varios números, la secuencia de instrucciones asociada se debe ejecutar cuando el valor de la variable es uno de esos números.
   Opcionalmente, se puede agregar una opción final, denominada De Otro Modo, cuya secuencia de instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las opciones anteriores.

Repetitivas

Lazos Mientras 

   La instrucción Mientras ejecuta una secuencia de instrucciones mientras una condición sea verdadera. 
      Mientras <condición> Hacer 
            <instrucciones> 
      FinMientras 
vAl ejecutarse esta instrucción, la condición es evaluada. Si la condición resulta verdadera, se ejecuta una vez la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecución del cuerpo del ciclo se vuelve a evaluar la condición y, si es verdadera, la ejecución se repite. Estos pasos se repiten mientras la condición sea verdadera. 
   Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera vez la condición resulta ser falsa. 
   Si la condición siempre es verdadera, al ejecutar esta instrucción se produce un ciclo infinito. A fin de evitarlo, las instrucciones del cuerpo del ciclo deben contener alguna instrucción que modifique la o las variables involucradas en la condición, de modo que ésta sea falsificada en algún momento y así finalice la ejecución del ciclo.
   El ejemplo AdivinaNumero le da al usuario 10 intentos para adivinar un número generado aleatoriamente, utilizando esta estructura para verificar si el usuario acierta el número o si se agotan los intentos.

Lazos Repetir 

   La instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condición sea verdadera.
      Repetir 
            <instrucciones> 
      Hasta Que <condición> 
   Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera. 
   Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez. 
   Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo.
   Si se utiliza sintaxis flexible (ver Opciones del PSeudocódigo) se permite opcionalmente utilizar Mientras Que en lugar de Hasta Que, de modo que el conjunto de acciones contenidas en el bucle se ejecuta mientras que la condición sea verdadera. Notar que la palabra Que es la que diferencia el uso de la palabra Mientras en la estructura repetir de la estructura Mientras. Es decir, si se omite la palabra que se considera como el comienzo de un bucle Mientras en lugar de el final de un bucle Repetir.

Lazos Para 

   La instrucción Para ejecuta una secuencia de instrucciones un número determinado de veces. 
      Para <variable> <- <inicial> Hasta <final> Con Paso <paso> Hacer 
            <instrucciones> 
      FinPara 

   Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de instrucciones que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso> unidades y se evalúa si el valor almacenado en <variable> superó al valor <final>. Si esto es falso se repite hasta que <variable> supere a <final>. Si se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en 1.
   Si se habilita la sintaxis flexible en las configuración del lenguaje se pueden utilizar dos alternativas. La primer variante consiste en reemplazar el operador de asignación por la palabra clave Desde:
      Para <variable> Desde <inicial> Hasta <final> Con Paso <paso> Hacer ... 
De esta forma, la lectura de la sentencia resulta más obvia. Además, con sintaxis flexible, si no se especifica el paso pero el valor final es menor al inicial, el bucle recorrerá los valores en orden inverso como si el paso fuera -1. La segunda variante solo sirve para recorrer arreglos de una o más dimensiones. Se introduce con la construcción Para Cada seguida de un identificador, la palabra clave De y otro identificador:
      Para Cada <elemento> De <Arreglo> Hacer ... 
El segundo identificador debe corresponder a un arreglo. El primero será el que irá variando en cada iteración. El ciclo realizará tantas iteraciones como elementos contenga el arreglo y en cada uno el primer identificador servirá para refererirse al elemento del arreglo en cuestión.
   El ejemplo Promedio utiliza un bucle de este tipo para leer N valores numéricos con los cuales calcula un promedio.
   El ejemplo Para utiliza las tres variantes de este tipo de bucles para recorrer un arreglo.


Datos y tipos de datos

Hasta ahora se ha insistido en las instrucciones que constituyen un algoritmo. El orden de lectura de dichas instrucciones, constituye el control del algoritmo. Normalmente la lectura del control de un algoritmo.

 Representación de los Datos

Los algoritmos modifican objetos de la realidad. La representación de dichos objetos estará dada por sus características principales o por la información que nos interese conocer de ellos.
En el caso del último ejemplo visto, sólo nos concentramos en representar las cuadras recorridas por el robot, y dejamos de lado la cantidad de flores y papeles de cada esquina visitada. Es decir, los datos a representar son aquellos de interés específico para resolver ese problema.
Si además de contar la cantidad de cuadras recorridas, necesitáramos contar la cantidad de flores en todas las esquinas visitadas, sería necesario representar esta información dentro del algoritmo.
Por lo tanto, se comenzará extendiendo la notación empleada en el algoritmo para dar lugar a las declaraciones de los datos que resultan relevantes al problema.

 Variables

Además de su capacidad de movimiento y de recoger o depositar flores y papeles, el robot posee la habilidad de manejar datos que le permiten representar ciertos atributos de los problemas que debe resolver. Por ejemplo, es capaz de calcular la cantidad de flores que lleva en su bolsa o recordar si en una esquina dada había más flores que papeles.
En general, durante la ejecución de un programa es necesario manipular información que puede cambiar continuamente. Por este motivo, es imprescindible contar con un elemento que permita variar la información que se maneja en cada momento. Este elemento es lo que se conoce como variable.
Una variable permite almacenar un valor que puede ser modificado a lo largo del programa.
Dicho valor representa un dato relevante para el problema a resolver. Dentro de un mismo programa pueden utilizarse tantas variables como sean necesarias.

3.3.1 Sintaxis para la declaración de variables

Se denominan identificadores a los nombres descriptivos que se asocian a los datos (variables) para representar, dentro del programa, su valor.
En el lenguaje del robot, existe una sección dentro del programa donde se declaran las variables que se van a utilizar. La sintaxis es la siguiente:

programa nombre del programa
variables
{indique aquí las variables a utilizar}
comenzar
{sentencias que indican el recorrido del robot}
Fin

Notemos que se ha incorporado una sección para la declaración de las variables entre la línea que contiene el nombre del programa y la palabra comenzarEl esquema de un programa, en Visual Da Vinci, que utiliza variables sería el siguiente:

programa Cap2Ejemplo9
variables
  nombreVariable
comenzar
  {sentencias}
fin

 Tipos de datos

Independientemente del lenguaje de programación que se utilice, la definición de un tipo de dato implica considerar tres aspectos fundamentales que lo caracterizan:
• Identificar cuáles son los valores que puede tomar un dato.
• Definir cuáles son las operaciones que pueden aplicarse sobre los datos de este tipo.
• Indicar cuáles son las relaciones de orden que permiten compararlos.


Tipo de dato numérico (número)
Los elementos de este tipo de dato son los números enteros
-3, -2, -1, 0, 1, 2, 3, ... .
Una computadora sólo puede representar un subconjunto finito de valores, con lo cual existirá un número máximo y un número mínimo. Dichos valores estarán determinados por la cantidad de memoria que se utilice para representarlo. En el ambiente Visual DaVinci, el número máximo que se puede representar es 231 = 2147483647 y el mínimo es -231 = -2147483647.