PseInt es quizá el intérprete de pseudocódigo en español más extendido. Desde hace pocos meses, permite definir funciones. Aquí tienes unas nociones básicas sobre cómo hacerlo...
En muchos casos, nos encontraremos con tareas que tenemos que repetir varias veces en distintos puntos de nuestro programa. Si tecleamos varias veces el mismo fragmento de programa no sólo tardaremos más en escribir: además el programa final resultará menos legible, será más también será más fácil que cometamos algún error alguna de las veces que volvemos a teclear el fragmento repetitivo, o que decidamos hacer una modificación y olvidemos hacerla en alguno de los fragmentos. Por eso, conviene evitar que nuestro programa contenga código repetitivo. Una de las formas de evitarlo es usar "subrutinas", una posibilidad que permite casi cualquier lenguaje de programación, y que en ocasiones recibe el nombre de "procedimientos" o de "funciones" (a veces, con algún matiz que hace que esas palabras no sean realmente sinónimos).
PseInt permite definir "subrutinas" (o "funciones") dentro del pseudocódigo, desde la versión del 10 de octubre de 2012. En su caso, se llaman "subprocesos". Veamos un ejemplo de su uso:
Vamos a empezar por crear un subproceso (o "subrutina", o "procedimiento") que escriba 20 guiones, que podríamos utilizar para subrayar textos. Un programa completo que escribiera tres textos y los subrayara podría ser:
Proceso SubProcesos01 Escribir " Primer ejemplo" Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" Escribir " Segundo ejemplo" Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" Escribir " Tercer ejemplo" Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinProceso
Muy repetitivo. Sería un poco más elegante si lo reescribimos así:
Proceso SubProcesos02 Escribir " Primer ejemplo" Subrayar Escribir " Segundo ejemplo" Subrayar Escribir " Tercer ejemplo" Subrayar FinProceso Subproceso Subrayar Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinSubproceso
Mucho más legible. Pero todavía no está tan bien como debería: siempre estamos escribiendo 20 guiones, aunque el texto sea más largo o más corto. En la mayoría de lenguajes de programación se puede indicar detalles adicionales ("parámetros") para que se puedan utilizar desde dentro de esa subrutina. Por ejemplo, en nuestro caso podríamos indicarle qué texto queremos escribir y qué longitud queremos que tenga la secuencia de guiones:
Proceso SubProcesos03 EscribirSubrayado(" Primer ejemplo", 16) EscribirSubrayado(" Segundo ejemplo", 17) EscribirSubrayado(" Tercer ejemplo", 16) FinProceso Subproceso EscribirSubrayado(texto, cantidad) Escribir texto Para x <- 1 Hasta cantidad Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinSubproceso
Aunque todavía es un poco redundante: en general, querremos escribir tantos guiones como letras tenga el texto, así que no será necesario indicar ese dato. Desde octubre de 2012, PseInt incluye ciertas funciones predefinidas para manejo de cadenas de texto; una de ellas es "Longitud", que nos indica la cantidad de letras que tiene un texto, de modo que nuestro programa se podría simplificar así:
Proceso SubProcesos04 EscribirSubrayado("Primer ejemplo") EscribirSubrayado("Segundo ejemplo") EscribirSubrayado("Tercer ejemplo") FinProceso Subproceso EscribirSubrayado(texto) Escribir texto Para x <- 1 Hasta Longitud(texto) Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinSubproceso
También podemos crear funciones que realicen ciertas operaciones aritméticas y devuelvan un resultado, como las funciones matemáticas que vimos en el tema 10. Se puede hacer con la misma palabra "subproceso" que hemos empleado hasta ahora, pero muchos lenguajes de programación distinguen entre un "procedimiento" o "subrutina", cuando se da una serie de pasos pero no se devuelve ningún valor, y una "función", cuando sí se devuelve un resultado, así que usaremos esta última nomenclatura. Se parece mucho a lo que hemos hecho hasta ahora, con la diferencia de que escogeremos un nombre para la variable que guardará el resultado, así:
Funcion resultado <- Maximo( n1, n2) Si n1 > n2 Entonces resultado <- n1 Sino resultado <- n2 FinSi FinFuncion Proceso Funciones01 Escribir "El máximo de 5 y 12 es:" Escribir Maximo(5,12); Escribir "El máximo de 25 y 12 es:" Escribir Maximo(25,12); Finproceso
Este programa crea una función que calcula cuál es el mayor de los dos números que se le indican como parámetro, y la usa dos veces, para mostrar el máximo de dos valores prefijados.
No sólo pdemos devolver valores numéricos; también podemos devolver cadenas (como las funciones que vimos en el apartado 13) o "valores de verdad" (verdadero, falso). Por ejemplo, podemos crear una función que diga si un número es primo o no (lo vamos a hacer de la forma más simple pero también de la menos eficiente: aplicar la definición, probando a dividir entre todos los números que hay entre 1 y n; si hemos encontrado dos divisores -o menos, para el número uno-, entonces el número es primo):
SubProceso resultado <- Primo ( num ) cantidadDivisores <- 0 Para cont <- 1 Hasta num Hacer Si num % cont = 0 Entonces cantidadDivisores <- cantidadDivisores + 1 FinSi Fin Para Si cantidadDivisores <= 2 Entonces resultado <- verdadero Sino resultado <- falso Fin Si Fin SubProceso Proceso PrimosDel1Al30 Para n <- 1 hasta 30 si Primo(n) Entonces Imprimir n FinSi FinPara FinProceso
Si quieres más detalles sobre el pseudocódigo o sobre PseInt, aqui los tienes.