UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION GUIA DE LABORATORIO #04 Nombre de la Practica: CICLO: 01/ 2013 Estructuras repetitivas en Algoritmos Lugar de Ejecución: Centro de Computo Tiempo Estimado: 2 horas y 30 minutos MATERIA: Introducción a la Programación I. OBJETIVOS Que el alumno sea capaz de: • Evaluar la solución a problemas que requieren repetir uno o más bloques de instrucciones • Utilizar apropiadamente las diversas estructuras repetitivas disponibles en los algoritmos • Traducir correctamente un pseudocódigo repetitivo a la sintaxis utilizada por las aplicaciones DFD y PSeint II. INTRODUCCION TEORICA Tipos de Estructuras de Control dentro de un Algoritmo Existen tres tipos de estructuras generales para controlar la secuencia de la ejecución de los pasos de un algoritmo. Estas son: a) Estructura secuencial b) Estructura condicional o selectiva c) Estructura repetitiva C. USO DE INSTRUCCIONES REPETITIVAS EN UN ALGORITMO Para crear una estructura repetitiva (también llamadas Ciclo, Lazo o Bucle), se necesita definir 3 elementos: a) Ya sea una Condición de Conteo o una Condición Lógica. b) Un contador, el cual deberá incrementarse por cada iteración del lazo. c) Un bloque de pasos de un algoritmo, que se necesita repetir (denominado el Cuerpo del Bucle) Cada vez que se ejecuta el bloque completo de pasos (Cuerpo del Bucle) de una Estructura Repetitiva, se dice que se ha completado un “Ciclo”. Existen tres tipos diferentes de estructuras repetitivas cuyos diagramas de flujo y pseudocódigo se muestran a continuación: 1 Guía #: 04 Estructuras repetitivas en Algoritmos Estructura Mientras La estructura repetitiva Mientras es aquella en la cual, el cuerpo del bucle se repite solamente cuando se cumpla una Condición Lógica específica (ver figura 4.1). Cuando se ejecuta la instrucción Mientras, la primera cosa que sucede es que se evalúa una Condición (una expresión lógica), para luego realizar lo siguiente: * Si la expresión lógica es verdadera, entonces se ejecuta el cuerpo del bucle. Luego se prepara nuevamente para evaluar a la misma expresión lógica. Representación de estructura Mientras Diagrama de flujo: Este proceso (ejecución del Cuerpo del Bucle) se repite una y otra vez solamente cuando la expresión lógica (condición) sea verdadera Pseudocódigo: Mientras <expresión_logica> Hacer acción S1 acción S2 . * Si se evalúa falsa, ignora todo el conjunto de pasos (el cuerpo del Bucle), para que el algoritmo continué con la siguiente instrucción después del fin del bucle Mientras. . acción Sn Fin_Mientras Figura 4.1: Estructura de control “Mientras” Estructura Hacer – Mientras El bucle hacer mientras es similar al bucle mientras, es decir que el Cuerpo del Bucle se ejecuta una y otra vez solamente cuando su Condición (Expresión lógica) sea verdadera. Existe, sin embargo, su gran diferencia con la estructura Mientras es que el Cuerpo del Bucle esta encerrado entre la palabras reservadas hacer y mientras, de modo que las sentencias de dicho cuerpo se ejecutan al menos una vez, antes de que se evalué la expresión lógica, ver Figura 4.2. Representación de estructura Hacer Mientras Diagrama de flujo: Pseudocódigo: Hacer acción S1 acción S2 . . acción Sn En otras palabras, el cuerpo del bucle siempre se ejecuta una vez, y al finalizar, se evalúa la expresión lógica. Mientras <expresión_logica> Figura 4.2: Estructura de control “Hacer Mientras”. Introducción a la Programación 2 Estructura Repetir-Hasta El bucle Repetir-Hasta permite ejecutar al menos una vez un Cuerpo de pasos, para luego evaluar una Condición Lógica. La misma debe resultar Falsa para repetir nuevamente el Cuerpo del Bucle, de lo contrario, sale del Bucle para continuar con el resto del algoritmo. Si se observa el Diagrama de flujo del bucle Repetir Hasta y lo compara con el resto de estructuras repetitivas, resulta ser casi idéntica al bucle Hacer-Mientras. Representación de estructura Repetir Hasta Diagrama de flujo: Pseudocódigo: Repetir acción S1 acción S2 La diferencia entre ambas estructura se centra en la resultado de la Evaluación Lógica de la Condición utilizada. . . acción Sn Hasta <expresión_logica> Para repetir el cuerpo de un Bucle HacerMientras, la Condición deberá ser evaluada como Verdadera; en cambio, para el Bucle Repetir-Hasta, requiere que la condición sea Falsa para repetir el Cuerpo del Bucle. Figura 4.3: Estructura de control “Repetir Hasta”. Estructura Para Al solucionar un problema con estructuras repetitivas, muchas veces ocurre que se conocen de antemano el número de veces que se desean ejecutar un mismo Grupo de instrucciones dentro de un Bucle. En estos casos, cuando el numero de iteraciones es fijo, se puede usar la estructura Para. La representación de la estructura Para es la siguiente: Representación de estructura Para Diagrama de flujo: Pseudocódigo: Para i vi Hasta vf [incremento | decremento incr] hacer acción S1 acción S2 . acción Sn Fin_Para En donde: i: variable índice vi, vf: valores inicial y final de la variable incr: indica el valor numérico en que va haciendo el aumento o decremento por default hace un incremento de 1 Figura 4.4: Estructura de control de repetición ”Para”. 3 Guía #: 04 Estructuras repetitivas en Algoritmos La estructura Para ejecuta las acciones del Cuerpo del Bucle un numero especificado de veces y de modo automático controla el numero de iteraciones o pasos a través del cuerpo del bucle. Comienza con un valor inicial de la variable índice y las acciones especificadas se ejecutan solamente cuando el valor inicial sea menor que el valor final. La variable índice se incrementa en 1 (por defecto, se cuenta de uno en uno), o en el valor que especifiquemos, y si este nuevo valor no excede al valor final se ejecutan de nuevo las acciones. Si establecemos que la variable índice decremente en cada iteración el valor inicial deberá ser superior al final. Consideremos siempre la variable índice de tipo entero. Estructuras repetitivas del software DFD En el programa DFD se cuenta con 2 tipos de estructuras repetitivas (Ver figura 4.5), las cuales son Mientras y la estructura Para. La estructura y sintaxis de uso de cada una se explica a continuación. Figura 4.5: Estructuras Mientras y Para en la aplicación DFD Estructura Mientras Al igual que lo mencionado en la introducción general de un lazo Mientras, DFD requiere que especifique 2 elementos: A. Una condición de control, la cual se coloca en el símbolo inicial. B. Cuerpo del bucle: el o los pasos a ejecutar solamente cuando la condición anterior se cumpla. Este se ubica en la línea que une a los 2 símbolos iniciales que definen a la estructura. Estructura Para Este ciclo necesita la definición de una variable de conteo, la cual lleva el control de la cantidad de veces que el ciclo se está repitiendo. Para definirlo, el símbolo de apertura MQ solicita 3 parámetros obligatorios y uno opcional, mostrado en la figura 4.6. Figura 4.6: los 4 parámetros requeridos por estructura Para en DFD Introducción a la Programación 4 Guía #: 04 Estructuras repetitivas en Algoritmos La variable de conteo la utiliza el Bucle, para evaluarla con el resto de los 3 parámetros de la figura 4.6 y determinar si debe o no repetir una vez más la ejecución de su Cuerpo de instrucciones. La expresión de conteo puede ser un (valor fijo, una variable o una expresión), e indicara el valor inicial para la variable de conteo del Bucle. La expresión de valor final a contar es el valor máximo que la variable de conteo llegara a tener durante el último ciclo a ejecutar por la estructura Para. En otras palabras, la variable de conteo del ciclo no deberá superar el valor de dicho valor final, para poder repetir una vez más el Cuerpo del Bucle La expresión de incremento tiene un valor predeterminado de 1 y funciona de esta manera: Cada vez que el ciclo Para finaliza la ejecución de su cuerpo de instrucciones, incrementa a su variable de conteo con el valor de la expresión de incremento. Si el valor de incremento es negativo, el ciclo se lo restara a su variable de conteo. Luego, compara al nuevo valor de la variable de conteo contra el valor final, para así determinar si repite una vez más el cuerpo del ciclo o sino, finaliza su ejecución. ¿Cuándo un ciclo Para repetirá una vez más a su cuerpo de instrucciones? Un ciclo Para utiliza a los valores asignados a su pareja de parámetros (expresión final de conteo y al incremento) para determinar si debe repetir su bloque de pasos una vez mas y también, como alterara a su variable de conteo cuando un ciclo se finalice. Las reglas se resumen en la tabla 1 a continuación: Si valor de incremento es… Condición que evalúa ciclo Para para determinar si repite una vez a su Cuerpo de instrucciones. Al finaliza un ciclo, al valor de variable de conteo se … … positivo Variable de conteo debe ser menor o igual a Valor final de conteo … suma valor de incremento … negativo Variable de conteo debe ser mayor o igual a Valor final de conteo … resta el incremento Tabla 1: Condiciones que evalúa un ciclo Para de acuerdo a su valor final de conteo y tipo de incremento (+ o -) Introducción a la Programación 5 Estructuras repetitivas del software PSeint Dentro del programa PSeint se tienen disponibles a 3 de las estructuras repetitivas, las cuales son Mientras, Repetir-Hasta y la estructura Para, ver figura 4.7. La estructura y sintaxis de uso de cada una se explica a continuación. * Mientras * Repetir Hasta * Para Figura 4.7: “Comandos” de PSeint para estructuras repetitivas Sintaxis y uso de la instrucción “Mientras” Repite un bloque de instrucciones (Secuencia_de_acciones) limitada entre el paso Mientras y paso FinMientras. La repetición del bloque de pasos se controla al inicio de la estructura, gracias a evaluar a una condición lógica CL “Expresion_logica”, cuyo resultado Verdadero o Falso es aprovechado para determinar si repite o no el bloque!! Al utilizar un lazo Mientras hay que tener cuidado de lo siguiente: a. Para permitir que el lazo Mientras ejecute al menos una vez su ciclo de instrucciones, usted debe de asegurarse que su Condición Lógica se cumpla (inicialmente), sino PSeint ignora a toda el bloque a repetir dentro de la estructura y continuara con el paso justamente después del cierre del Mientras. b. Para que el lazo Mientras pueda repetir el Bucle una o más veces, asegúrese que en el interior de los pasos del ciclo se modifique/altere el valor de (por lo menos) una de las variables utilizada en la CL, de manera que al finalizar el ciclo actual, PSeint evalué de nuevo la CL, y decida si repetir el Bucle. c. Según la aclaración anterior, si necesita que el lazo finalice (que ya no se repita de nuevo el ciclo), asegúrese que al volver a evaluar la CL, esta ya no se cumpla. Como conclusiones de las últimas dos aclaraciones: • Siempre asegúrese que la CL del lazo sea Verdadera para mantenerse repitiendo continuamente el lazo mientras, mientras que vuelva la CL a Falsa para salir del lazo. • Tenga mucho cuidado: Si al evaluar la CL, esta siempre es verdadera, los ciclos del lazo Mientras nunca finalizaran y PSeint no podrá continuar con el resto del flujograma. GENERANDO UN LAZO INFINITO!! 6 Sintaxis y uso de la instrucción “Repetir - Hasta” La estructura permite repetir un bloque de instrucciones (secuencia_de_acciones) limitadas entre los pasos “Repetir” y “Hasta que”. Usa una Condición Lógica CL (expresión_logica) para determinar si repetir nuevamente el cuerpo del ciclo. Al utilizar un lazo Repetir-Hasta hay que tener cuidado de lo siguiente: a. El ciclo Repetir-Hasta hasta ejecuta una vez el cuerpo del bloque b. Para determinar si volver a ejecutar el bucle, se debe asegurar que la Condición Lógica del paso final del ciclo se cumpla, sino PSeint continuara con el paso justamente después del cierre del Repetir-Hasta. c. Para que el lazo Repetir-Hasta pueda repetir el Bucle 2 o más veces, asegúrese que en el interior de los pasos del ciclo se modifique/altere el valor de (por lo menos) una de las variables utilizada en la CL que se evalúa al final de la estructura, de manera que al finalizar cada ciclo, PSeint evalué de nuevo la CL, y decida si repetir el Bucle. d. Según la aclaración anterior, si necesita que el lazo finalice (que ya no se repita de nuevo el ciclo), asegúrese que al finalizar el cuerpo, la CL ya no se cumpla. Sintaxis y uso de la instrucción “Para - Hasta” La estructura repetitiva Para consta de 2 pasos (Para y FinPara) que limitan el cuerpo del bucle (secuencia_de_acciones) a repetir. Dentro del paso “inicial” de una estructura Para se le necesita definir una condición de conteo la cual consta de los siguientes 4 parámetros: Una variable de conteo (variable_numerica) que lleve el control del total de ciclos de instrucciones repetidas por el lazo Para Un valor fijo o en una variable (valor_inicial) que se le asignara a la variable de conteo anterior, para indicar el valor inicial del conteo de ciclos a repetir [OPCIONAL] un valor de incremento (paso) que se le aplicara a la variable de conteo usada por el ciclo Para. A este valor/variable se le denomina también el INCREMENTO. Un valor fijo o una variable (valor_final) que diga el valor final de conteo, es decir hasta donde debe llegar la variable de conteo para dejar de repetir ciclos del Para. En conclusión Al igual que en los PSeudocodigos, la sintaxis de estas estructuras repetitivas en PSeint requieren las siguientes reglas de uso: 1. Las estructuras Mientras y Repetir-HastaQue requieren escribirles una “Condición Lógica”, la cual se ubica al inicio del bucle (en ciclo Mientras) o sino al final (en bucle Repetir-Hasta) 7 Guía #: 04 Estructuras repetitivas en Algoritmos 2. ¿Cómo debe ser evaluada la condición implementada en un Bucle?, ya sea para definir cuando se repetirá el cuerpo del Bucle o cuando se terminara (y continuar con el resto del algoritmo) 3. Para la estructura Para, se deben definir 3 parámetros obligatorios (variable conteo, valor inicial, valor final del conteo) y uno opcional (valor que define incremento del conteo) III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. Requerimiento Cantidad 1 Guía de Laboratorio #04 de IP 1 2 PC con software DFD y PSeint instalados 1 3 Disquete ó Memoria USB 1 IV. PROCEDIMIENTO 1. Proceda a crear una carpeta de trabajo, denominada Practica4IP_SUCARNET para almacenar todos los archivos a elaborar dentro del procedimiento de la práctica. Reemplazar SUCARNET por su número de carnet. PARTE A: Uso de operadores lógicos (AND, OR y NOT) 2. Crear un archivo de texto sencillo llamado PARTEA.txt, en la cual redactara la solución del problema descrito en la figura 4.8. Expresiones Lógicas (Condiciones Compuestas) a evaluar… Resultado de expresión ¿V o F? 10+t>1+2*m m<5 or p <> t MOD 7 (t<>p+3) and not(-2*n>m^2) (n=t-4) and (t-n <= m) or (t^p=1) Asignacion inicial de variables : m<- (5), n<- (-7), p<-(0), t<-(2) Figura 4.8: Evaluación de una condición compuesta Dado el listado de variables (y el valor inicial de cada una), desarrolle la “Evaluación” paso a paso de cada una de las Expresiones Lógicas (Condiciones compuestas) indicadas en la tabla de la Figura 4.8. En otras palabras, determine si c/condición da resultado Verdadero o Falso Introducción a la Programación 8 Guía #: 04 Estructuras repetitivas en Algoritmos PARTE B: Estructura Repetitiva (Lazo/Ciclo Para) 1. A continuación se le brinda una serie de problemas y su respectivo Algoritmo (solución), para que usted elabore el Diagrama de Flujo (con DFD) y el Pseudocódigo (con aplicación Pseint). NOTA: Con respecto a los comentarios “de programador” indicados en algunas de las líneas (con uso de //): A. No deben ser redactados en archivos DFD, ya que esta aplicación no permite esa funcionalidad B. Para las soluciones en PSeint, si debe redactar la información descrita por los “comentarios de programador” al redactar las líneas de c/pseudocódigo inicial a traducir. PROBLEMA 1: Haga lo necesario para mostrar en pantalla a la “Tabla de multiplicar” de un Número dado por el usuario. 2. A continuación se le ofrece la solución (en Pseudocódigo general) que resuelve este problema, utilizando una estructura repetitiva Para. Paso descripción 1 Inicio 2 //lista de variables de... 3 Declarar num<-0.8 4 Declarar factor<-0.7 //.. Salida 5 Declarar contador<-0 //.. Proceso 6 Escribir "PROGRAMA PARA GENERAR Tabla de Multiplicar" 7 Escribir "Escriba un numero para mostrar su tabla de multiplicar" 8 Leer num 9 Para contador<-1 Hasta 10, incremento 1 //.. Entrada 10 factor<-num*contador 11 Escribir ">> ",num," x ",contador," = ",factor 12 FinPara 13 Fin 3. Prepare un nuevo archivo de diagrama de flujo en el software DFD. 4. Redacte los pasos del 3 al 8 con la simbología y parámetros apropiados solicitados por DFD 5. Guarde el archivo bajo el nombre Problema1.dfd en su carpeta de trabajo. 6. Luego del símbolo DFD “Leer” antes del final del diagrama de flujo, ahí creara la estructura repetitiva Para en el paso 9 del pseudocódigo. Introducción a la Programación 9 Guía #: 04 Estructuras repetitivas en Algoritmos Para ello, seleccione el símbolo (Ciclo para) y de clic en la línea después del símbolo Lectura (utilizado para cumplir el paso 8 del pseudocódigo). 7. Observe el resultado en la Figura 4.9 8. De doble clic sobre el símbolo de inicio de la estructura. 9. Digite los siguientes valores como los 4 parámetros que le solicita DFD (en ese orden): Contador 1 10 1 Figura 4.9: Agregando estructura Para al diagrama de flujo 10. De un clic en cualquier área vacía del área de diseño del flujograma. 11. Entre la línea que une a los pasos [Para] y [Fin(Para)], agregue los símbolos apropiados para implementar los pasos 10 y 11 del pseudocódigo general. 12. Proceda a ejecutar el DFD. Ingrese un numero entero X y luego analice si obtiene la tabla de multiplicar de ese número ingresado. 13. Repita el paso anterior, pero ingresando un valor negativo. También debe generarse su tabla de multiplicar. 14. Para continuar, se creara un archivo de pseudocódigo en el software Pseint equivalente al pseudocódigo general de solución del PROBLEMA 1. 15. Guardar el nuevo archivo en su carpeta de trabajo bajo el nombre Problema1.pseint 16. A continuación se le ofrece la solución que resuelve el problema anterior, pero con la sintaxis de PSeint y sin incluir aun los pasos de la estructura de repetición (rango de pasos 9 al 12) del pseudocódigo general. Proceda a digitar el código siguiente en su archivo pseint: Linea Instruccion 1 Proceso Guia3ejemplo1 2 //lista de variables de... 3 num<-0.8; 4 factor<-0.7; //.. Salida 5 contador<-0; //.. Proceso 6 Escribir "PROGRAMA PARA GENERAR Tabla de Multiplicar"; 7 Escribir "Escriba un numero para mostrar su tabla de multiplicar"; 8 Leer num; 9 //.. Entrada FinProceso 17. Para agregar la estructura Para requerida en el paso 9 del pseudocódigo del PROBLEMA 1, insertar una línea en blanco luego de la Línea 8 del código en PSeint. Introducción a la Programación 10 Guía #: 04 Estructuras repetitivas en Algoritmos 18. Colocar cursor en esta línea 9 vacia y seleccionar el comando Para de PSeint. Se agregara la estructura general de la estructura Para-Fin Para en 3 Líneas del pseudocódigo. 19. Reemplace los parámetros resaltados: variable_numerica, valor_inicial, valor_final y paso, por los valores: contador, 1, 10 y 1, respectivamente. De esta manera, se implementan los valores del conteo a ejecutar por ciclo Para, según los valores indicados en el Paso 9 del pseudocódigo general. 20. Luego, reemplace el parámetro secuencia_de_acciones por los comandos necesarios para implementar los pasos 10 y 11 del pseudocódigo. 21. Compruebe que la solución funciona, ejecutando el pseudocódigo y brindando un valor positivo. Si hay algún problema, revise su código y corríjalo. 22. Ahora compruebe la ejecución de su pseudocódigo con la herramienta PasoxPaso. Siga la secuencia de los pasos, y específicamente analice con mucho cuidado como se ejecuta el Ciclo Para: + ¿Cuándo y por qué se mantiene dentro del ciclo? + ¿Cuándo y por que logra salir del ciclo y finalizar el algoritmo general? PARTE C: Estructura Mientras (Lazo o Ciclo Mientras) 23. A continuación se le ofrece otro problema, para que se evalué/analice e implemente el algoritmo solución, tanto en DFD como en PSeint! PROBLEMA 2: Solicite un listado de 6 enteros (que sean “solo positivos”) al usuario, para que al finalizar, se le muestre las estadísticas siguientes: a) ¿Cuántos de los números resultaron ser múltiplos de 3? b) Suma de solamente los múltiplos de 7 (si los hay) o avisar que no ingreso ninguno. c) El Promedio de los números pares que fueron ingresados. Extras: + debe llamarle la atención del usuario cuando este último no ingrese un valor positivo. + No mostrar las estadísticas hasta haber recibido del usuario un listado completamente “valido” de números solicitados (es decir, que cada uno de los 6 números recibidos sean positivos !!) 24. Proceda a crear en PSeint a un nuevo Pseudocódigo denominado Problema2_ETAPA1.pseint. 25. En este archivo, creara la solución a este problema, pero por etapas, con el fin de ir evaluando el impacto que genera cada una de ellas en conjunto, para lograr el cumplimiento total del problema. Introducción a la Programación 11 Guía #: 04 Estructuras repetitivas en Algoritmos ETAPA 1: Solicitar a usuario un total de 6 números a usuario, pero que sean solamente positivos. 26. Digite las líneas de solución de la 1er etapa, mostradas en la tabla 2 y que ya están con la sintaxis de PSeint Ahí están definidas todas las variables (de entrada, salida y proceso) que requiere la solución final. 27. Ejecute el pseudocódigo y confirme que solo muestra el dialogo definido en pseudocódigo y finaliza normalmente, sin ninguna lectura (Entradas) de variables. 28. Ahora agregara la lógica necesaria para hacer que usuario ingrese verdaderamente 6 números positivos, incluso le llame la atención cuando se equivoque!! 29. Colocar el cursor al final de la Línea 13 del mismo y presionar Enter para agregar una Línea 14 vacía. 30. En esta nueva línea, seleccione el comando Mientras. Se agregan las 3 líneas mínimas que requiere la estructura Mientras para ejecutarse. Línea 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Código de pseint Proceso Multiplos4 //Entradas N<-5; //Uno de los Números dados por usuario y puede ser +, - o cero //Salidas multi3<-0; sumamulti7<-0;prompares<-0.8; //Procesos totnum<-6; //valor constante totvalidos<-0; sumapares<-0;totpares<-0; //Solicitando entradas Escribir "Programa de Estadisticas Basicas"; Escribir "Necesito que me digite un total de ",totnum," números enteros"; Escribir "PERO SOLAMENTE POSITIVOS"; FinProceso Tabla 2: Pasos de la Etapa 1 de solución del PROBLEMA 2. 31. En esta nueva línea, seleccione el comando Mientras. Se agregan las 3 líneas mínimas que requiere la estructura Mientras para ejecutarse. 32. Reemplace parámetro expresión_logica del ciclo Mientras por la condición: totvalidos<totnum Y en lugar de secuencia_de_acciones, digitara los pasos para solicitar a usuario un único valor positivo de todo el l listado, capturándolo en variable en N, por cada vez que se ejecute el Cuerpo del Bucle. Vea el resultado en la Tabla 3. Introducción a la Programación 12 Guía #: 04 Estructuras repetitivas en Algoritmos Línea 14 15 16 17 Código de pseint Mientras totvalidos<totnum Hacer Escribir ">> Dato ",totvalidos+1,":"; Leer N; FinMientras Tabla 3: Pasos que definen al lazo Mientras que requiere la Etapa 1 de solución del PROBLEMA 2. 33. Proceda a ejecutar la solución e intente escribir 6 valores cualesquiera, pero que sean todos positivos. Ahora responda ¿Finalizo el programa al ingresar el ultimo valor valido? 34. Digite mas valores para determinar en qué momento logra finalizar la ejecución. Responda ¿Cuántos datos ingreso usted en el pseudocódigo de PSeint para que finalizara la ejecución? A este problema de repetir continuamente los mismos pasos de un Ciclo, sin finalizar nunca de hacerlo, se le conoce como un CICLO INFINITO. Este se desencadena debido a que no se altera ninguna de las variables definidas en la Condición que usa un Ciclo para determinar si debe repetir una vez más su cuerpo de instrucciones (Cuerpo del bucle). Entonces nunca se deja de cumplir la condición usada por la estructura y ya no se ejecutan los pasos siguientes al paso del fin del Ciclo. 35. Observe que el valor de variable totValidos siempre se mantiene con un valor de 1, y totnum es constante (con un valor de 6). Así que nunca se dejara de cumplir la condición 1 < 6 usada por el ciclo Mientras. 36. Aborte la ejecución infinita de este pseucodigo, cerrando la ventana de ejecución del mismo. 37. Ahora convertirá a la variable totValidos en una “variable de conteo” que se usara en la condición del Ciclo Mientras, para indicarle ¿Cuándo debe continuar repitiendo su cuerpo de instrucciones y también, cuando finalizar el ciclo? Para evitar generar un Ciclo Infinito como el del caso previo. 38. Inserte la siguiente asignación luego de la Línea 16: totvalidos <- totvalidos+1; 39. Ahora pruebe al pseudocódigo, ingresando cualquier cantidad de números positivos. ¿funciona el conteo del paso anterior? 40. Nuevamente, ejecute al pseudocódigo, ingresando cualquier cantidad de números solamente negativos ¿funciona el conteo de ciclo del paso anterior? En ambos pruebas, el conteo de solamente 6 valores ingresados se hace correctamente, gracias a que la asignación de la línea 16 hace la función de un “conteo de un ciclo” Un contador de ciclo es una variable que forma parte de la condición de control usada por un Ciclo/Bucle y que luego es alterada dentro del Cuerpo de ese mismo Ciclo (en este caso la estructura Mientras)!! 41. Pero en las 2 pruebas anteriores ¿Son datos validos en cada caso, según el problema a resolver? La prueba 2 no es conveniente para la solución del problema 2. Para cumplir perfectamente la ETAPA 1 de la solución del PROBLEMA 2, se requiere que se acepte solamente 6 valores y que TODOS sean positivos; así como descartar cualquier valor negativo y llamar la atención del usuario cuando esto suceda!! 42. Reemplace la Línea que agrego como “conteo de ciclo” al pseudocódigo (la línea 17 actual) por una estructura de toma de decisiones (Si-Entonces) que cumpla con estas características: Introducción a la Programación 13 Guía #: 04 Estructuras repetitivas en Algoritmos + Redacte una condición que permita determinar ¿Cuando la variable N es negativa? + En el bloque 1 (cuando se cumple la condición), genere 2 mensajes en secuencia al usuario: * primero, avisarle que ha ingresado un número no valido y los motivos que justifican el llamado de atención. * Indicarle el tipo de valores que debe ingresar, para que sean tomados en cuenta (sean correctos!!) + En el bloque 2 (Sino), inserte nuevamente al paso de conteo del ciclo Mientras: totvalidos <- totvalidos+1; 43. Ejecute nuevamente el pseudocódigo e ingresar mezclas de valores negativos y positivos. Preste atención al valor del conteo del listado de numero solicitado al usuario: ¿Qué ocurre cuando es un numero positivo (correcto) o negativo (incorrecto)?, ¿Usuario recibe los mensajes de error en el momento apropiado? 44. Si todo es correcto, guarde su pseudocódigo actual y luego haga clic en el menú (Archivo/Guardar como..), para hacer una copia del archivo actual, bajo el nombre Problema2_ETAPA2.pseint. ETAPA 2: Determinar ¿Cuántos de los números ingresados son múltiplos de 3? 1. Cierre el archivo Problema2_ETAPA1.pseint, para que los cambios de esta etapa se realicen solamente en el archivo Problema2_ETAPA2.pseint. 2. Ahora se procederá a realizar cada uno de los cálculos para cumplir las salidas esperadas de la solución. 3. La meta final de la Etapa 2 sera determinar al primer dato de salida: total de números validos que son múltiplos de 3. 4. Colocar el cursor al inicio de la línea que hace la función de conteo del ciclo Mientras ( totvalidos <totvalidos+1; ) y presionar tecla Enter 2 veces, para insertar nuevos pasos en blanco (desplazando esste paso y los siguientes hacia abajo de la redacción, sin borrarlos!!) 5. En la 1er línea vacía (ubicada luego del paso Sino de la estructura Si-Entonces), agregue una nueva toma de decisiones (Si entonces). Elimine el paso Sino de esta nueva estructura Si-Entonces Reemplace el parámetro expresion_logica por una condición que permita determinar ¿Cuándo el valor de la variable N es múltiplo de 3? 6. En el único bloque Si de esta 2da toma de decisiones (Si-Entonces), agregue este paso de asignación multi3<-multi3+1; Con esta asignación, la variable multi3 está siendo utilizada como una “variable de conteo”, porque cada vez que se ejecuta ese paso, la variable multi3 se cambia al sumar a su valor almacenado un valor fijo de 1… está contando de 1 en 1!! 7. Ahora, inserte un paso en blanco después de la línea del paso FinMientras. En esta línea en blanco, haga los pasos necesarios para que se muestre un idéntico al siguiente: RESULTADOS FINALES: 1. Usted escribió un total de X números multiplos de 3 En donde X deberá ser reemplazado por el valor guardado en la variable de conteo multi3. 8. Ejecute al pseudocódigo con los datos de prueba definidos en la tabla de entradas-salidas a continuación (ver Tabla 4 ). Debe obtener las salidas ahí indicadas en cada caso: Introducción a la Programación 14 Guía #: 04 Estructuras repetitivas en Algoritmos #prueba Entradas (valores de N) 1 9 16 2 11 7 24 5 81 22 7 Salida (mensaje en pantalla) 15 56 83 RESULTADOS FINALES: 1. Usted escribio un total de 4 números multiplos de 3 RESULTADOS FINALES: 1. Usted escribio un total de 0 números multiplos de 3 Tabla 4: pruebas de ejecución para ETAPA 2 de la solución del PROBLEMA 2 9. No continúe el procedimiento hasta cumplir el paso anterior!! 10. Guarde su pseudocódigo actual y luego de clic en el menú (Archivo/Guardar como…), para hacer una copia del archivo actual, bajo el nombre Problema2_ETAPA3.pseint. Cierre el archivo Problema2_ETAPA2.pseint ETAPA 3: Calcular sumatoria de solamente los múltiplos de 7 o sino, avisar que no ingreso ninguno 11. Los cambios a continuación se harán en el Problema2_ETAPA3.pseint 12. Para esta Etapa 3, localice la variable (sumamulti7) en el listado de creación de variables al inicio del pseudocódigo. 13. Colocar el cursor al final de la Línea donde se ubica el paso (Fin_Si) de la toma de decisiones que se agrego en la Etapa 2 anterior!! 14. Presione tecla Enter para insertar líneas vacías en el pseudocódigo. 15. En la 1er línea en blanco, agregue una tercera toma de decisiones (Si-Entonces) y defina para la misma: + una condición que determine ¿Cuando la variable N es múltiplo de 7? + elimine el Paso Sino a la misma + Luego, en el único bloque Si de esta estructura, agregue la siguiente asignación: sumamulti7<-sumamulti7+N; La variable summulti7 hace la función de Acumulador o Sumador, debido a que asigna su nuevo valor basada en su valor inicial más el valor de otra variable diferente!! En este caso, esta sumando solamente a cada valor de N ingresado por usuario (y que previamente se ha comprobado que es múltiplo de 7). 16. Luego, ubique cursor al final del penúltimo paso del pseudocódigo (el paso previo al paso Fin, en donde muestra al usuario el total de números múltiplos de 3 que ingreso). 17. Presione Enter para insertar una Línea en blanco. 18. En esta línea en blanco, agregue una tercera Toma de Decisiones que tenga esta características: + La condición permitirá saber si ¿La variable sumamulti7 es diferente de cero? + Si se cumple, mostrar al usuario el valor de la sumatoria de los números los números múltiplos de 7 que ingreso + Cuando no se cumple, indicar a usuario que no ingreso ningún valor múltiplo de 7 19. Ejecute nuevamente su pseudocódigo con los datos de prueba definidos en la tabla de entradas-salidas a continuación (ver Tabla 5 ). Debe obtener las salidas indicadas en cada caso: Introducción a la Programación 15 Guía #: 04 Estructuras repetitivas en Algoritmos #prueba Entradas (valores de N) 1 9 81 2 11 22 16 7 24 36 21 15 15 83 Salida (mensaje en pantalla) RESULTADOS FINALES: 1. Usted escribio un total de 4 números multiplos de 3 2. La sumatoria de valores múltiplos de 7 fue de 28 RESULTADOS FINALES: 1. Usted escribio un total de 3 números multiplos de 3 2. No ingreso ningún valor múltiplo de 7 Tabla 4: pruebas de ejecución para ETAPA 2 de la solución del PROBLEMA 2 20. Guarde su pseudocódigo actual. Luego hacer una copia del archivo actual, bajo el nombre Problema2_ETAPA4.pseint. ETAPA 4: Mostrar el promedio de los números pares ingresados 21. Para esta etapa, se trabajara con el archivo Problema2_ETAPA4.pseint. 22. Tomando de ejemplo las etapas anteriores, asi como a las Variables de Proceso [ sumapares y totpares ] declaradas en la solucion, haga TODOS LOS CAMBIOS NECESARIOS para determinar el valor correcto para la variable de la última salida [ prompares ], para cualquier secuencia valida de datos brindada por usuario. 23. Cuando haya hecho los cambios, apóyese en las pruebas definidas en la Tabla 5 para confirmar si cumplió esta última Etapa de la solución: #prueba 1 2 Entradas (valores de N) 9 16 21 82 7 15 11 69 15 49 129 83 Salida (mensaje en pantalla) RESULTADOS FINALES: 1. Usted escribio un total de 4 números multiplos de 3 2. La sumatoria de valores múltiplos de 7 fue de 28 3. El promedio de los valores pares ingresados fue de 49 RESULTADOS FINALES: 1. Usted escribio un total de 3 números multiplos de 3 2. La sumatoria de valores múltiplos de 7 fue de 49 3. El promedio de los valores pares ingresados fue de 0 Tabla 5: pruebas de ejecución para ETAPA 2 de la solución del PROBLEMA 2 PARTE D: Estructura/Lazo/Ciclo (Repetir-Hasta) 1. A continuación se le ofrece otro problema, para que se evalué/analice e implemente el algoritmo solución con Pseint. Guarde el archivo como Problema3.pseint!! Introducción a la Programación 16 Guía #: 04 Estructuras repetitivas en Algoritmos PROBLEMA 3: Solicite al usuario los valores de “un conjunto de N resistencias (R1, R2… Rn) conectadas en paralelo”, para así retornarle finalmente la “resistencia equivalente” (Req) de las mismas. Se consulto a un electricista sobre el tema y menciono que la formula que se aplicaría en este caso seria: 2. A continuación se describe la solución a este problema 3, la cual utiliza la estructura repetitiva (RepetirHasta que) en una solución con PSeint !! Proceso ResistenciaEq //Entradas N<-0; //total de resistencias R<-0.01; //Valor de solo una resistencia //Salida req<-0; //resistencia equivalente final //Procesos i<-1; //cuenta la resistencia que se ingresara sumadeno<-0.00; //calcula denominador de formula Escribir "Software para Electronica basica"; Escribir ">> Cuantas resistencias ingresara??"; Leer N; i<-1; //inicia con 1era resistencia Repetir Escribir ">> Resistencia(KOhmios) ",i,":"; Leer R; sumadeno<-sumadeno+(1/R);//calcula nuevo denominador i<-i+1; //se prepara para proxima resistencia (si falta) Hasta Que i>N req<-1/sumadeno; Escribir " RESISTENCIA EQUIVALENTE: ",req," Kohmios"; FinProceso Introducción a la Programación 17 Guía #: 04 Estructuras repetitivas en Algoritmos 3. Pruebe (manualmente) la solución, con solamente un total de 3 resistencias (de 20, 40 y 49 Kohmio). Determine la resistencia equivalente. 4. Ahora proceda a ejecutar el PSeudocodigo anterior, e ingrese los datos del paso anterior. Debe obtener los mismos resultados!! PROBLEMAS A RESOLVER DURANTE LA PRACTICA En pareja con otro compañero del laboratorio, resuelva con un PSeudocodigo y un DFD equivalente el problema a continuación: Ayude a un docente de Humanística 1, el cual tiene un listado de 3 notas registradas finales por cada uno de sus 7 estudiantes. La nota final se compone de una Investigación (25%), una Exposición (35%) y el Parcial (40%). El docente requiere los siguientes informes claves de sus estudiantes: 1. Nota promedio final de los estudiantes que reprobaron el curso. Un estudiante reprueba el curso si tiene una nota final inferior a 6.5. 2. Porcentaje de los estudiantes que tienen una nota de investigación mayor a 7.65 3. Cual fue la mayor nota obtenida en las Exposiciones 3. Total de estudiantes que obtuvieron una nota en el Parcial solamente en un rango de 4.0 a 7.5, ambas inclusive Introducción a la Programación 18 Guía #: 04 Estructuras repetitivas en Algoritmos V. DISCUSION DE RESULTADOS Los ejercicios a continuación se realizaran en parejas o trios. Con el software indicado en cada problema, desarrolle los algoritmos que solucionan cada uno de los problema a continuación PROBLEMAS: A. (con DFD) Desarrolle un diagrama de flujo que sea equivalente a los pasos definidos en el archivo de pseudocódigo Problema2_ETAPA4.pseint del PROBLEMA 2 resuelto en el procedimiento de esta práctica. El archivo dfd final se llamara Problema2_ETAPA4.dfd B. (con Pseint y DFD) Elaborar una encuesta entre los N empleados de fabrica ADOC. A cada empleado se le debe pedir los siguientes datos: a) sexo (1: Femenino 2: Masculino) b) estatura (en Centímetros) Al finalizar el ingreso de datos de la encuesta, el administrador desea recibir esta información: a) Estatura promedio de los Hombres b) Porcentaje de empleadas que tiene contratadas ADOC c) La menor estatura entre el personal femenino. C. (con PSeint) Los cajeros del negocio Los Usureros SA de SV requieren un programa que les permita ingresar el nombre, precio individual y total de unidades de un listado de N productos diferentes comprados por un cliente La tasa del impuesto del IVA es del 13.7%. Al finalizar el ingreso de productos, muestre al cliente el monto ($) final que pagara por la compra. VII. BIBLIOGRAFIA • Joyanes Aguilar, Luís. Metodología de la Programación: Diagramas de Flujo, Algoritmos y Programación estructurada., Editorial: MCGRAW HILL, No. De Clasificación 005.1 J88 1998. • Joyanes Aguilar, Luís. Problemas de Metodología de la Programación. Editorial: MCGRAW HILL. No. de Clasificación 005.1 J88 1990. Introducción a la Programación 19 Guía #: 04 Estructuras repetitivas en Algoritmos Hoja de evaluación Guía #4 Fecha: ____________________ Nombre del alumno: _______________________________________________________ Carnet: ___________________ Nombre del docente: _________________________________________________ GL: ________ GT: ________ I. Evaluación del contenido practico Objetivos a evaluar: Que el alumno sea capaz de: • Ilustrar la solución de problemas mediante el uso de estructuras repetitivas, por medio de la herramienta DFD. • Evaluar cuando hacer uso de cada una de las diferentes estructuras repetitivas. Criterios SI (7) Regular (4) NO (2) 1. Demuestra la comprensión teórica y practica del funcionamiento de los operadores lógicos y relacionales. 2. Implementa apropiadamente la sintaxis de estructuras repetitivas en software PSeint 3. Construye los bloques de símbolos que conforman una estructura repetitiva en un Diagrama de Flujo con el software PSeint 4. Realiza la ejecución manual (sin usar la herramienta Ejecución) de cualquier PSeudocodigo 10.0 (máx.) * ( ) / 28 puntos (máx.) = __________ II. Evaluación general ¿Cómo realiza el trabajo asignado? Excelente Muy Bien Bueno Regular Varias Veces Siempre ¿Necesita ayuda del instructor? Ninguna Un poco Introducción a la Programación 20