6.3. Funciones
En muchas ocasiones querremos obtener un valor como resultado de esa "subrutina" que hemos creado. Llamaremos "función" a un procedimiento capaz de devolver un valor. Por ejemplo, podríamos crear una función sencilla, que calcule (y devuelva) el doble del número que se le pase como parámetro, así:
(* DOBLE.PAS, Primer ejemplo de funcion *) (* Parte de CUPAS5, por Nacho Cabanes *) program FuncionDoble; function doble( numero: integer): integer; begin doble := numero * 2; end; (* Cuerpo del programa *) var n: integer; begin write('Introduce un numero entero: '); readLn( n ); writeLn('Su doble es: ', doble(n) ); writeLn('Y el doble de 5 es: ', doble(5) ); end. (* Ejemplo de ejecucion: Introduce un numero entero: 3 Su doble es: 6 Y el doble de 5 es: 10 *)
Aquí hay varios detalles que merece la pena comentar, algunos de ellos nuevos:
- Esta función se llama "doble".
- Tiene un parámetro llamado "numero", que es un número entero.
- El resultado va a ser también un número entero.
- Antes de salir de la función, le asignamos el que será su valor definitivo.
- Desde el cuerpo del programa usamos la función 2 veces: la primera para calcular el doble del número "n", que ha introducido el usuario, y la segunda para hallar el doble de 5.
Una función puede recibir más de un parámetro, y puede realizar operaciones más complejas. Por ejemplo, podríamos calcular una potencia (un número elevado a otro) mediante multiplicaciones repetitivas, así:
(* POTENCIA.PAS, Segundo ejemplo de funcion *) (* Parte de CUPAS5, por Nacho Cabanes *) program PruebaDePotencia; function potencia(a,b: integer): integer; (* Definimos la funcion *) var i: integer; (* Locales: para bucles *) temporal: integer; (* y para el valor temporal *) begin temporal := 1; (* Inicializacion *) for i := 1 to b do temporal := temporal * a; (* multiplicamos "b" veces por "a" *) potencia := temporal; (* y finalmente devolvemos el valor *) end; var numero1, numero2: integer; begin (* Cuerpo del programa *) writeLn('Potencia de un numero entero'); writeLn; writeLn('Introduce el primer numero'); readLn( numero1 ); writeLn('Introduce el segundo numero'); readLn( numero2 ); writeLn( numero1 ,' elevado a ', numero2 ,' vale ', potencia (numero1, numero2) ) end.
Por supuesto, una función puede devolver valores de otros tipos, no solo numéricos. Así, una función que nos devolviera la inicial de una palabra podría ser:
(* INICIAL.PAS, Funcion que devuelve char *) (* Parte de CUPAS5, por Nacho Cabanes *) program FuncionInicial; function inicial( texto: string): char; begin inicial := texto[1]; end; (* Cuerpo del programa *) var frase: string; begin write('Introduce una frase: '); readLn( frase ); writeLn('Su primera letra es: ', inicial(frase) ); end. (* Ejemplo de ejecucion: Introduce una frase: hola, que tal Su primera letra es: h *)
O bien podríamos recorrer una frase formada por varias palabras, para así construir y devolver una cadena que contenga las iniciales de todas ellas:
(* INICIALES.PAS, Funcion que devuelve un string *) (* Parte de CUPAS5, por Nacho Cabanes *) program FuncionIniciales; function iniciales( texto: string): string; var temporal: string; i: byte; begin temporal := ''; temporal := temporal + texto[1]; for i := 2 to length(texto) do if texto[i-1] = ' ' then temporal := temporal + texto[i]; iniciales := temporal; end; (* Cuerpo del programa *) var frase: string; begin write('Introduce una frase con varias palabras: '); readLn( frase ); writeLn('Sus iniciales son: ', iniciales(frase) ); end. (* Ejemplo de ejecucion: Introduce una frase con varias palabras: hola, que tal Sus iniciales son: hqt *)
No hay comentarios:
Publicar un comentario