Anexo 5. Elementos de contextualización y

1
Anexo 5.
Elementos de contextualización y
contenidos de la unidad de conocimiento
Elementos de contextualización
Presentación
Esta unidad de conocimiento proporciona elementos para que los
participantes, por medio del seguimiento a las actividades propuestas,
aprendan a crear funciones y a utilizarlas en la construcción de algoritmos u
otras funciones. Para ello se usarán los recursos del mundo virtual que
ofrece la plataforma LMS+MV3D, con el fin de proporcionar a los estudiantes
un espacio de inmersión en el cual puedan abordar los contenidos,
desarrollar las actividades y aprovechar las formas de comunicación
ofrecidas por la plataforma como medio de trabajo e interacción con otros.
Objetivos
Crear funciones para ser utilizadas por un algoritmo y/o otra función.
Invocar funciones desde un algoritmo principal u otra función.
Metodología
El concepto de funciones se desarrollará en dos fases, la primera contempla
la creación de funciones y la segunda, la utilización de estas en la
construcción de un algoritmo u otra función.
2
La unidad de conocimiento será desarrollada en una plataforma LMS que
ofrece recursos para publicar información y plantear actividades en un MV3D;
en ella se publicará el material de apoyo, las actividades de aprendizaje y de
evaluación, y se tendrá un punto de encuentro para establecer la
comunicación entre los participantes.
Para el desarrollo de las dos fases se cuenta con un material de apoyo:
lecturas, desarrollo de conceptos en la plataforma, videos y enlaces a otras
páginas web; actividades de aprendizaje que ofrecen herramientas para
validar con la práctica lo aprendido y autoevaluarse antes de la evaluación
final; actividades evaluativas orientadas a valorar los conocimientos
adquiridos durante el módulo; y por último se tiene el punto de encuentro, un
lugar para compartir avances, dudas, inquietudes, y reunirse en una sesión
virtual programada que durará una hora y media, para resolver inquietudes
sobre ejercicios propuestos o sobre el tema de estudio.
Conocimientos previos
El participante debe conocer previamente los siguientes temas:
Conceptos básicos: comprende los temas, qué es un algoritmo,
estructura de un algoritmo, tipos de datos, tipos de operadores,
expresiones aritméticas, expresiones lógicas,
instrucciones para
capturar información del usuario final, instrucciones para mostrar
información, algoritmos secuenciales.
Estructuras de decisión: hace referencia a las sentencias de control de
flujo para decisión si y casos.
Estructuras de repetición: contempla las sentencias de control de flujo
para ciclos: mientras, haga… mientras y para.
3
Estructuras de datos: comprende el tema de arreglos unidimensionales,
arreglos multidimensionales y estructuras.
Conocimiento sobre los mundos virtuales en 3D y la asistencia (de
manera virtual) al curso de inducción para el manejo del mundo creado.
Evaluación
Las actividades de evaluación cuentan con comentarios de realimentación,
que tienen como finalidad reforzar el aprendizaje. De esta manera, la
evaluación cumple una función formativa, pues cuando el estudiante
responde de manera no acertada, los mensajes sugieren revisar los
conceptos que se necesitan afianzar, y cuando el estudiante responde
correctamente, los mensajes corroboran las ideas sobre las cuales se
sustentan las respuestas acertadas.
Contenidos de la unidad de conocimiento: funciones
Definición del concepto de función
Las funciones son algoritmos construidos para resolver una tarea específica.
Se escriben de manera independiente y pueden ser utilizadas (o invocadas)
por otros algoritmos u otras funciones.
Una función puede necesitar, para su funcionamiento, datos de entrada
(llamados argumentos o parámetros) obligatorios para realizar su tarea, y
puede retornar o no un resultado.
Las funciones son utilizadas para descomponer soluciones extensas o
complejas en tareas simples y específicas, implementar operaciones que son
comúnmente utilizadas durante un programa, realizar procedimientos que
4
son repetitivos en la ejecución de una función, entre otros. “Estas soluciones
se escriben sólo una vez, pero pueden ser referenciadas en diferentes
puntos de un programa, de modo que se puede evitar la duplicación
innecesaria de código” (Joyanes, 2007).
En programación se utilizan indistintamente los conceptos funciones,
subprogramas y subrutinas, ya que todos ellos hacen referencia a lo que se
denominará en este módulo como funciones.
Cómo trabajar con funciones
Para entender el tema de funciones es necesario diferenciar entre su
creación y su utilización/invocación.
Creación de una función: en el desarrollo de una función, el
programador
debe
conocer
para
qué
servirá
la
función
que
implementará, definir los datos que requiere (parámetros), especificar el
tipo y el número de datos, y también qué información recibe el usuario
que utiliza la función.
Esta información implica definir su nombre, los parámetros de
entrada y el valor que retorna la función. Como todo programa, la
función posee:
 Cabecera, que a su vez contiene tipo del valor de retorno de la
función, el nombre dado a la función y a continuación, si es
necesario, la lista de parámetros de entrada entre paréntesis y
separados por comas, de los cuales se debe definir el tipo de dato
y el nombre dado al parámetro.
5
 Cuerpo de la función, que contiene las instrucciones que permiten
