|
Master
en Artes Digitales (IUA-UPF) |
Funciones
Funciones | Return | Parámetros | Ambito y Visibilidad | Ejercicios
Son fragmentos de código los cuales reciben un nombre descriptivo y que pueden ser utilizados en cualquier momento haciendo referencia al nombre.
Su utilidad principal es:
|
![]() |
|
Ejemplos de funciones a programar en el entorno EP-NAR-6 Ejemplo 1 : Dar una función que lea 3 números por teclado y escriba la media de los tres. Ejemplo 2 : Dar una función que lea 3 números por teclado y escriba el mayor de los tres. Ejemplo 3 : Dar una función que lea un número por teclado que represente el precio de un artículo. A continuación que lea una palabra que defina si es un artículo de "primera" necesidad, un artículo "normal" o un artículo de "lujo". Finalmente deberá calcular el IVA correspondiente, según el tipo de artículo (7%, 16% o 34% respectivamente) y lo escriba por pantalla. Ejemplo 4 : Dar una función que vaya leiendo carácter a carácter de teclado de forma que se detenga cuando encuentre el primer carácter NO blanco, y lo escriba por pantalla. |
Las funciones pueden devolver un valor como resultado de sus operaciones o cálculos. Es decir, que a parte de poder dar resultados por pantalla (como en cualquier otra parte del programa), también pueden devolver el resultado al punto del programa en que la función había sido llamada.
Por ejemplo, tenemos una función que multiplica por 2 un número leído por teclado y queremos que este resultado sea accesible en el resto del programa. Definimos la función:
function por_dos(){ num = readval() return num * 2 }
donde la sentencia return define el valor a devolver por la función. Así, el valor puede ser recogido por una variable en el punto de un programa donde se haya llamado a la función:
. . . . . . . . . resultado = por_dos() . . . . . . . . . write(resultado) . . . . . . . . .
Como se puede observar, a la variable resultado se le asigna el valor que devuelve la función. Este valor, al estar en una variable puede ser utilizado más tarde como por ejemplo en la sentencia que escribe por pantalla el resultado.
|
Ejemplos de funciones a programar en el entorno EP-NAR-6 Modificar los ejemplos anteriores para que devuelvan los valores en vez de dar los resultados por pantalla. |
Parámetros Formales y Actuales
Un parámetro es un valor que se le pasa a una función para que pueda operar con él.
Por ejemplo, si queremos que una función calcule el área de un cuadrado, en vez de leer el valor del tamaño del costado del cuadrado del teclado, lo podemos pasar por parámetro: area_cuadrado( 5 )
A una función se pueden pasar ninguno, uno o más de un parámetro, pero siempre se pasan en un cierto orden y en la mayoria de lenguajes, así como en JavaScript, se pasan dentro de los paréntesis que siguen al nombre de la función.
Se distingue entre parámetro formal y actual para hacer referencia a:
En el ejemplo del cálculo del área de un cuadrado tendríamos que la definición de la función podría ser:
function area_cuadrado( lado ){ area = lado * lado return area }
lado es el parámetro formal, es decir, es el nombre que se le da para poder referenciarlo dentro de la función.
Así mismo, cuando llamamos la función para que calcule el área de un cuadrado con los costados de 5 unidades, tenemos:
area_cuadrado( 5 )
Aquí el 5 es el parámetro actual ya que es el valor que le pasamos a la función.
|
Ejemplos de funciones con parámetros a programar en el entorno EP-NAR-6 Modificar los tres primeros ejemplos anteriores para que se les pasen los valores por parámetro, en vez de leerlos de teclado. |
Las variables internas a una función (definidas dentro de la función) solo se verán dentro de la función. Es decir, tienen un ámbito local.
Las variables definidas fuera de toda función serán visibles en todo el programa. Es decir, tienen un ámbito global.
Por ejemplo, en la función que calcula el área de un cuadrado:
function area_cuadrado( lado ){ area = lado * lado return area }
vemos que hemos definido una variable area. Esta variable area no podrá ser referenciada fuera de la función ya que su ámbito es tan solo el de dentro de la función.
También se pueden definir variables globales que permitan ser vistas desde cualquier función. Por ejemplo:
v = 0 function main(){ v = 5 } function f(){ v = 10 }
en el programa anterior, tanto la función principal main, como la función f pueden acceder y trabajar con la variable v.
Ejemplos de funciones a programar en el entorno EP-NAR-6
|
Ejemplo 1 : Queremos leer un texto, carácter a carácter, finalizado en punto e irlo escribiendo de forma que entre palabra y palabra, tan solo haya UN espacio. Por lo tanto, el programa deberá saltar los blancos inecesarios. Pista: ayudarse de la función definida en los Ejemplo 4 de arriba. Ejemplo 2 : Definir una función que pasándole por parámetro la edad de una persona, su nota media de carrera, la nota de un test de personalidad y la nota de un test psicotécnico, decida si esa persona es APTA para un puesto de trabajo. En concreto, la función debe devolver un valor booleano (true o false) según los siguientes criterios:
Recomendaciones: escoger unos buenos nombres de parámetros formales. Ejemplo 3 : Escribir un programa que lea las fichas de 10 personas y en base a sus datos, de por pantalla el nombre de cada persona, indicando si es apta o no para un puesto de trabajo. Utilizar la función del ejercicio anterior para decidir si cada una es apta. Notas: Las fichas estarán formadas por el nombre, la nota media de carrera, la nota de un test de personalidad y la nota de un test psicotécnico, dando cada dato en una línea distinta. Ejemplo 4 : Definir una función que:
Nota: la frase estará terminada en punto. Ejemplo 5 : Escribir un programa que utilice la función anterior y escriba las dos partes de la frase por pantalla, en líneas separadas. Nota: Utilizar variables globales para poder utilizarlas tanto en la función anterior como en la función principal. Ejemplo 6 : Leeremos de teclado (carácter a carácter) una frase del estilo:
es decir, una frase dirigida a alguien y donde el nombre de ese alguien se ha substituido por "?". Se deberá utilizar la función del Ejemplo 4 para separar la frase en las dos partes en que se separa por la posición del "?". También por teclado se nos darán 10 nombres y queremos leerlos uno a uno e ir escribiendo, para cada uno, una frase formada por:
Nota: tener en cuanta la utilización de variable globales, de parámetros, etc. |
Ejemplo 1 :
function main(){
letra = ""
letra = readchr()
while(letra != "."){
write(letra)
if(letra == " "){
letra = saltar_blancos()
}
else{
letra = readchr()
}
}
}
function saltar_blancos(){
do{
l = readchr()
}while(l == " ")
return l
}
Ejemplo 2 :
function persona_apta(edad, carrera, personalidad, psicotecnico){
if(edad >= 18 && edad < 40){
if(carrera >= 5 && personalidad >= 5 && psicotecnico >= 5){
if(carrera > 8){
return true
}
else{
if(personalidad >= 8 && psicotecnico >= 8){
return true
}
else{
if(carrera > 7 && personalidad >= 8){
return true
}
else{
if(carrera > 7 && psicotecnico >= 8){
return true
}
}
}
}
}
}
return false
}
o bien tambié se podría hacer:
function persona_apta(edad, carrera, personalidad, psicotecnico){
if((edad >= 18 && edad < 40) && (carrera >= 5 && personalidad >= 5 && psicotecnico >= 5)
&& ((carrera > 8) || (personalidad >= 8 && psicotecnico >= 8)
|| (carrera > 7 && personalidad >= 8)
|| (carrera > 7 && psicotecnico >= 8))){
return true
}
return false
}
o bien tambié se podría hacer:
function persona_apta(edad, carrera, personalidad, psicotecnico){
if((edad >= 18 && edad < 40) && (carrera >= 5 && personalidad >= 5 && psicotecnico >= 5)
&& ((carrera > 8) || (personalidad >= 8 && psicotecnico >= 8)
|| (carrera > 7 && (personalidad >= 8 || psicotecnico >= 8)))){
return true
}
return false
}
Ejemplo 3 :
function main(){
for(i=0;i<10;i++){
nomb = readstr()
edad = readval()
carr = readval()
pers = readval()
psic = readval()
if(persona_apta(edad, carr,pers,psic)){
write(nomb + " es apto/a para el puesto de trabajo\n")
}
else{
write(nomb + " es NO apto/a para el puesto de trabajo\n")
}
}
}
Ejemplo 4 :
function separa_frase(){
frase1 = ""
frase2 = ""
letra = ""
letra = readchr()
while(letra != "?"){
frase1 = frase1 + letra
letra = readchr()
}
letra = readchr()
while(letra != "."){
frase2 = frase2 + letra
letra = readchr()
}
}
Ejemplo 5 :
frase1 = ""
frase2 = ""
function main(){
separa_frase()
write(frase1 + "\n")
write(frase2 + "\n")
}
function separa_frase(){
letra = ""
letra = readchr()
while(letra != "?"){
frase1 = frase1 + letra
letra = readchr()
}
letra = readchr()
while(letra != "."){
frase2 = frase2 + letra
letra = readchr()
}
}
Ejemplo 6 :
frase1 = ""
frase2 = ""
function main(){
separa_frase()
readstr() // para garantizar que empezamos en la siguiente línea
for(i=0;i<10;i++){
nomb = readstr()
write(frase1 + nomb + frase2 + "\n")
}
}
function separa_frase(){
letra = ""
letra = readchr()
while(letra != "?"){
frase1 = frase1 + letra
letra = readchr()
}
letra = readchr()
while(letra != "."){
frase2 = frase2 + letra
letra = readchr()
}
}