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é.
© Copyright 2024