3 - Guía Subprogramas
3 - Guía Subprogramas
SUBPROGAMAS EN
PSEINT
Objetivos de la Guía
En esta guía aprenderemos a:
PSUBPROGAMASP
En esta guía aprenderemos el uso de los subprogramas. Hasta el momento, desarrollamos nuestro
código en el Algoritmo Principal, con esto, si quisiéramos realizar varias sumas de variables, cada
vez que quisiéramos adicionar su valor, deberíamos calcularlo, algo así:
Muchas veces nos ocurrirá en la programación que deberemos realizar la misma operación varias,
incluso miles de veces. Para evitar que repitamos estas operaciones, surgen los subprogramas.
1
Este método de diseñar la solución de un problema principal obteniendo las soluciones de sus
subproblemas se conoce como diseño descendente (top-down). Se denomina descendente, ya
que se inicia en la parte superior con un problema general y se termina con varios subproblemas
de ese problema general y los soluciones a esos subproblemas. Luego, las partes en que se
divide un programa deben poder desarrollarse independientemente entre sí.
2
P¿QUÉ SON LAS FUNCIONES?P
Matemáticamente una función es una operación que toma uno o más valores llamados
argumentos y produce un resultado.
Cada función se evoca utilizando su nombre en una expresión con los argumentos encerrados
entre paréntesis. A una función no se le llama explícitamente, sino que se le invoca o referencia
mediante un nombre y una lista de parámetros.
Por último, irá el cuerpo de la función, que será una serie de acciones o instrucciones cuya
ejecución hará que se asigne un valor al nombre de la función. Esto determina el valor particular
del resultado que ha de devolverse al programa llamador.
El algoritmo o programa llama o invoca a la función con el nombre de esta última en una expresión
seguida de una lista de argumentos que deben coincidir en cantidad, tipo y orden con los
parámetros de la función. Se denominan argumentos a las variables o valores declarados en el
algoritmo principal que se pasan en el paréntesis de la función para que esta reciba esos valores
SINTAXIS
Funcion variable_de_retorno <- Nombre (Parámetros)
Definir variable_de_retorno como Tipo de Dato
<acciones> //cuerpo de la función
FinFuncion
¿Cómo se ve en PseInt?
3
• Variable_de_retorno: contiene el resultado que devuelve la función que debe coincidir con el
tipo de dato de retorno.
EJERCICIO COOPERAR
Realiza una función llamada Cooperar que reciba dos variables de tipo carácter, una variable debe
contener el mensaje “Cooperando” y la otra “trabajamos mejor”. La función debe concatenar
ambos textos.
DETECCIÓN DE ERRORES
¿Puedes corregir esta función para que cumpla con su sintaxis?
• Nombrar funciones
4
¿CÓMO SE INVOCAN LAS FUNCIONES?
Una función puede ser llamada de la siguiente forma:
nombre_función(Argumentos)
Cada vez que se llama a una función desde el algoritmo principal se establece automáticamente
una correspondencia entre los argumentos y los parámetros. Debe haber exactamente el mismo
número de parámetros que de argumentos en la declaración de la función y se presupone una
correspondencia uno a uno de izquierda a derecha entre los argumentos y los parámetros.
Además, cuando se llama a la función está va a devolver el resultado de las acciones realizadas
en la función(variable de retorno) este resultado debe ser “atrapado” en el algoritmo. Ya sea para
usarlo o solo para mostrarlo, por lo que al llamar una función debemos, o asignarle el resultado a
una variable o concatenar el llamado de una función con un escribir
variable = nombre_funcion(argumentos)
Escribir nombre_funcion(argumentos)
Entonces para resumir se puede decir que la función tiene cinco componentes importantes:
5
EJERCICIO COOPERAR – PARTE 2
¿Recuerdan la Función Cooperar? Hora de llamarla en el algoritmo principal y mostrar el mensaje
por pantalla.
DETECCIÓN DE ERRORES
¿Puedes corregir esta función para lograr el resultado esperado?
6
PPROCEDIMIENTOSP
Aunque las funciones son herramientas de programación muy útiles para la resolución de
problemas, con frecuencia se requieren subprogramas que no retornen ninguna información o se
encarguen de imprimir información. En estas situaciones la función no es apropiada y se necesita
disponer del otro tipo de subprograma: el procedimiento.
¿QUÉ ES UN PROCEDIMIENTO?
Un procedimiento es un subprograma que ejecuta un proceso específico. Ningún valor está
asociado con el nombre del procedimiento; por consiguiente, no puede ocurrir en una expresión.
Un procedimiento se llama escribiendo su nombre. Cuando se invoca el procedimiento, los pasos
que lo definen se ejecutan y a continuación se devuelve el control al programa que le llamó.
Sintaxis
nombre(argumentos)
7
PÁMBITO: VARIABLES LOCALES Y GLOBALESP
Las variables utilizadas en los programas principales y subprogramas se clasifican en dos tipos:
variables locales y variables globales.
Una variable local es aquella que está declarada y definida dentro de un subprograma, en el
sentido de que está dentro de ese subprograma, es distinta de las variables con el mismo nombre
declaradas en cualquier parte del programa principal y son variables a las que el algoritmo
principal no puede acceder de manera directa.
El significado de una variable se confina al procedimiento en el que está declarada. Cuando otro
subprograma utiliza el mismo nombre se refiere a una posición diferente en memoria. Se dice que
tales variables son locales al subprograma en el que están declaradas.
Una variable global es aquella que está declarada en el programa o algoritmo principal, del que
dependen todos los subprogramas y a las que pueden acceder los subprogramas, a través del
paso de argumento. La parte del programa/algoritmo en que una variable se define se conoce
como ámbito o alcance (scope, en inglés).
El uso de variables locales tiene muchas ventajas. En particular, hace a los subprogramas
independientes, siendo solo la comunicación entre el programa principal y los subprogramas a
través de la lista de parámetros.
donde PA1, PA2, ..., PAn son los parámetros y ARG1, ARG2, ..., ARGn son los argumentos.
Cuando nosotros decidimos los parámetros que va a necesitar nuestro subprograma, también
podemos decidir cuál va a ser el comportamiento de los argumentos en nuestro subprograma
cuando lo invoquemos y se los pasemos por paréntesis. Esto va a afectar directamente a los
argumentos y no al resultado final del subprograma.
Para esto existen dos tipos más empleados para realizar el paso de argumentos, el paso por valor
y el paso por referencia.
8
Paso por Valor
Los argumentos se tratan como variables locales y los valores de dichos argumentos se
proporcionan copiando los valores de los argumentos originales. Los parámetros (locales a la
función o procedimiento) reciben como valores iniciales una copia de los valores de los
argumentos y con ello se ejecutan las acciones descritas en el subprograma.
Aunque el paso por valor es sencillo, tiene una limitación acusada: no existe ninguna otra
conexión con los parámetros, y entonces los cambios que se produzcan dentro del subprograma
no producen cambios en los argumentos originales y, por consiguiente, no se pueden poner
argumentos como valores de retorno. El argumento actual no puede modificarse por el
subprograma.
En PSeInt todas las variables que pasemos como argumentos pasan por defecto “Por Valor” sino
se especifica lo contrario explícitamente.
En numerosas ocasiones se requiere que ciertos argumentos sirvan como argumentos de salida,
es decir, se devuelvan los resultados al programa que llama. Este método se denomina paso por
referencia o también de llamada por dirección o variable. El programa que llama pasa al
subprograma la dirección del argumento actual (que está en el programa que llama). Una
referencia al correspondiente argumento se trata como una referencia a la posición de memoria,
cuya dirección se ha pasado. Entonces una variable pasada como argumento real es compartida,
es decir, se puede modificar directamente por el subprograma.
La característica de este método se debe a su simplicidad y su analogía directa con la idea de que
las variables tienen una posición de memoria asignada desde la cual se pueden obtener o
actualizar sus valores. El área de almacenamiento (direcciones de memoria) se utiliza para pasar
información de entrada y/o salida; en ambas direcciones.
9
Copia, pega y ejecuta el código. Analiza qué está sucediendo
Algoritmo valorVSreferencia
Definir num Como Entero
num = 2
Escribir num
Escribir "Ahora enviamos el número a la función por valor y el
resultado es:"
elevarAlCuadradoPorValor(num)
Escribir num
Escribir "***********"
Escribir "Ahora enviamos el número a la función por referencia y el
resultado es:"
elevarAlCuadradoPorReferencia(num)
Escribir num
FinAlgoritmo
PRECURSIÓNP
Una función o procedimiento que se puede llamar a sí mismo se llama recursivo. La recursión
(recursividad) es una herramienta muy potente en algunas aplicaciones, sobre todo de cálculo. La
recursión puede ser utilizada como una alternativa a la repetición o estructura repetitiva. El uso de
la recursión es particularmente idóneo para la solución de aquellos problemas que pueden
definirse de modo natural en términos recursivos.
10
Revisemos lo aprendido hasta aquí
PEJERCICIOS DE APRENDIZAJEP
Para cada uno de los siguientes ejercicios realizar el análisis del problema e indicar cuáles son los
datos de entrada y cuáles son los datos de salida. Escribir luego el programa en PSeInt utilizando
funciones y/o procedimientos.
VIDEOS: Te sugerimos ver los videos relacionados con este tema, antes de empezar los
ejercicios, los podrás encontrar en tu aula virtual o en nuestro canal de YouTube.
Subprogramas: Funciones
1. Realizar una función que calcule la suma de dos números. En el algoritmo principal le
pediremos al usuario los dos números para pasárselos a la función. Después la función
calculará la suma y lo devolverá para imprimirlo en el algoritmo.
2. Realizar una función que valide si un número es impar o no. Si es impar la función debe
devolver un verdadero, si no es impar debe devolver falso. Nota: la función no debe tener
mensajes que digan si es par o no, eso debe pasar en el Algoritmo.
3. Crea una función EsMultiplo que reciba los dos números pasados por el usuario, validando
que el primer número múltiplo del segundo y devuelva verdadero si el primer número es
múltiplo del segundo, sino es múltiplo que devuelva falso.
4. Realizar un programa que pida al usuario una frase y una letra a buscar en esa frase. La
función debe devolver la cantidad de veces que encontró la letra. Nota: recordar el uso de la
función Subcadena().
5. Realizar una función que reciba un numero ingresado por el usuario y averigüe si el número es
primo o no. Un número es primo cuando es divisible sólo por 1 y por sí mismo, por ejemplo: 2,
3, 5, 7, 11, 13, 17, etc. Nota: recordar el uso del MOD.
Subprogramas: Procedimientos
6. Realizar un procedimiento que permita intercambiar el valor de dos variables de tipo entero.
La variable A, debe terminar con el valor de la variable B.
11
8. Realizar un procedimiento que permita realizar la división entre dos números y muestre el
cociente y el resto utilizando el método de restas sucesivas.
El método de división por restas sucesivas consiste en restar el dividendo con el divisor hasta
obtener un resultado menor que el divisor, este resultado es el residuo, y el número de restas
realizadas es el cociente. Por ejemplo: 50 / 13:
9. Escribir un programa que procese una secuencia de caracteres ingresada por teclado y
terminada en punto, y luego codifique la palabra o frase ingresada de la siguiente manera:
cada vocal se reemplaza por el carácter que se indica en la tabla y el resto de los caracteres
(incluyendo a las vocales acentuadas) se mantienen sin cambios.
a e i o u
@ # $ % *
Por ejemplo, si el usuario ingresa: Ayer, lunes, salimos a las once y 10.
La salida del programa debería ser: @y#r, l*n#s, s@l$m%s @ l@s %nc# y 10.
Recursión
10. Escribir una función recursiva que devuelva la suma de los primeros N enteros.
12
p¿No pudiste cumplir los objetivos de la guía?p
Si aún no has logrado tildar los objetivos propuestos, no te preocupes, a
través de Slack contacta a un Coach para que te ayude a diseñar una
estrategia personalizada para entender qué pasó y poder avanzar.
Subprogramas: Funciones
1. Realizar una función que calcule y retorne la suma de todos los divisores del número n
distintos de n. El valor de n debe ser ingresado por el usuario.
2. Diseñar una función que reciba un numero en forma de cadena y lo devuelva como numero
entero. El programa podrá recibir números de hasta 3 dígitos. Nota: no poner números con
decimales
3. Crear una función llamada “Login”, que recibe un nombre de usuario y una contraseña y que
devuelve Verdadero si el nombre de usuario es “usuario1” y si la contraseña es “asdasd”.
Además, la función calculara el número de intentos que se ha usado para loguearse, tenemos
solo 3 intentos, si nos quedamos sin intentos la función devolverá Falso.
4. Los empleados de una fábrica trabajan en dos turnos: Diurno y Nocturno. Se desea calcular el
jornal diario de acuerdo con las siguientes reglas:
El programa debe solicitar la siguiente información al usuario: el nombre del trabajador, el día
de la semana, el turno (diurno o nocturno) y la cantidad de horas trabajadas. Además,
debemos preguntarle al usuario si el día de la semana (lunes, martes, miércoles, etc.) era
festivo o no, para poder calcular el jornal diario. Utilice una función para realizar el cálculo.
Ejemplo: 25 = 2 + 5 = 7
Nota: Para obtener el último número de un digito de 2 cifras o más debemos pensar en el
resto de una división entre 10. Recordar el uso de la función Mod y Trunc.
13
6. Realizar una función que reciba un numero ingresado por el usuario y averigüe si el número
tiene todos sus dígitos impares (ejemplo: 333, 55, etc.). Para esto vamos a tener que separar el
numero en partes (si es un numero de más de un digito) y ver si cada número es par o impar.
Nota: recordar el uso de la función Mod y Trunc(). No podemos pasar el numero a cadena para
realizar el ejercicio.
Y la del 5 es (2+3),
Y así sucesivamente…
Por lo tanto, si queremos calcular el término “n” debemos escribir una función que reciba
como argumento el valor de “n” y que calcule la serie hasta llegar a ese valor.
8. Realizar una función que reciba un numero ingresado por el usuario y averigüe si el número es
capicúa o no (Por ejemplo: 12321). Nota: recordar el uso del MOD y el Trunc. No podemos
transformar el numero a cadena para realizar el ejercicio.
! !!
( " ) = ("!(!%")!)
𝑚
Diseñar una función que permita calcular el número combinatorio de ( 𝑛 )
Subprogramas: Procedimientos
10. Crea un procedimiento “convertirEspaciado”, que reciba como argumento un texto y muestra
una cadena con un espacio adicional tras cada letra.
Por ejemplo, “Hola, tú” devolverá “H o l a , t ú “. Crea un programa principal donde se use
dicho procedimiento.
11. Realizar un subproceso que reciba una letra y muestre un mensaje si esa letra esta entre las
letras “M” y “T”. Recordar que Pseint le da un valor numérico a cada letra a través del Código
Ascii, lo que nos deja usar operadores relacionales con letras y cadenas.
14
12. Crear un programa que dibuje una escalera de números, donde cada línea de números
comience en uno y termine en el número de la línea. Solicitar la altura de la escalera al usuario
al comenzar. Ejemplo: si se ingresa el número 3:
1
12
123
13. Realice un algoritmo que solicite al usuario una fecha y muestre por pantalla la fecha anterior.
Para ello se deberá utilizar un procedimiento llamado diaAnterior que reciba una fecha
representada a través de tres enteros dia, mes y anio, y retorne la fecha anterior. Puede
asumir que dia, mes y anio representan una fecha válida. Realice pruebas de escritorio para
los valores dia=5, mes=10, anio=2012 y para dia=1, mes=3, anio=2004.
14. Diseñar un procedimiento que reciba una frase, y el programa remueva todas las vocales
repetidas. Al final el procedimiento mostrará la frase final.
Recursión
15. Crear un programa que calcule la suma de los enteros positivos pares desde N hasta 2.
Chequear que si N es impar se muestre un mensaje de error.
16. Implemente de forma recursiva una función que le dé la vuelta a una cadena de caracteres.
NOTA: Si la cadena es un palíndromo, la cadena y su inversa coincidirán.
17. Realice nuevamente un programa que calcule la función de Fibonacci, pero esta vez de
manera recursiva.
Escribir un programa que calcule el máximo común divisor (MCD) de dos enteros positivos. Si
M >= N una función recursiva para MCD es:
MCD = M, si N =0
18. El programa le debe permitir al usuario ingresar los valores para M y N. Una función recursiva
es entonces llamada para calcular el MCD. El programa debe imprimir el valor para el MCD.
15