IP Practica 04: Estructuras de repeticion

Anuncio
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
Descargar