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.
Ejercicios resueltos - Definiciones de procedimientos y funciones
Dar la definición recursiva de la función factorial
1.
2.
Dar la definición iterativa de la función factorial
3.
Dar un procedimiento para incrementar en los valores de un arreglo de enteros.
4.
Dar una función para encontrar el mínimo de un arreglo de enteros.
5.
Dar una procedimiento para inicializar un arreglo con los primeros números naturales.
6.
Dar una procedimiento para inicializar un arreglo con los primeros números naturales impares.
7.
Dar un procedimiento para incrementar en las posiciones impares de un arreglo de enteros.