Procedimientos

Fundamentos de la programación y la informática
Grados en ingeniería aeroespacial, turno de tarde, 2023-2024
Escuela de Ingeniería de Fuenlabrada
Universidad Rey Juan Carlos


Práctica 5.1. Variables y procedimientos

Haz una copia de tu práctica

~/fpi/practica03/funcion.pas

en el fichero

~/fpi/practica05/procedimiento.pas

Modifíca este último según la siguiente especificación:

  1. El programa usará un procedimiento. Esto es, el procedimiento llamará a la función y escribirá en pantalla el valor calculado.

  2. El cuerpo principal ya no tendrá constantes con los valores de entrada, sino que solicitará al usuario que escriba los valores numéricos desde la consola (pantalla y teclado). Si a pesar de ello el usuario introduce no un número sino otro tipo de datos, el programa generará un error de ejecución. (Este problema lo corregiremos más adelante)

Práctica 5.2. Variables y procedimientos, mal hecho

Copia el programa ~/fpi/practica05/procedimiento.pas en ~/fpi/practica05/procedimiento_mal.pas. Edita este último fichero según la siguiente especificación. Ten cuidado de no modificar el fichero original.

Esta práctica es peculiar, ahora vas a estropear el ejercicio anterior. Haz que siga compilando sin errores y devolviendo los mismos valores que antes, pero con un mal diseño: usa las funciones o procedimientos de forma incorrecta. Haz alguna otra cosa mal: usa mal las constantes, pon identificadres inadecuados... cualquier aspecto que hayamos tratado en la asignatura. Deja muy claro en el código fuente, qué está mal y explica brevemente por qué.

Práctica 5.3. Filtrado de datos de entrada

Escribe un programa llamado ~/fpi/practica05/filtrado.pas. En principio será muy similar al que hiciste en el ejercicio 5.1: tendrá un procedimiento que pedirá datos al usuario y llamará a una función para calcular un valor matemático sencillo. El valor a devolver tiene que depender de uno y solo un parámetro. Esto es, el programa leerá un solo valor. (Usa una fórmula distinta a la del ejercicio anterior). El programa:

Práctica 5.4. Procedimiento de filtrado de entrada

Este ejercicio hará algo similar a lo del ejercicio anterior, pero con mejor diseño. En prácticas anteriores, habías hecho subprogramas (funciones o procedimientos) sencillos que funcionaban siempre. Subprogramas que nunca tienen problemas. Por ejemplo una función que sume dos reales, siempre podrá devolver un valor. No hay motivo para que no haya funcionado

Pero en programación es normal que haya subprogramas que no sean capaces de devolver lo pedido. Por ejemplo, un subprograma al que le pidamos que devuelva un número entero escrito por el usuario, pero no pueda porque el usuario haya tecleado un número real o incluso una cadena. O una función a la que le pidamos que nos devuelva un número real con la raiz cuadrada de un número, y no pueda porque lo que le pasamos sea un número negativo.

Así que este tipo de subprogramas, devolverán típicamente dos (o más cosas)

En caso de que el booleano sea cierto, este último valor tendrá sentido y podrá usarse. Pero si el booleano es falso, el segundo valor no tiene nada, no debe tenerse en cuenta. Observa que esta estructura es más o menos la misma que usa el procedimiento val. La única diferencia es que val no indica el éxito/error con un booleano, sino con un entero.

Ahora escribirás un subprograma con esta estructura. Escribe un programa llamado ~/fpi/practica05/filtrado02.pas que tenga un procedimiento llamado intenta_leer_real (o try_read_real si prefieres escribir el programa en inglés). Este procedimiento tendrá:

De esta forma, si necesitamos que el usuario escriba una masa y una aceleración, invocariamos llamadas como esta:

intenta_leer_real('Introduce la masa', ok1, masa)
intenta_leer_real('Introduce la aceleración', ok2, aceleracion)

Si tanto ok1 como ok2 valen TRUE, el programa calculará la fuerza correspondiente. En otro caso, mostrará un error.

Tu programa hará esto mismo, pero busca un ejemplo distinto al de calcular la fuerza a partir de la masa y la aceleración. Usa si quieres algún ejemplo de alguna de tus prácticas anteriores (si es que tenían dos o más parámetros, no solamente uno)

Práctica 5.5. IVA con procedimientos

Escribe un programa llamado ~/fpi/practica05/iva.pas que haga lo mismo que el ejercicio 3.1, pero usando procedimientos, sin usar ninguna función. Procura que los efectos laterales de los procedimientos sean los mínimos imprescindibles. Puedes usar variables y sentencias if-then-else, si quieres. En otras palabras: convierte todas las funciones en procedimientos. Observa que en un programa real esto no tendría sentido porque se trata de parámetros que ocupan poca memoria. El propósito es que sepas realizar esto para cuando uses datos voluminosos.

Para cada procedimiento que escribas indica, en un comentario, si usas un procedimiento porque es lo más adecuado para ese caso o si sería mejor una función pero usas un procedimiento forzado, por imposición de la especificación (porque este enunciado te lo pide así). Puedes escribir por ejemplo un comentario con procedimiento adecuado o procedimiento forzado.