funciones en pascal

9
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:

description

uso de la opcion function en pascal

Transcript of funciones en pascal

Page 1: funciones en pascal

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: 3Su doble es: 6Y 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.

Page 2: funciones en pascal

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.

Ejercicio propuesto 6.3.1: Crea una función "triple", que reciba un número real como parámetro, y devuelva como resultado ese número multiplicado por tres.

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; 

Page 3: funciones en pascal

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.  

Ejercicio propuesto 6.3.2: Prepara una función llamada "media", que reciba dos números reales como parámetros, y devuelva como resultado su media aritmética.

Ejercicio propuesto 6.3.3: Crear una función "potenciaReal", que trabaje con números reales, y permita cálculos como 3.2 elevado a 1.7 (pista; hay que usar exponenciales y logaritmos, como vimos en el apartado 1.6.3

Ejercicio propuesto 6.3.4: Haz una función que halle la raíz cúbica del número que se le indique (pista: hallar una raíz cúbica es lo mismo que elevar a 1/3).

Ejercicio propuesto 6.3.5: Define las funciones Suma3 y Producto3, que calculen suma y producto de tres números enteros, y crea un programa que haga una operación u otra según escoja el usuario (empleando "case").

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;

Page 4: funciones en pascal

 (* 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 talSu 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;

Page 5: funciones en pascal

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 talSus iniciales son: hqt*) 

2.2. Variables booleanas

Una variable "Boolean" (llamadas así en honor al matemático George Boole) es una variable lógica, que puede valer TRUE (verdadero) o FALSE (falso), y se pueden usar para hacer que las condiciones resulten más legibles:

(* IF5.PAS, "if" y booleanos *)(* Parte de CUPAS5, por Nacho Cabanes *) program if5; var numero: integer; esPositivo: boolean; begin

Page 6: funciones en pascal

writeLn('Escriba un numero'); readLn(numero); esPositivo := numero>0; if esPositivo then writeLn('El numero es positivo');end.  (* Ejemplo de ejecucion:Escriba un numero2El numero es positivo*) 

Ejercicio propuesto 2.2.1: Crea un programa que cree una variable de tipo boolean, le asigne el valor TRUE y luego muestre dicho valor en pantalla.

Ejercicio propuesto 2.2.2: Crea un programa que pida al usuario un número real y diga si es cero o no, usando una variable boolean.

Ejercicio propuesto 2.2.3: Crea un programa que pida al usuario un número entero y diga si es positivo, negativo o cero, usando dos variables boolean (esPositivo y esNegativo).

Ejercicio propuesto 2.2.4: Crea un programa que pida al usuario un número entero y diga si es positivo, negativo o cero, usando tres variables boolean (esPositivo, esNegativo y esCero).

 

2.3. Muchos posibles valores (case)

Cuando queremos comprobar entre varios posibles valores, podemos hacerlo con muchos "if" seguidos, pero puede resultar pesado y hacer que el programa sea poco legible. Hay una alternativa que resulta mucho más cómoda en esas ocasiones: la orden case. Su sintaxis es

case expresion of caso1: sentencia1; caso2: sentencia2; ... casoN: sentenciaN;

Page 7: funciones en pascal

end;

o bien, si queremos indicar también lo que se debe hacer si no coincide con ninguno de los valores que hemos enumerado, añadimos la cláusula opcional else:

case expresion of caso1: sentencia1; caso2: sentencia2; ... casoN: sentenciaN; else otraSentencia; end;

(Nota: Esta es la sintaxis empleada por Turbo Pascal y Free Pascal. En Pascal estándar, esta construcción se empleaba conotherwise en lugar de "else" para expresar "en caso contrario".

Veamos un ejemplo:

(* CASE1.PAS, Condiciones múltiples con "case" *)(* Parte de CUPAS5, por Nacho Cabanes *) program case1; var letra: char; begin WriteLn('Escriba un simbolo'); ReadLn(letra); case letra of ' ': WriteLn('Un espacio'); 'A'..'Z', 'a'..'z': WriteLn('Una letra'); '0'..'9': WriteLn('Un digito'); '+', '-', '*', '/': WriteLn('Un operador');

Page 8: funciones en pascal

else { otherwise en SURPAS y otros compiladores } WriteLn('No es espacio, ni letra, ni digito, ni operador'); end;end.  (* Ejemplo de ejecucion:Escriba un simboloaUna letra*) 

Una precaución: la "expresión" debe pertenecer a un tipo de datos con un número finito de elementos, como "integer" o "char", pero no "real".

Y como se ve en el ejemplo, los "casos" posibles pueden ser valores únicos, varios valores separados por comas, o un rango de valores separados por .. (como los puntos suspensivos, pero sólo dos).

Ejercicio propuesto 2.3.1: Crea un programa que pida al usuario un símbolo y diga si es una letra en mayúsculas, una letra en minúsculas o algún otro símbolo.

Ejercicio propuesto 2.3.2: Crea un programa que pida al usuario una letra y diga si es una vocal o una consonante.

Ejercicio propuesto 2.3.3: Crea un programa que pida al usuario un número entero del 1 al 3, y escriba en pantalla "Uno", "Dos", "Tres" o "Número incorrecto" según corresponda.

Ejercicio propuesto 2.3.4: Crea un programa que pida al usuario un número, una operación (+, -, * o /) y otro número, y muestre el resultado de aplicar esa operación a esos dos números.

© 2015 Nacho Cabanes 66