hacer la tarea para la cual fue diseñada la función y devolver el
producto de la función.
En el Ejemplo 1 se presenta la estructura que tiene una función.
Ejemplo 1
Cabecera
Tipodedatoderetorno nombreFuncion (Tipodedato parametro1, Tipodedato parametro2, …)
{
// instrucciones
retorne [ ];
Cuerpo de la función
}
Detalles de la cabecera:
Tipo de dato de retorno. Tipodedatoderetorno: indica el tipo de dato
que la función devolverá al terminar su ejecución. Se debe tener en
cuenta que una función solo puede retornar un tipo de dato (entero,
texto, booleano, entre otros).
Puede presentarse el caso de que una función no necesite retornar
ningún valor. En esta situación, se debe utilizar la palabra reservada
void.
La función devuelve el retorno al algoritmo o la función que la llamó,
mediante la instrucción retorne, la cual va acompañada de la variable
que se quiere retornar, y esta última, a su vez, debe coincidir con el tipo
de dato definido en la declaración de la función.
6
Nombre de la función. nombreFunción: El nombre de una función es
único en el ámbito, pues es mediante este que se identifica y se
distingue de otras. No podrá haber otra función con ese nombre (salvo
sobrecarga o polimorfismo en programación orientada a objetos, que se
verá más adelante).
Dentro de las buenas prácticas de programación, el nombre de una
función debe iniciar con minúscula; en caso de que esté compuesta por
dos palabras, la segunda inicia con mayúscula. Para definir el nombre
de las funciones se aplican los mismos criterios que para el nombre de
las
variables.
Ejemplo:
calcularPromedio,
ordenarVector,
hallarPromedio
Para familiarizarse con el tema de funciones, se muestra a continuación el
algoritmo “hallarMayorValor” que utiliza la función “calcularMayor” (Ejemplo
2).
7
Ejemplo 2
Algoritmo hallarMayorValor
numerico A, B, mayor;
A=5;
B=3;
mayor=calcularMayor(A,B); //se utiliza por primera vez la función calcularMayor
escribir("El valor mayor es ",mayor);
//nuevamente se necesita usar la función calcularMayor
mayor=calcularMayor(75,86);
escribir("El valor mayor es ",mayor);
}
//Implementación de la función calcularMayor
numerico calcularMayor(numerico primerValor, numerico segundoValor) {
numerico mayor;
si(primerValor>segundoValor){
mayor=primerValor;
sino
mayor=segundoValor;
}
retorne mayor;
}
En el Ejemplo 2 se observan dos aspectos diferentes a los que se
trabajan en los algoritmos secuenciales:
1. En
el
algoritmo
principal
mayor=calcularMayor(A,B);
y
aparece
la
instrucción
mayor=calcularMayor(75,86);
lo
anterior confirma el hecho de que una función puede ser invocada
cuantas veces se requiera en un algoritmo con valores o parámetros
diferentes.
2. La función calcularMayor está implementada por fuera del algoritmo
principal, y su objetivo es calcular el valor mayor entre dos números
dados.
8
Lista de parámetros de entrada
¿Qué es un parámetro?
Un argumento o parámetro es una variable que puede ser recibida por una
rutina o subrutina. Una subrutina usa los valores asignados a sus
argumentos para alterar su comportamiento en tiempo de ejecución (Knuth,
2002). Los parámetros son los datos que necesita la función para iniciar su
operación.
Cuando se desarrolla una función, ésta puede no requerir datos o
requerir uno o varios datos para realizar las operaciones necesarias para su
correcto funcionamiento.
Un argumento o parámetro es un dato que es enviado al momento de
invocar la función; dicho dato es almacenado en los parámetros definidos por
la función. La mayor parte de los lenguajes de programación pueden definir
funciones que aceptan cero o más argumentos. Cuando se define la función,
se indica el número de parámetros que espera la función y el tipo de dato de
cada uno de ellos; cuando se invoca la función, la lista de parámetros deberá
coincidir en cantidad, tipo y orden con los de la función definida.
Para los parámetros de una función hay que indicar siempre su tipo de
dato, y debe coincidir con el orden en que deben ser ingresados en la
función, según la definición de esta.
Es importante tener en cuenta que, generalmente, las funciones no
capturan o muestran directamente la información al usuario final, pues lo que
buscan es que se procese la información que se tiene y se entregue; la parte
de ingresar o mostrar la información debe correr por parte del algoritmo
principal.
9
Cuerpo de la función. Bloque de código de instrucciones
Corresponde al conjunto de órdenes y sentencias que debe ejecutar la
función, con el fin de poder lograr el objetivo para el que fue planteado.
Utilización de una función
Este caso es una de las situaciones más repetitivas de los programadores;
siempre se está en la tarea de utilizar las funciones elaboradas por otros
colegas. De aquí la importancia de contar con una adecuada documentación,
para facilitar el uso de las funciones realizadas por otras personas.
Para utilizar una función se requiere conocer: ¿qué hace?, ¿cuál es su
nombre?, ¿qué datos requiere?, ¿en qué orden deben ser ingresados dichos
datos?, ¿qué información devuelve?
Una función puede ser llamada de la siguiente forma: nombreFunción
(Lista de parámetros actuales).
Cuando se llama a una función, desde un algoritmo u otra función, se
establece una correspondencia de izquierda a derecha entre los parámetros
formales (nombres dados a los parámetros cuando se define o declara la
función) y los parámetros actuales (nombres de variables, constantes,
expresiones, entre otros, dados a los parámetros en la llamada a la función).
La llamada a una función implica que a cada parámetro formal se le
asigne el valor real de su correspondiente parámetro actual; se realicen las
acciones dentro del cuerpo de la función; se llegue a la instrucción de
retorno, que le asigna valor al nombre de la función y regresa al punto de
llamada en el algoritmo o función que la invocó.
Cuando se invoca una función, inmediatamente el control de la
secuencia de ejecución es pasado a la función; una vez que esta finaliza su
10
tarea, el control es devuelto al punto del algoritmo o de la función desde
donde fue realizada la llamada.
Ámbito de las variables
Hablar de ámbito en programación es hablar de la parte del programa donde
se conoce el identificador: una constante, una variable o una función. En
programación son utilizadas las cabeceras de los programas y funciones
para definir el ámbito de los identificadores.
Las variables utilizadas en los algoritmos principales y en las funciones,
que hacen uso de las funciones, se clasifican en locales o globales: las
variables locales se declaran y definen dentro de la función y solo tienen
utilidad dentro de esta, no tiene ningún significado para otra función o el
algoritmo desde donde fue llamada; además, no se podrá acceder a ellas
desde otras funciones. Pueden existir variables locales con el mismo nombre,
siempre que estén en funciones diferentes o en cualquier parte del programa
principal. “El significado de una variable se confina a la función en la que está
declarada” (Joyanes, 2007).
Cuando otra función utiliza el mismo nombre para una variable, hace
referencia a otra posición de la memoria. Si una función es declarada
localmente en un programa o en otra función, tendrá significado (se
conocerá) solo dentro de ese programa o función.
Una de las ventajas de trabajar con variables locales es que hace
independiente a las funciones, y para manejar la comunicación entre el
programa principal y la función se usa la lista de parámetros.
Las variables globales son declaradas de forma que puedan ser
utilizadas (consultadas y/o modificadas) desde cualquiera de las funciones
que forman el programa principal. En este caso, no puede haber dos
11
variables globales con el mismo nombre, ya que esto produciría una
ambigüedad que el compilador no podría resolver. En el diseño estructurado
de algoritmos no se recomienda el uso de variables globales, para evitar
dificultades.
Comunicación con las funciones: paso de argumentos
Cuando se hace una llamada a una función, puede requerirse el paso de uno
o más argumentos. Las formas más empleadas para realizar el paso de
parámetros son paso por valor o paso por referencia.
Paso por valor
El paso de parámetros por valor consiste en copiar el contenido de la
variable que queremos pasar (que está en el algoritmo o función que invoca)
en otra dentro del ámbito local de la función; consiste, pues, en copiar el
contenido de la memoria del argumento que se quiere pasar a otra dirección
de memoria, correspondiente al argumento dentro del ámbito de dicha
función. Se tendrán dos valores duplicados e independientes, con lo cual la
modificación de uno no afecta el otro. Los cambios que se produzcan por
efecto de la función no producen cambios en los argumentos originales.
No se diferencia entre un argumento que es variable, constante o
expresión, ya que solo importa el valor del argumento.
Paso por referencia
En el paso de parámetros por referencia, el algoritmo o la función que invoca
pasa a la función llamada, la dirección del parámetro actual (que está en el
ámbito del programa que invoca, y se puede considerar como global a la
12
función). Consiste en proporcionar a la función a la que se le va pasar el
argumento, la dirección de memoria del dato. En este caso, se tiene un único
valor referenciado (o apuntado) desde dos puntos diferentes: el del programa
principal y el de la función a la que se le pasa el argumento, por lo que
cualquier acción sobre el parámetro se realiza sobre el mismo dato en la
memoria.
De la teoría a la práctica
Con base en los conceptos generales vistos sobre funciones, en el Ejemplo 3
se revisa el algoritmo propuesto al inicio del tema. Se tiene un algoritmo
principal hallarValorMayor, el cual utiliza la función calcularMayor.
Documentación: la función calcularMayor permite identificar el mayor
valor entre dos números dados. Para ello requiere recibir los dos números de
tipo numérico, y la función retorna el número mayor.
13
Ejemplo 3. Análisis de la función
Numérico: indica que el valor de retorno de la función es un tipo de dato
numérico; de acuerdo con la documentación, el retorno corresponde al número
mayor entre los dos números pasados como parámetros.
calcularMayor: Nombre de la función
numerico calcularMayor (numerico primerValor, numerico segundoValor) {
numerico mayor;
SI (primerValor > segundoValor ) {
mayor = primerValor;
} SINO {
mayor = segundoValor;
}
retorne mayor
Número primerValor: es el primer parámetro de la función. En la
}
documentación se indica que la función recibe dos números, entre los
que determina cuál es el mayor. De esta manera, primerValor es una
variable que almacenará el valor enviado por el algoritmo principal
donde se llame.
Aspectos por tener en cuenta:
Los parámetros primerValor y segundoValor son recibidos y se
convierten en variables dentro de la función; serán los datos por
comparar dentro de ella y de los cuales se identificará cuál es el número
mayor para devolverlo.
Dentro de la función se pueden declarar las variables necesarias. Estas
variables solo existen para la función y son independientes del
algoritmo o la función que las llame. Para la función calcularMayor es
necesario definir una variable en la que se almacene el valor mayor —
para el ejemplo será mayor—, la cual es de tipo numérico.
14
Luego,
se
realiza
la
comparación
respectiva
primerValor
>
segundoValor, para determinar cuál es el mayor y asignarlo a la
variable del mismo nombre.
Por último, la función retorna el resultado de la comparación, el cual
está almacenado en la variable mayor, mediante la instrucción “retorne
mayor”.
Dentro del algoritmo principal hallarValorMayor se invoca la función
calcularMayor, mediante la instrucción:
mayor = calcularMayor (A,B)
Se llama la función calcularMayor con dos parámetros: variable A y
variable B; dentro del paréntesis solo se escriben los nombres de las
variables que se pasan, dado que el algoritmo, durante su ejecución,
identifica que en la línea anterior se declararon las variables A y B, y,
además, identifica que fueron definidas de tipo numérico.
Es importante tener en cuenta que para este caso el algoritmo le pasa a
la función los valores almacenados en las variables A y B, los cuales son
copiados al espacio de memoria reservado para las variables primerValor y
segundoValor, variables con las cuales trabajará la función. Los valores
almacenados en los parámetros de la función cambiarán de acuerdo con los
valores de los parámetros que pase la función o el algoritmo que invoca la
función.
Se puede visualizar que el resultado o retorno de la función
calcularMayor es almacenado en la variable mayor, la cual siempre debe ser
del mismo tipo de dato del retorno de la función para el caso que se analiza,
tipo de dato numérico (Ejemplo 4).
15
Ejemplo 4
mayor = calcularMayor (A,B)
Asigna el retorno de la función a la variable mayor. Quien
llamó la función no conoce las variables que se utilizaron en
la función, como: primerValor, segundoValor, mayor. Las
variables utilizadas en la función son totalmente
independientes de las variables del algoritmo principal que
invocó la función.
Ejemplo de una función
Elaborar una función que calcule el salario por pagar a una persona, dadas las horas
trabajadas y el valor de la hora. Si las horas laboradas superan las 40, se paga la hora
adicional a 1.5 veces el valor de la hora normal.
Análisis
Parámetros de entrada: Horas laboradas, Valor de la hora
Retorno: salario por pagar
Proceso: si las horas son menores o iguales a 40, Horas laboradas * Valor hora
sino (40*Valor hora)+((Horas Laboradas -40)*(Valor hora *1.5)
numerico calcularSalario(numerico horasLaboradas, numerico valorHora){
numerico salario;
si(horasLaboradas<=40){
salario=horasLaboradas*valorHora;
sino
salario=(40*valorHora)+(horasLaboradas-40)*(valorHora*1.5);
}
retorne salario;
}
16
Uso de la función
Calcular el salario de Hugo, Paco y Luis, conociendo que las horas laboradas son Hugo: 40,
Paco: 30, Luis: 50; el valor de la hora es igual de $100 y es el mismo para todos.
Algoritmo_principal
numerico horasHugo, horasPaco, horasLuis;
numerico valorHoraTrabajada,salarioHugo,salarioPaco,salarioLuis;
horasHugo=40;
horasPaco=30;
horasLuis=50;
valorHoraTrabajada=100;
salarioHugo=calcularSalario(horasHugo,valorHoraTrabajada);
salarioPaco=calcularSalario(horasPaco,valorHoraTrabajada);
salarioLuis=calcularSalario(horasLuis,valorHoraTrabajada);
escribir("El salario de Hugo es : ",salarioHugo);
escribir("El salario de Paco es : ",salarioPaco);
escribir("El salario de Luis es : ",salarioLuis);
}
Ejemplo 5. Paso de argumentos por valor
/* El algoritmo que a continuación se muestra utiliza la función cambiar.
¿Qué valores se muestran por pantalla antes y después de invocar la función? */
Algoritmo_principal
entero a, b;
alfanumerico cambio;
a=7;
b=9;
escribir("\n El valor de a, antes de invocar la función es: " );
escribir ( a );
escribir ("\n El valor de b, antes de invocar la función es: " );
escribir ( b );
cambio=Cambiar (a,b);
escribir ("\n El valor de a, después de invocar la función es: ");
escribir ( a );
escribir ("\n El valor de b, después de invocar la función es: " );
escribir ( b );
}
/* La función Cambiar recibe como parámetros de entrada dos enteros, ambos son pasados
por valor.
La función intercambia los valores de los parámetros y retorna una S */
17
funcion alfanumerico Cambiar(entero c, entero d){
entero guarda;
alfanumerico cambio;
guarda = c;
c= d;
d= guarda;
cambio = 'S';
retornar cambio;
}
Representación gráfica de la ejecución del algoritmo principal
Ejecución del algoritmo principal
18
Ejemplo 6. Paso de argumentos por referencia
/* El algoritmo que a continuación se muestra utiliza la función cambiar.
¿Qué valores se muestran por pantalla antes y después de invocar la función? */
Algoritmo_principal
entero a, b;
alfanumerico cambio;
a=7;
b=9;
escribir("\n El valor de a, antes de invocar la función es: " );
escribir ( a );
escribir ("\n El valor de b, antes de invocar la función es: " );
escribir ( b );
cambio=Cambiar (a,b);
escribir ("\n El valor de a, después de invocar la función es: " );
escribir ( a );
escribir ("\n El valor de b, después de invocar la función es: " );
escribir ( b );
}
/* La función Cambiar recibe cómo parámetros de entrada dos enteros, ambos son pasados
por referencia.
La función intercambia los valores de los parámetros y retorna una S */
funcion alfanumerico Cambiar(ref entero c, ref entero d) {
entero guarda;
alfanumerico cambio;
guarda = c;
c= d;
d= guarda;
cambio = 'S';
retornar cambio;
}
19
Representación gráfica de la ejecución del algoritmo principal
Ejecución del algoritmo principal
20
Actividades de aprendizaje y de evaluación
Actividades de aprendizaje
Actividad 1. Preparándose para salvar la reserva
Objetivo: comprender, por medio de la realización de diferentes ejercicios, los
conceptos básicos sobre la creación y uso de funciones.
Modalidad: equipos de, máximo, cinco personas.
Descripción: la reserva natural está en peligro; para poder ayudar a salvarla,
debes buscar, a través de los elementos que hay en el bosque, aquellos que
contienen un reto. Estos elementos son el libro de la sabiduría, la piedra
filosofal, la carpa del guardabosque, la hoguera (junto al río) y el hongo de la
luz. Para visualizar las instrucciones del reto debes hacer clic sobre el
elemento.
Los retos buscan afianzar tus conocimientos acerca de funciones; por lo
tanto, encontrarás retos de programación y de conceptualización del tema.
Cada vez que superes un reto, aparecerá un mensaje indicando el siguiente
reto por seguir. Algunos de los retos estarán acompañados de una imagen
que es indispensable observar para resolver las preguntas.
A continuación se describe el orden en que se deben realizar los retos.
En estos se encuentran ejercicios que pueden tener uno de los siguientes
tres tipos de actividades: preguntas de falso/verdadero, emparejamiento o
selección múltiple con única respuesta.
Reto 1. El hongo de la luz
Reto 2. La carpa del guardabosque
Reto 3. La piedra filosofal
21
Reto 4. El libro de la sabiduría
Reto 5. La hoguera que se encuentra junto al río
Reto 1. El hongo de la luz
Ejercicio 1
1. funcion entero [] funcion2 (entero arrDatos [], entero orden){
2. entero i, j, var1;
3. para (i = 1; i<=orden; i++ ) {
4.
var1= arrDatos [i];
5.
para (j = i; j<=orden; j++){
6.
si(arrDatos [ j]<var1) {
7.
var1= arrDatos [j];
8.
arrDatos [j] = arrDatos[i];
9.
arrDatos [i] = var1;
10.
}
11.
}
12. }
13. retornar arrDatos [];
14. }
--------------------------------------------------------------------------------------------------1. Algoritmo_principal{
2. entero A[5] , i , resultado[5];
3. para (i = 1;i<=5;i++1) {
4.
si ((i mod 2) == 0) {
5.
A [i] = 5*I;
6.
sino
7.
A [i] =I;
8.
}
9. }
10. resultado = funcion2 (A, 5);
11. para (i = 1; i<=5;i++) {
12.
escribir (resultado [i] + “\n”);
13. }
14. }
A. ¿Cuál grupo de datos muestra el programa principal después de ejecutarse?
a. 1 2 3 4 5
b. 1 3 5 10 20 (opción correcta)
22
c. 20 10 5 3 1
d. 0 1 10 3 20
e. Muestra un error en tiempo de ejecución
Realimentación: la función funcion2 recibe un arreglo unidimensional de enteros de nombre
arrDatos y un entero de nombre orden X que indica el tamaño del arreglo. La función
retorna el arreglo unidimensional con los elementos organizados descendentemente.
B. Si cambiáramos únicamente la línea 6 de la función funcion2 “si (arrDatos [
j]<var1) {” por “si(arrDatos [ j]>var1) {”. ¿Cuál grupo de datos muestra el programa
principal después de ejecutarse?
a. 1 2 3 4 5
b. 1 3 5 10 20
c. 20 10 5 3 1 (opción correcta)
d. 0 1 10 3 20
e. Muestra un error en tiempo de ejecución
Realimentación: al cambiar la línea 6 de la funcion2, esta organizaría en un nuevo arreglo los
datos de arrDatos (parámetro ingresado de tipo numérico) descendentemente.
Ejercicio 2
1. funcion entero [] funcion1 (entero matriz [] [], entero orden){
2. entero fila, columna, índice, arrrDatos [orden];
3. indice = 1;
4. para (fila = 1; fila<= orden; fila++) {
5.
para (columna =1; columna<=orden ; columna++){
6.
si (fila==columna) {
7.
arrDatos[indice] = matriz[fila] [columna];
8.
indice =índice+1;
9.
}
10.
}
11. }
12. retornar arrDatos;
13. }
23
--------------------------------------------------------------------------------------------------1. Algoritmo_ principal{
2. entero i, j , A [10][10] , B[10];
3. para (i =1; i <= 10; i++) {
4. para (j= 1; i<= 10; i++) {
5.
A[i] [j] = i+j;
6. }
7. }
8. B = funcion1 (A, 10);
9. para (i =1; i<=10; i++) {
10. escribir (B [i]);
11. }
12. }
A. Al ejecutar el algoritmo principal, el resultado que se obtiene es:
a. 2 4 6 8 10 12 14 16 18 20 (opción correcta)
b. 1 2 3 4 5 6 7 8 9 10
c. 1 3 5 7 9 11 13 15 17 19
d. un error en tiempo de ejecución
Realimentación: la función funcion1 recibe una matriz de enteros de orden n, un entero
orden que indica el orden de la matriz. La función retorna un arreglo unidimensional de
tamaño X con los elementos que se encuentran en la diagonal de la matriz.
B. Si se cambia la línea 9 del algoritmo principal “para( i =1; i<=10, i++) { por para( i
=1; i<=5, i++) {” y 8 “B = funcion1 (A, 10);” por “B=funcion1(A ,5);” , el resultado que
se obtiene es:
a. 2 4 6 8 10 12 14 16 18 20
b. 2 4 6 8 10 (opción correcta)
c. 1 2 3 4 5 6 7 8 9 10
d. 1 3 5 7 9
e. Un error en tiempo de ejecución
Realimentación: al realizar los cambios indicados en la línea 9 del algoritmo principal y en la
línea 8 de la función funcion1 solo se mostrarían los cinco primeros elementos que se
encuentran en la diagonal del arreglo A.
24
Ejercicio 3
1. Algoritmo_principal {
2. entero C[10], i;
3. para (i=1; i<= 10; i++){
4.
C[i] = i*2;
5. }
6. funcionB(C, 10, 12){
7. para (i=10; i >= 1; i--) {
8.
escribir(C[i]); }
9. }
10.}
-------------------------------------------------------------------------------------------------1. funcion entero funcionA (alfanumérico A[] , entero tamanoA, entero dato){
2. entero indice, i;
3. para (i=1; i<=tamanoA; i++) {
4.
si (A [i] == dato) {
5.
indice = i;
6.
}
7. }
8. retornar indice;
9. }
- ------------------------------------------------------------------------------------------------1. funcion void funcionB (ref alfanumerico A[], entero tamanoA, entero datoEliminar){
2. entero inidiceInicial, i;
3. inidiceInicial = funcionA (A, tamanoA, datoEliminar);
4. para (i=inidiceInicial; i<=tamanoA-1; i++){
5.
A[i]=A [i+1];
6. }
7. retornar;
8. }
A. Al ejecutarse el algoritmo principal, el resultado es:
a. 2 4 6 8 10 12 14 16 18 20
b. 2 4 6 8 10 14 16 18 20
c. 20 18 16 14 12 10 8 6 4 2
d. 20 18 16 14 10 8 6 4 2 (opción correcta)
e. Un error en tiempo de ejecución
25
Realimentación: la función funcionB elimina el elemento datoEliminar del arreglo A de
orden tamanoA, dado que este es un parámetro de referencia, para esto utiliza funciona, la
cual retorna un entero que indica la posición donde se encuentra un elemento en un arreglo
dado.
Ejercicio 4
1. Algoritmo_ principal{
2. entero C [10], i, D[5];
3. booleano resultado;
4. para (i=1; i<=10; i++) {
5. C[i] = i;
6. {
7. para (i=1; i<=5; i++) {
8. D[i]=i*2;
9. }
10. Resultado = funcionA (C, D, 10, 5);
11. }
-------------------------------------------------------------------------------------------------1. funcion booleano funcionA(alfanumerico A [] , alfanumerico B[] , entero tamano A ,
entero tamano B) {
2. booleano esta;
3. para (i=1; i<=tamanoB ; i++){
4.
esta = falso;
5.
para (j=1 ; j <= tamanoA ; j++) {
6.
si (B[i]==A[j]) {
7.
esta = verdadero;
8.
}
9.
}
10. si (!esta) {
11. retornar esta;
12. }
13. }
14. retornar esta;
15. }
A. Al ejecutar el algoritmo principal, el valor que quedará almacenado en la variable
resultado es:
a. Verdadero (opción correcta)
26
b. Falso
c. Un error en tiempo de ejecución
Realimentación: la función funcionA retorna verdadero si todos los elementos del arreglo B
se encuentran en el arreglo A.
B. Si cambiáramos únicamente la línea 10 del algoritmo principal
“resultado=funcionA (C, D, 10, 5);” por “resultado=funcionA (C, D, 5, 10);” el
resultado que quedará almacenado en la variable resultado es:
a. Verdadero
b. Falso (opción correcta)
c. Un error en tiempo de ejecución
Realimentación: la función funcionA retorna falso dado que todos los elementos del arreglo
D no se encuentran en C.
C. Si cambiáramos únicamente la línea 10 del algoritmo principal
“resultado=funcionA (C, D, 10, 5)” por “resultado=funcionA (D, C, 10, 5)” el
resultado que quedará almacenado en la variable resultado es:
a. Verdadero
b. Falso
c. Un error en tiempo de ejecución (opción correcta)
Realimentación: ocurre un llamado en tiempo de ejecución. El arreglo D es de orden 5 y al
cambiar la línea 10, la función funcionA tratará de acceder a las posiciones 6,7,8,9,10, las
cuales no existen en el arreglo.
27
Ejercicio 5
1. Algoritmo_ principal {
2. entero i, j , A [10][10] , B[10] ;
3. para (i =1; i<= 10; i++) {
4.
para (j= 1; j<=10 ; j++) {
5.
A[i] [j] = i+j;
6.
}
7. }
8. B = funcion1 (A, 10) ;
9. para (i=1; i<=10 ; i++ ){
10.
escribir (B [i]);
11. }
12. }
--------------------------------------------------------------------------------------------------1. funcion entero [] funcion1 (entero matriz [] [], entero orden){
2. entero fila, columna, indice, arrrDatos [orden];
3. indice = 0;
4. para (fila = 1; fila<= orden; fila++) {
5. para (columna =1; columna<= orden;columna++) {
6.
si (fila==columna) {
7.
arrDatos[indice] = matriz[fila][columna];
8.
indice = indice+1;
9.
}
10. }
11 . }
12. retornar arrDatos;
}
A. Al ejecutar el algoritmo principal, el resultado que se obtiene es:
a. 2 4 6 8 10 12 14 16 18 20 (opción correcta)
b. 1 2 3 4 5 6 7 8 9 10
c. 1 3 5 7 9 11 13 15 17 19
d. Ninguna de las anteriores
Realimentación: la función funcion1 retorna un arreglo de tamaño orden con los elementos
que se encuentran en la diagonal del arreglo bidimensional matriz de tamaño ordenxorden.
B. ¿Qué nombre sería el más indicado para la funcion1?
a. hallarB
28
b. obtenerArrDatos
c. hallarDiagonaPrincipal (opción correcta)
d. Ninguna de la anteriores
Realimentación: la función funcion1 retorna un arreglo de tamaño orden con los elementos
que se encuentran en la diagonal del arreglo bidimensional matriz de tamaño ordenxorden.
Por tanto, el nombre más indicado para la función es hallarDiagonalPrincipal.
C. Si cambiáramos la línea 2 del algoritmos principal"entero i, j , A [10][10] , B[10];"
por "entero i, j , A [10][10] , B[7];", se obtendría:
a. 2, 4, 6, 8, 10, 12, 14
b. 1, 2, 3, 4, 5, 6, 7
c. 1, 3, 5, 7, 9, 11, 13
d. Muestra error en tiempo de ejecución (opción correcta)
Realimentación: al realizar los cambios indicados en la línea 2 y ejecutar el algoritmo, se
obtiene un error en tiempo de ejecución; dado que en la línea 8 de algoritmo principal se
llama la función funcion1, la cual retorna un arreglo de tamaño 10 y B es un arreglo de
tamaño 8.
Reto 2. La carpa del guardabosques
Ejercicio 1
1. funcion entero FC(entero A[], entero tamanoA){
2. entero i, suma;
3. real promedio;
4. suma = 0;
5. para (i =1; i<=tamanoA; i++){
6.
suma = suma+A[i];
7. }
8. promedio = suma/tamanoA;
9. retornar promedio;
10.}
29
A. Al invocar la función FC con los siguientes datos A={2,4,6,8,10} y tamanoA=5
¿Cuál será el retorno?
a. 10
b. 6 (opción correcta)
c. 5
d. 0
e. Muestra un error en tiempo de ejecución
Realimentación: la función FC recibe un arreglo unidimensional de enteros y un entero
tamanoA que indica el tamaño del arreglo. La función retorna el promedio de los elementos
que se encuentran en el arreglo.
B. Al invocar la función FC con los siguientes datos A={2} y tamanoA=1. ¿Cuál será
el retorno?
a. 2(opción correcta)
b. 1
c. 0
d. Muestra un error en tiempo de ejecución
Realimentación: la función FC recibe un arreglo unidimensional de enteros y un entero
tamanoA que indica el tamaño del arreglo. La función retorna el promedio de los elementos
que se encuentran en el arreglo; de esta manera, el valor que retornará la función al ser
llamada con el arreglo A={2} será dos (2).
C. Si cambiáramos únicamente la línea 6 “suma = suma + A[i];” por “suma = suma *
A[i];”. Al invocar la función FC con los siguientes datos A={2,4,6,8,10} y tamanoA=5
¿Cuál será el retorno?
a. 10
b. 6
c. 5
d. 0 (opción correcta)
e. Muestra un error en tiempo de ejecución
Realimentación: al realizar los cambios indicados y teniendo en cuenta que la variable suma
de la función FC se inicializa en cero (0), la operación “suma=suma*A[i]” siempre dará
como resultado cero (0), al calcular el promedio 0/5 dará cero (0).
30
Ejercicio 2
1. funcion entero[] mostrarDiagonal(entero matriz[][],entero orden){
2. entero fila, columna, indice ;
3. entero diagonal[orden];
4. indice = 0 ;
5. para (fila =1; fila<=orden; fila++ ){
6.
para (columna = 1;columna<=orden ; columna++){
7.
si (fila = = columna ){
8.
indice = indice + 1;
9.
diagonal[indice] = matriz[fila][columna];
10.
}
11.
}
12. }
13. retornar diagonal;
14. }
A. Si el arreglo matriz contiene los siguientes datos matriz={1, 3, 5; 8, 0, 9; 12, 6, 7}
orden=3 que resultado se obtendrá si modificáramos únicamente la línea 6 "para
(columna = 1; columna <= orden; columna++) {" por " para (columna = 2; columna
<= orden; columna++) {"
a. 1 0 7
b. 0 7 (opción correcta)
c. 1 0
d. Muestra error en tiempo de ejecución
Realimentación: la función mostrarDiagonal retorna un arreglo con los elementos que se
encuentran en la diagonal del arreglo matriz de tamaño ordenxorden. Al cambiar la línea 6
"para (columna = 1; columna <= orden; columna++) {" por " para (columna = 2; columna <=
orden; columna++) {" se retornarían los elementos que se encuentran en la diagonal excepto
los que se encuentran en la posición fila 1, columna 1.
B. Si el arreglo matriz contiene los siguientes datos matriz={1, 3, 5; 8, 0, 9; 12, 6, 7}
y la variable entera orden es 4, ¿qué retornara la función?
a. 3 8 7
b. 1 0 7 0
c. 1 0 7
d. Muestra error en tiempo de ejecución (opción correcta)
31
Realimentación: ocurre un error en tiempo de ejecución puesto que el arreglo matriz es de
orden 3x3 y la variable orden indica que es de tamaño 4, cuando la función sea invocada
desde un algoritmo u otra función se intentará acceder a posiciones que no existen en el
arreglo matriz, así que se genera un error en tiempo de ejecución.
C. Qué modificaciones se deben realizar para obtener la diagonal secundaria
a. Cambiar la línea "si (fila = = columna) {" por "si (fila + columna = = orden +
1) {" (Opción correcta)
b. Cambiar la línea "si (fila = = columna) {" por "si (fila + columna = = orden)
{"
c. Cambiar la línea "diagonal[indice] = matriz[fila][columna];" por
diagonal[indice] = matriz[columna][fila];
d. Ninguna de las anteriores
Realimentación: para obtener la diagonal secundaria es necesario que la suma de la posición
de la fila y la columna, donde se encuentre el elemento, sea igual al orden de la matriz más
uno.
Ejercicio 3
1. funcion entero calcularSalario (entero horas_trabajadas, entero valor_horas) {
2. entero salario, diferencia;
3. si ( horas_trabajadas > 40) {
4. diferencia = horas_trabajadas – 40;
5. salario = 40 * valor_horas + diferencia * valor_horas * 1.5;
6. sino
7. salario = horas_trabajadas * valor_horas;
8. }
9. retornar salario ;
10. }
A. ¿Cuál es el salario que se obtiene si las horas trabajadas son 12 y el valor de las
horas es de 50?
a. 600 (opción correcta)
b. 100
c. 800
32
d. Ninguna de las anteriores
Realimentación: la función calcularSalario calcula los salarios de un trabajador para un
número dado de horas trabajadas y un salario hora. Las horas que superen las 40 horas
semanales se pagarán como extras, con un salario hora 1,5 veces el salario ordinario.
B. Si el salario que retorna la función es 1.200, ¿cuáles son los valores
correspondientes a las horas trabajadas y al valor de las horas respectivamente?:
a. 100, 12
b. 40, 30 (opción correcta)
c. 60, 20
d. Ninguna de las anteriores
Realimentación: la función calcularSalario calcula los salarios de un trabajador para un
número dado de horas trabajadas y un salario hora. Las horas que superen las 40 horas
semanales se pagarán como extras, con un salario hora 1,5 veces el salario ordinario.
Reto 3. La piedra filosofal
Ejercicio 1
1. funcion entero[] funcionA(entero arrDatos[], entero orden){
2. entero i, j, mayor;
3. para (i = 1; i<=orden-1; i++) {
4.
mayor = arrDatos[i];
5.
para (j =i+1; j<=orden; j++) {
6.
si(arrDatos[j]>mayor) {
7.
mayor = arrDatos[j];
8.
arrDatos[j] = arrDatos[i];
9.
arrDatos[i] = mayor;
10.
}
11.
}
12. }
13. retornar arrDatos;
14. }
A. Dada la funciónA, al llamarla con los siguientes parámetros, ¿cuál será el
resultado? ArrDatos = {34, 6, 17, 11, 3, 9, 22, 27, 8, 1}, orden = 10
33
a.
b.
c.
d.
1 3 6 8 9 11 17 22 27 34
34 27 22 17 11 9 8 6 3 1(opción correcta)
1 3 9 11 17 27 22 34 6 8
Muestra un error en tiempo de ejecución
Realimentación: la función funcionA recibe un arreglo unidimensional de enteros de nombre
arrDatos y un entero de nombre tamaño orden que indica el orden del arreglo. La función
retorna el arreglo unidimensional con los elementos organizados descendentemente.
B. Dada la funciónA, al cambiar solamente la línea 6 “si(arrDatos[j]>mayor) {” por
“si(arrDatos[j]<mayor) {” al llamarla con los siguientes parámetros, ¿cuál será el
resultado? ArrDatos = {21,31, 5, 27,17}, orden = 5
a. 5 17 21 27 31 (opción correcta)
b. 31 27 21 17 5
c. 5 17 27 21 31
d. Muestra un error en tiempo de ejecución
Realimentación: al cambiar solamente la línea 6 “si(arrDatos[j]>mayor) {” por
“si(arrDatos[j]<mayor) {” , la función retorna el arreglo unidimensional con los elementos
organizados ascendentemente.
C. Dada la funciónA, al llamarla con los siguientes parámetros, ¿cuál será el
resultado? ArrDatos = {21,31, 5, 27,17}, orden = 10
a. 5 17 21 27 31
b. 31 27 21 17 5
c. 5 17 27 21 31
d. Muestra un error en tiempo de ejecución (opción correcta)
Realimentación: la variable orden debe coincidir con el tamaño del arreglo ArrDatos, por
tanto al ejecutar el algoritmo se mostrará un error en tiempo de ejecución dado que ArrDatos
es de orden 5 y la función intenta acceder a las posiciones 6,7,8,9,10 del arreglo que no
existen.
34
Ejercicio 2
1. Algoritmo_principal {
2. entero num;
3. entero cont;
4. booleano r;
5. para (cont = 2; cont<=10; cont++) {
6.
r = FA(cont);
7.
si ( r ) {
8.
escribir(cont);
9.
}
10. }
11. }
--------------------------------------------------------------------------------------------------1. función booleano FA(entero NUM) {
2. entero PR, I ;
3. entero I= 3;
4. booleano RES;
5. RES = verdadero;
6. si ( NUM == 2 ) {
7.
RES =verdadero;
8. sino
9.
PR=NUM/2 ;
10.
si ( PR * 2 = NUM ) {
11.
RES = falso;
12.
sino
13.
mientras ( I <= (NUM - 1) ) {
14.
PR =NUM / I;
15.
si ( PR*I == NUM ) {
16.
RES = falso;
17.
I = I+NUM;
18.
sino
19.
I= I+1;
20.
}
21.
}
22.
}
23. }
24. retornar RES;
25. }.
A. Al ejecutar el algoritmo principal, ¿qué valor se mostrará por pantalla?
a. 1 2 3 4 5 6 7 8 9 10
35
b. 2 4 6 8 10
c. 2 3 5 7 (opción correcta)
d. 1 3 5 7 9
Realimentación: la función FA retorna verdadero si el número ingresado como parámetro es
primo. Al ejecutar el algoritmo principal se mostrarán por pantalla los números primos que
se encuentran entre el 2 y el 10.
B. Si en el algoritmo principal, la línea 7 “si (r) {” cambia por “si (!r) {” al ejecutar el
algoritmo principal, ¿qué valor se mostrará por pantalla?
a. 3 5 7 9
b. 2 4 6 8 10
c. 2 3 5 7
d. 4 6 8 9 10 (opción correcta)
Realimentación: la función FA retorna verdadero si el número ingresado como parámetro es
primo. Al cambiar la línea 7 “si (r) {” por “si (!r) {” se mostrarán por pantalla los números
que no son primos que se encuentran entre el 2 y el 10.
Ejercicio 3
1. funcion entero FA(entero A[], entero tamanoA, entero dato){
2. entero indice, i;
3. indice = 0;
4. para (i = 1; i<=tamanoA; i++) {
5.
si(A[i]==dato) {
6.
indice = i ;
7.
}
8. }
9. retornar indice;
10. }
A. Dada la función FA, al llamarla con los siguientes parámetros, ¿cuál será el
resultado? A= {3, 16, 5, 11, 13, 17, 21, 29, 8, 1}, tamanoA = 10, dato = 17
a. verdadero
b. 6 (opción correcta)
36
c. 10
d. falso
e. Muestra un error en tiempo de ejecución
Realimentación: la función FA retorna un entero con la posición donde se encuentra el
elemento dato en el arreglo A de tamaño tamanoA, si el elemento dato no se encuentra el
retorno es cero (0).
B. Dada la función FA, al llamarla con los siguientes parámetros, ¿cuál será el
resultado? A= {3, 16, 5, 11, 13, 17, 21, 29, 8, 1}, tamanoA = 10, dato = 15
a. verdadero
b. 6
c. 0 (opción correcta)
d. 10
e. Muestra un error en tiempo de ejecución
Realimentación: la función FA retorna un entero con la posición donde se encuentra el
elemento dato en el arreglo A de tamaño tamanoA, si el elemento dato no se encuentra el
retorno es cero (0).
C. Dada la función FA, al cambiar solamente la línea 4 “si(A[i] = = dato) {” por “si(A[i]
!= dato) {” , al llamarla con los siguientes parámetros, ¿cuál será el resultado? A=
{3, 16, 5, 11, 13, 17, 21, 29, 8, 1}, tamanoA = 10, dato = 17
a. verdadero
b. 6
c. 10 (opción correcta)
d. falso
e. Muestra un error en tiempo de ejecución
Realimentación: la función FA retorna un entero con la posición donde se encuentra el
elemento dato en el arreglo A de tamaño tamanoA, si el elemento dato no se encuentra, el
retorno es cero (0). Al cambiar solamente la línea 4 “si(A[i] = = dato) {” por “si(A[i] != dato)
{” en la función se recorrerá todo el arreglo y retornará la última posición donde encuentre un
elemento diferente a dato.
D. Si se desea que la función FA retornará verdadero si la variable dato existe en el
arreglo o falso de lo contrario, qué debería hacerse:
a. La variable i tendría que ser un booleano inicializado en falso y a ella
se le debe asignar verdadero si A[i]= dato es cierto
37
b. La variable índice tendría que ser un booleano inicializado en falso y a
ella se le debe asignar verdadero si A[i ] = = dato es cierto (opción
correcta)
c. Como está la función, se obtiene verdadero si el dato existe o falso de
lo contrario
d. Ninguna de las anteriores
Realimentación: para hacer que la función FA retorne verdadero si la variable dato existe en
el arreglo o falso de lo contrario, se debe declarar la variable índice de tipo booleano,
inicializarla en falso y cuando se cumpla la decisión si A[i]==dato se debe llevar a esta el
valor de verdadero.
Ejercicio 4
1. Algoritmo hallarMayor{
2. entero M1,M2, MF, w, x, y, z;
3. escribir ("Ingrese 4 números" );
4. leer( w );
5. leer( x );
6. leer( y );
7. leer( z );
8. M1=FB(w,x);
9. M2 =FB(y,z);
10. MF=FB(M1, M2);
11. escribir("El resultado es: " );
12. escribir ( MF );
13. }
--------------------------------------------------------------------------------------------------1. funcion entero FB (entero d1, entero d2){
2. entero B;
3. si ( d1>=d2 ) {
4.
B = d1;
5. sino
6.
B = d2;
7. }
8. retornar B;
9. }
38
A. Al ejecutar el algoritmo principal con los siguientes números 85, 56, 42, 17, ¿cuál
será el resultado?
a. El resultado es: 56
b. El resultado es: 85 (opción correcta)
c. El resultado es: 17
d. El resultado es: 42
e. Muestra un error en tiempo de ejecución
Realimentación: la función FB calcula el mayor entre dos números y lo retorna.
B. Si solamente cambiáramos la línea 3 de la función FB “si ( d1>=d2 ) {” por “si (
d1<d2 ) {” Al ejecutar el algoritmo principal con los siguientes números 85, 56,
42, 17, ¿cuál será el resultado?
a. El resultado es: 56
b. El resultado es: 85
c. El resultado es: 17 (opción correcta)
d. El resultado es: 42
e. Muestra un error en tiempo de ejecución
Realimentación: al cambiar la línea 3 de la función FB “si ( d1>=d2 ) {” por “si ( d1<d2 ) {” ,
esta calcularía el menor entre dos números y lo retornaría.
C. Si solamente cambiáramos la línea 2 del algoritmo principal “entero M1,M2, MF,
w, x, y, z;” por “booleano M1,M2, MF, w, x, y, z;” al ejecutar el algoritmo principal
con los siguientes números 85, 56, 42, 17, ¿cuál será el resultado?
a. El resultado es: .V.
b. El resultado es: .F.
c. El resultado es: 17
d. El resultado es: 85
e. Muestra un error en tiempo de ejecución (opción correcta)
Realimentación: al cambiar la línea 2 del algoritmo principal “entero M1,M2, MF, w, x, y,
z;” por “booleano M1,M2, MF, w, x, y, z;” y ejecutar el algoritmo principal se obtendría un
error en tiempo de ejecución, dado que se está tratando de llevar tipos de datos enteros a
tipos de datos booleanos.
39
Reto 4. El árbol de la sabiduría
Asocia la definición de la derecha con la letra correspondiente al término que se encuentra a
la izquierda:
Término
a. Función
Definición
(a) Conjunto de líneas de código, utilizado para descomponer
grandes problemas en tareas simples que son comúnmente
utilizadas durante un programa.
b. Cabecera
(b) Contiene: tipo del valor de retorno de la función, el nombre
dado a la función y a continuación, si es necesario, la lista de
parámetros de entrada entre paréntesis y separados por comas.
c. Cuerpo
(c) Conjunto de instrucciones que permiten hacer la tarea para
la cual fue diseñada la función y devolver el producto de la
función.
d. Void
(d) Palabra clave utilizada cuando una función no regresa
ningún valor.
e. Retorne
(e) Acompañada de la variable que se quiere, devuelve el valor
a la instrucción de donde fue llamada.
f. Nombre de la función
(f) Debe iniciar con minúscula; en caso de que esté compuesta
por dos palabras, la segunda inicia con mayúscula.
40
g. Parámetro
(g) Variable utilizada por la función para iniciar su operación y
pasada
como
argumento
por
referencia
altera
su
comportamiento en tiempo de ejecución.
Selecciona solo una respuesta como verdadera
Las variables que se definen dentro de una función:
a. Son locales a la función.
b. Son locales al programa principal que las llama.
c. Solo pueden ser accedidas dentro de la función.
d. La a y la c (opción verdadera).
e. Todas las anteriores.
Realimentación: Cuando se hace relación a las variables definidas dentro de una función, se
hace relación a las variables locales dentro de ella. Las variables definidas dentro de un
programa principal son consideradas variables globales.
A los siguientes enunciados responde falso o verdadero según los conocimientos
adquiridos.
a. En toda función, el tipo del dato de retorno debe coincidir con el tipo de dato del
parámetro pasado (respuesta correcta: falso).
Realimentación: no es necesario en una función que el tipo de dato de retorno sea del mismo
tipo que el tipo de dato del parámetro pasado.
Ejemplo: si se necesita una función que encuentre e informe si dos valores son iguales, los
parámetros pasados son dos (2) números y el retorno debe ser una variable de tipo lógico que
informe si son iguales (verdadero) o si son diferentes (falso).
41
b. Los parámetros de una función necesitan indicar siempre su tipo de dato y no es
obligatorio especificar el orden en que deben ser ingresados en la función (respuesta
correcta: falso).
Realimentación: en el orden de los parámetros de una función hay que indicar siempre su
tipo de dato y debe coincidir con el orden en que deben ser ingresados en la función, según la
definición de esta. Debe haber una correspondencia directa en el número de parámetros y el
tipo de estos.
c. Cuando una función termina su ejecución, los valores de sus variables locales se
destruyen y no pueden ser utilizadas posteriormente (respuesta correcta: verdadero).
Realimentación: las variables dentro de una función son consideradas locales; al terminar de
ejecutarse dicha función y transferir el control al programa principal que hizo uso de ella, los
valores que habían sido asignados se pierden, y al volver a ejecutarse (en una nueva
llamada), se les deben pasar nuevos valores a sus parámetros.
Reto 5. La hoguera que se encuentra cerca al río
Ejercicio 1
1. Algoritmo_principal{
2. entero numero1 ;
3. entero numero2 ;
4. booleano R ;
5. escribir("ingrese 2 números");
6. leer( numero1);
7. leer (numero2);
8. si ( numero1 > numero2 ){
9.
R = FD(numero1, numero2);
10. sino
11.
R = FD(numero2, numero1);
12. }
13. si ( R) {
42
14.
escribir ("Verdadero");
15. sino
16.
escribir("Falso");
17. }
18. }
--------------------------------------------------------------------------------------------------1.funcion booleano FD(entero NUM1, entero NUM2) {
2. entero PR;
3.booleano RES;
4.RES = falso;
5.PR =NUM1/NUM2;
6. si ( PR * NUM2 = = NUM1 ) {
7. RES = verdadero;
8. }
9.retornar RES;
10. }
A. ¿Con cuál de las siguientes opciones ingresadas en el algoritmo principal se
imprime en pantalla el mensaje verdadero?
a. 3, 7
b. 6, 5, 7
c. 4, 9
d. 6, 3 (opción correcta)
Realimentación: la función FD retorna verdadero si los parámetros son ingresados con
múltiplos el uno del otro.
B. Si en la ejecución del algoritmo principal se ingresaran los números 10, 5, ¿qué
se mostraría en pantalla?
a. Falso
b. Verdadero (opción correcta)
c. Muestra un error en tiempo de ejecución
Realimentación: la función FD retorna verdadero si los parámetros son ingresados con
múltiplos el uno del otro.
43
C. Si en la ejecución del algoritmo principal se ingresaran los números 5, 10, ¿qué
se mostraría en pantalla?
a. Falso
b. Verdadero (opción correcta)
Realimentación: la función FD retorna verdadero si los parámetros son ingresados con
múltiplos el uno del otro.
Ejercicio 2
1. Algoritmo_principal{
2. entero numero;
3. escribir ("Introduzca un entero: ");
4. leer (numero);
5. escribir (FS(numero));
6. }
--------------------------------------------------------------------------------------------------1. funcion entero FS(entero n){
2. entero s;
3. s = 0;
4. mientras (n != 0) {
5.
s = s + (n % 10);
6.
n = n / 10;
7. }
8. retornar s;
9. }
A. Al ejecutar el algoritmo principal e ingresar el número 255, ¿qué valor se
mostrará por pantalla?
a. 255
b. 12 (opción correcta)
c. 50
d. Muestra un error en tiempo de ejecución
Realimentación: la función FS retorna un entero con la suma de los dígitos del número
ingresado como parámetro.
44
B. Si únicamente cambiáramos la línea 5 de la función FS “s = s + (n % 10);” por “s
= s * (n % 10);”. Al ejecutar el algoritmo principal e ingresar el número 255, ¿qué
valor se mostrará por pantalla?
a. 255
b. 12
c. 0 (opción correcta)
d. Muestra un error en tiempo de ejecución
Realimentación: al cambiar la línea 5 de la función FS “s = s + (n % 10);” por “s = s * (n %
10);”. El resultado sería cero (0) dado que la variable s fue inicializada en cero y cualquier
valor multiplicado por cero da como resultado cero.
Actividad 2. Salvando la reserva
Objetivo: afianzar los conceptos de invocar funciones para encontrar la
solución a una situación cotidiana.
Modalidad: equipos, máximo, de tres personas.
Descripción: la reserva natural “Las montañas de mi tierra” fue visitada por un
grupo de turistas que permanecieron durante varios días en cinco chozas
construidas en el árbol de la vida. Por descuido, el día en que se terminó su
visita, los turistas no revisaron que la hoguera que les dio calor durante su
permanencia
quedara
completamente
apagada.
Afortunadamente,
el
centinela ecológico de esta reserva identificó a tiempo el suceso y actuó lo
más pronto posible para que el fuego no se propagara y acabara con la
reserva. El centinela no siempre es capaz de ver el camino para llegar a
apagar el fuego, pues los obstáculos existentes —puertas, paredes y
huecos— le dificultan cumplir su objetivo.
Tu tarea consiste en ayudar al centinela ecológico para que en dos (2)
horas apague el fuego en cada una de las cuatro chozas que se encuentran
en las ramas del árbol, y evitar que este se propague y cause un daño
ecológico a la reserva natural. Para ayudarlo, debes indicarle en el tablero
principal existente en cada choza las instrucciones necesarias, y en su
45
orden, para que desde el sitio donde esté ubicado se desplace al lugar donde
está el fuego y pueda apagarlo.
El tablero principal permite poner 16 instrucciones, que serán
ejecutadas cuando se haga clic en el botón ejecución. Si se necesitan más
instrucciones, se deberán utilizar los tableros secundarios o cuadro
subfunción, los cuales permiten construir otro grupo de instrucciones
(función) que luego debe ser llevado al tablero principal para su ejecución;
estos tableros secundarios tienen un número máximo de 16 instrucciones. Si
la solución planteada no logra el objetivo, nuevamente deberá elaborar una
solución a partir de la posición del centinela. Recuerda que el tiempo es
limitado. Una subfunción puede ser utilizada más de una vez desde el tablero
principal. Las instrucciones disponibles para ayudarle al centinela en los
tableros son: avanzar, giro a la derecha, giro a la izquierda, salto hacia
adelante, abrir la puerta y apagar el fuego, las cuales pueden ser utilizadas
en cualquier tablero indistintamente.
Para ir a la actividad, busca el árbol que tiene chozas construidas en
sus ramas, iníciala ingresando a la primera choza (de abajo hacia arriba) del
árbol y supera el reto para poder avanzar a la siguiente choza; en cada una
de estas debes apagar el fuego y no podrás avanzar a la siguiente choza
hasta no superar el reto actual. Una vez se apague el fuego en las cuatro
chozas, debes subir a la última choza y tocar la bandera para indicar que has
cumplido el desafío.
Esta actividad de aprendizaje se basa en la versión de Ligth Robot Games,
elaborada por Armor Games y programada por Daniel Yaroslavsky.
46
Actividades evaluativas
Objetivo: construir y usar funciones con los conocimientos y herramientas
trabajadas en el desarrollo de la unidad de conocimiento, para encontrar la
solución a una situación dada.
Modalidad: equipos, máximo, de tres personas.
Descripción: entidad bancaria Banco Andino.
La entidad bancaria Banco Andino es una organización fundada en 1962 en
Medellín, por la familia Jaramillo, quienes desde su inicio visualizaron el
mercado latinoamericano como público objetivo para su negocio, lo cual
alcanzaron en la década de los años noventa, con el posicionamiento en
países como Brasil, Panamá y Colombia.
La entidad cuenta con un sistema encargado de administrar el
portafolio de los clientes (servicios o productos financieros con los que
cuenta un cliente); las cuenta de ahorros son el producto más frecuente.
Entre las operaciones que se pueden realizar con una cuenta de ahorros se
encuentra realizar un movimiento para consignar o retirar dinero de la
cuenta. La información que el banco tiene de cada cliente es número de la
cédula, sucursal de origen de la cuenta, saldo actual y los últimos 30
movimientos de la cuenta. De cada movimiento se registra el tipo de
movimiento y el valor.
Preguntas por resolver:
1. Definir la estructura ‘Cliente’, que permita almacenar información
correspondiente a un usuario de la entidad bancaria (valor: 20%).
47
2. Hacer la función verificarSaldo, la cual recibe un arreglo de estructuras
tipo ‘Cliente’ (definida en el punto 1) de tamaño 100, un alfanumérico A
y un entero Z. La función busca en el arreglo la cuenta del usuario A. Si
Z es mayor que el saldo actual del usuario A, la función retorna
verdadero; de lo contrario, retorna falso (valor: 20%).
3. Construya la función registrarMovimiento, la cual recibe un arreglo de
estructuras tipo ‘Cliente’ (definida en el punto 1) de tamaño 100, un
alfanumérico X, un entero Y y un entero Z. La función busca en el
arreglo el cliente con cédula X, realiza el movimiento Y, del valor Z. Y
solo puede tomar los valores 1 y 2: 1. consignación y 2. retiro. La
función no retorna nada y recibe por referencia el arreglo de estructuras
tipo ‘Cliente’ (valor: 30%).
Tenga en cuenta que siempre que se realiza un retiro debe existir
saldo disponible en la cuenta y que cubra el movimiento.
Nota: en este punto es obligatorio usar la función ultimoMovimiento
y verificarSaldo.
4. Realice un algoritmo principal que le permita ingresar las transacciones
de los diferentes clientes de la entidad bancaria. En cada operación se
suministra la siguiente información: cédula del cliente, tipo de
movimiento por realizar (1. consignación y 2. retiro) y valor. Suponga
que ya han sido ingresados en el arreglo de estructuras la información
correspondiente a la cédula, sucursal y saldo actual (valor: 30%).
La función ultimoMovimiento recibe un arreglo de estructuras tipo ‘Cliente’
(definida en el punto 1) de tamaño 100, un alfanumérico X. La función retorna
el número del último movimiento realizado en la cuenta X. (No tiene que
implementarla, solo usarla).
48
Encuentro virtual
El siguiente ejercicio lo deben desarrollar los estudiantes antes del encuentro
virtual que se llevará en el curso, con el fin de solucionar las dudas al
respecto.
El polinomio de Taylor puede ser utilizado para aproximarse a la función
seno de un ángulo, lo cual se expresa como:
Desarrolla un programa que, con un número dado de términos, encuentre el
seno de un ángulo determinado, y usa para ello dos funciones: una de ellas
halla el numerador como un exponente y la otra halla el denominador como
el factorial de un número.
Referencias
Joyanes Aguilar, Luis (2007), Fundamentos de programación. Algoritmos,
estructuras de datos y objetos, 3.ª ed., México, McGraw Hill.
Knuth, Donald (2002), El arte de programar ordenadores, Barcelona,
Reverté.