Lección 14 · 14 de 20
Funciones y Result · Pascal
Escriba funciones en Pascal que devuelven un valor con Result: grados Celsius a Fahrenheit, el precio con IVA y si un año es bisiesto.

Una función es como un procedimiento, pero devuelve un valor. Se declara con `function`, sus parámetros y, tras los dos puntos, el tipo del resultado: function CelsiusToF(c: Double): Double.
El valor se devuelve con la variable especial `Result`: lo que contenga al terminar la función es lo que recibe quien la llama. Se puede asignar varias veces y leer dentro de la función, como cualquier otra variable.
WithVat tiene una constante local, Rate, con el 21 %. IsLeap devuelve un Boolean con la regla completa de los bisiestos: divisible entre 4 pero no entre 100, o divisible entre 400. Por eso 1900 no es bisiesto y 2000 sí.
Una llamada a una función va donde podría ir un valor: dentro de WriteLn, en una cuenta como 2 * WithVat(20) o seguida del formato :5:1. En el for, CelsiusToF(temp * 10) convierte 0, 10, 20 y 30 grados.
También se puede asignar el resultado al nombre de la función (CelsiusToF := ...), como en el Pascal clásico, pero Result es más claro y es lo habitual en Free Pascal (modo objfpc) y en Delphi.
Código · main.pas
program main;// A function returns a value: whatever is left in Result.function CelsiusToF(c: Double): Double;begin Result := c * 9 / 5 + 32;end;function WithVat(price: Double): Double;const Rate = 0.21;begin Result := price * (1 + Rate);end;function IsLeap(year: Integer): Boolean;begin Result := ((year mod 4 = 0) and (year mod 100 <> 0)) or (year mod 400 = 0);end;var temp: Integer;begin // A function call goes wherever a value can go. for temp := 0 to 3 do WriteLn(temp * 10:3, ' C = ', CelsiusToF(temp * 10):5:1, ' F'); WriteLn('A 20-euro shirt with VAT: ', WithVat(20):0:2); WriteLn('Two shirts: ', 2 * WithVat(20):0:2); WriteLn('2024 is a leap year? ', IsLeap(2024)); WriteLn('1900 is a leap year? ', IsLeap(1900)); WriteLn('2000 is a leap year? ', IsLeap(2000));end.Salida · fpc main.pas && ./main
0 C = 32.0 F 10 C = 50.0 F 20 C = 68.0 F 30 C = 86.0 F A 20-euro shirt with VAT: 24.20 Two shirts: 48.40 2024 is a leap year? TRUE 1900 is a leap year? FALSE 2000 is a leap year? TRUE
Para recordar
function Nombre(parámetros): Tipo;declara una función.- Lo que quede en
Resultes el valor devuelto. - Una función se usa dentro de expresiones, como un valor.
- Las funciones pueden tener sus propias constantes y variables.
Ejercicio
Escriba una función Discount(price: Double; percent: Integer): Double que devuelva el precio rebajado y úsela para escribir el precio de una camiseta de 20 euros con un 15 % de descuento y con IVA.