Lenguaje de la Materia
Se utiliza un lenguaje inventado específicamente para la materia, que nos permite definir procedimientos y funciones.
Procedimientos
Un procedimiento encapsula un bloque de código con su respectiva declaración de variables (que define el estado).
Donde son nombres de variables (parámetros) y sus respectivos tipos.
Entrada/salida de parámetros:
- es el parámetro de entrada (no modificable)
- el parámetro de salida.
- el parámetro de entrada/salida.
Un ejemplo de declaración de procedimiento es el siguiente:
Un ejemplo de llamada de este procedmiento puede ser:
Observaciones:
- Los procedimientos no devuelven cosas (pero pueden escribir varios parámetros ).
- Las llamadas a estos son sentencias del lenguaje.
Funciones
Las funciones son como procedimientos salvo que todos los parámetros son y devuelven algo.
Donde y son nombres de variables (parámetros) y sus respectivos tipos.
Un ejemplo de declaración de función es el siguiente:
Y un ejemplo de llamada es:
Observaciones sobre funciones:
- No hay sentencia
return
. Se devuelve lo que sea asignado a la variable declarada como . La variable se puede usar libremente en el cuerpo de la función (se puede leer, asignar varias veces, etc.). - Las llamadas a funciones no son sentencias, son expresiones (e.g. se puede usar en la parte derecha de una asignación, en una guarda, etc).
- Las funciones no tienen efectos colaterales en el estado. Una función no puede escribir las variables correspondientes a los parámetros.
Observaciones generales:
- Cada función y procedimiento define un estado propio llamado “contexto”. Las variables declaradas dentro de funciones y procedimientos no existen fuera de éstas.
- Cualquier función o procedimiento pueden llamar a cualquier otra función o procedimiento. Incluso pueden llamarse a sí mismas (recursión), y también mutuamente (recursión mutua).
- No importa el orden en que se declaran, un procedimiento puede llamar a otro que esté definido más adelante.
- No se pueden definir procedimientos ni funciones dentro de procedimientos o funciones (no hay anidamiento, todas las definiciones están al mismo nivel).
Tipos Nativos
Los tipos nativos son los tipos que trae predefinido el lenguaje de programación.
Tipos básicos:
- : booleanos ( y )
- : enteros
- : naturales (con el )
- : reales
- : caracteres ()
- : secuencias de caracteres ()
Se utilizan constantes que sirven como infinito/-infinito, etc.
Tipos estructurados:
- : arreglos
- : punteros
Expresiones
Expresiones válidas en programación imperativa:
- valores constantes
- variables y constantes declaradas
- operaciones básicas
- accesos a elementos de arreglos
- llamadas a funciones
Sentencias
Skip
Utilizamos para no hacer nada.
Asignación
La sintaxis es: donde es variable y expresión. No se utiliza la asignación múltiple en este lenguaje
Llamada a procedimiento
Llamamos los procedimientos como
Condicional
Utilizamos de las siguientes maneras:
O también, sin el
Donde es una guarda y expresión booleana, y sentencias.
Repetición
Utilizamos :
Donde es una guarda y expresión booleana, y una sentencia.
Otras repeticiones, for to, for downto
Sintaxis de :
Donde y son expresiones de tipo y es sentencia.
Su semántica es la siguiente:
- Se declara la variable (sólo exisitirá dentro de la sentencia )
- Se le asigna a el valor
- Se ejecuta
- Se incrementa en
- Si termina, si no vuelve al punto 3.
- deja de existir al terminar.
Sintaxis de :
Donde y son expresiones de tipo y es sentencia.
Su semántica es igual a pero restando .
Observaciones:
- No hace falta declarar el (el ya lo declara)
- Si había otra variable afuera, esta la tapa.
- No se puede modificar con asignaciones en el cuerpo del ciclo ()
- No agrega expresividad al lenguaje (todo se puede hacer con ).
- itera desde hasta inclusive
Un ejemplo de podría ser:
Y para ,
Secuenciación
No hay secuenciación explícita como en Algoritmos 1, basta con poner una sentencia después de otra.