Download Lógica de programación 1
Document related concepts
Transcript
Lógica de programación Universidad Nacional Autónoma de Nicaragua - León Facultad de Ciencias y Tecnología Departamento de Computación Lógica de programación Elaborado por: Lic. Luis Ernesto Díaz Beteta La característica fundamental de la programación estructurada consiste en que todas las instrucciones tienen un único punto de entrada y un único punto de salida. Esto permite descomponer fácilmente un problema en subproblemas, reduciendo la complejidad y facilitando la programación Bibliografía Metodología de la programación. Dr. Osvaldo Cairó Battistutti Editorial Alfa-Omega 1 Lógica de programación Generalidades En temas anteriores hemos hablado sobre las estructuras algorítmicas de repetición MIENTRAS y PARA, estas son las estructuras de repetición principales y la forma de implementación al momento de la construcción de los algoritmos difiere una de la otra. Todo ciclo debe terminar de ejecutarse en algún momento dado, por lo general se evalúa en cada iteración si el ciclo debe o no terminar. Esto está dado por lo que se conoce condición de parada. Las estructuras repetitivas Mientras y Para tienen su condición de parada al inicio del bucle, y la estructura repetitiva Repetir posee la condición de parada al final de la misma. Estructura repetitiva REPETIR La estructura repetitiva REPETIR es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia de MIENTRAS y PARA que podían no ejecutar el bloque. Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo ya que la condición de parada de la estructura repetitiva está al final del bloque a REPETIR. Sintaxis Repetir secuencia_de_acciones Hasta Que expresion_logica La estructura repetitiva REPETIR permite la ejecución del grupo de sentencias al menos una vez. Puesto que la condición de parada será evaluada hasta que se ejecute el grupo de sentencias, el ciclo REPETIR se ejecutara hasta que la condición de parada resulte ser verdadera. Representación gráfica PseInt utiliza la siguiente manera de representar el ciclo REPETIR 2 Lógica de programación Ejemplo: Deseamos presentar en pantalla los primeros 10 números naturales 1. 2. 3. 4. 5. 6. 7. 8. 9. Proceso contarNumeros Definir contador Como Entero; contador <- 1; Repetir Escribir "Repeticion numero ", contador; contador <- contador + 1; Hasta Que contador > 10 FinProceso Diagrama de flujo Resultado En la sentencia repetitiva REPETIR, la condición de parada se comprueba al final del bucle. Lo que permite que el bucle se ejecute al menos una vez antes de comprobar la condición de parada. El bucle se repite mientras la condición sea falsa y termina cuando sea verdadera (contrario a la sentencia mientras). 3 Lógica de programación Ejemplos estructura repetitiva REPETIR Ejemplo1 Realice un algoritmo que presente en pantalla la cantidad de números impares que se encuentren en el rango de 1 a 100. Datos de entrada No se recibiran datos por parte del usuario Datos de salida Presentar la cantidad de números impares que estan en el rango de 1 a 100 Variables a utilizar contador: Llevara el control de las iteraciones. impares: Llevara el control de la cantidad de números impares ingresados. Procedimiento Colar el valor inicial de la variable ª imparesº a cero. Contabilizar la cantidad de números impares utilizando al ciclo REPETIR Dentro del grupo de sentencias del ciclo, se verificará si el valor es impar. Si la comparación resulta ser verdadera se incrementará en uno el valor de la variable ª imparesº . Solución 1. Proceso contarImpares 2. Definir contador, impares Como Entero; 3. contador <- 1; 4. impares<-0; 5. 6. Repetir 7. Si contador%2 <> 0 Entonces 8. impares<-impares + 1; 9. FinSi 10. contador <- contador + 1; 11. Hasta Que contador > 100 12. 13. Escribir "Hay ", impares, " números impares en el rango de 1-100"; 14. FinProceso 4 Lógica de programación Diagrama de flujo Resultado Ejemplo2 En el siguiente ejemplo le pediremos al usuario que nos indique si desea que se continue ejecutando el ciclo, dentro del ciclo se presentara en pantalla un número aleatorio generado por la función AZAR. Datos de entrada El usuario ingresara ª Sº o ª Nº como respuesta a la pregunta de confirmación Datos de salida Se presentara en pantalla el valor generado de forma aleatoria Variables a utilizar continuar: captura la respuesta del usuario a la pregunta de confirmación 5 Lógica de programación Procedimiento Dentro del grupo de sentencias del ciclo se presentara en pantalla el valor generado por la función AZAR, Luego se preguntara al usuario si desea continuar. Solución 1. 2. 3. 4. 5. 6. 7. 8. 9. Proceso numeroAzar Definir continuar Como Caracter; Repetir Escribir "Numero generado al azar: ", azar(100); Escribir "Desea continuar S / N "; Leer continuar; Hasta Que continuar = "N" | continuar = "n" FinProceso Diagrama de flujo Resultado 6 Lógica de programación Ejemplo3 En el siguiente ejemplo le pediremos al usuario que nos indique si desea que se continue ejecutando el ciclo, dentro del ciclo se presentara en pantalla un número aleatorio generado por la función AZAR. Datos de entrada El usuario ingresara ª Sº o ª Nº como respuesta a la pregunta de confirmación Datos de salida Se presentara en pantalla el valor generado de forma aleatoria Variables a utilizar continuar: captura la respuesta del usuario a la pregunta de confirmación Procedimiento Dentro del grupo de sentencias del ciclo se presentara en pantalla el valor generado por la función AZAR, Luego se preguntara al usuario si desea continuar. Solución 1. 2. 3. 4. 5. 6. 7. 8. 9. Proceso numeroAzar Definir continuar Como Caracter; Repetir Escribir "Numero generado al azar: ", azar(100); Escribir "Desea continuar S / N "; Leer continuar; Hasta Que continuar = "N" | continuar = "n" FinProceso Diagrama de flujo 7 Lógica de programación Resultado Ejemplo4 En este ejemplo se muestra como presentar un menú en pantalla, este menú use presentara hasta que el usuario seleccione salir. Datos de entrada Se ingresara un número (correspondiente a la opción del usuario), cuyo valor se almacenara en la variable opcion. Datos de salida Se presentara en pantalla un mensaje que indique el valor de la opción ingresada por parte del usuario. Variables a utilizar opción: variable de tipo entero, almacenara el valor correspondiente al número ingresado por parte del usuario. Procedimiento Utilizando el ciclo REPETIR, se presentara un menú con 4 opciones. El usuario ingresara un número que puede o no estar en el rango de 1-4. Si el valor ingresado esta fuera de rango, se vuelve a mostrar cada una de las opciones. El ciclo se repetirá hasta que el usuario ingrese un número en el rango de 1-4 Solución 1. Proceso ejemploMenu 2. Definir opcion Como Entero; 3. 4. Repetir 5. Escribir "1.- Ingrese 1 para esta Opcion"; 6. Escribir "2.- Ingrese 2 para esta Opcion"; 7. Escribir "3.- Ingrese 3 para esta Opcion"; 8. Escribir "4.- Ingrese 4 para esta Opcion"; 9. Escribir "¿Que opcion desea: ?"; 10. Leer opcion; 11. Hasta Que opcion >= 1 & opcion <= 4 12. 13. Escribir "Opcion ingresada: ", opcion; 14. FinProceso 8 Lógica de programación Diagrama de flujo Resultado REPETIR vs MIENTRAS Como ya hemos mencionado anteriormente, la estructura repetitiva REPETIR evalua la condición de parada al final, luego de haber ejecutado todas las sentencias que forman parte del ciclo. Lo que permite que el bucle se ejecute al menos una vez antes de comprobar la condición de parada, el bucle se repite mientras la condición sea falsa y termina cuando sea verdadera (contrario a la sentencia mientras). 9 Lógica de programación Las estructuras repetitivas MIENTRAS y PARA evalúan la condición de parada al inicio del bucle, por lo tanto para que el ciclo se ejecute la expresión lógica debe ser verdadera desde el principio. Veamos el siguiente ejemplo en el que se muestra un ciclo en el que se solicitan números enteros al usuario, el ciclo se detendrá cuando se ingrese un valor negativo. 1. Proceso leerEnteros 2. Definir contador, num Como Entero; 3. contador<-0; 4. 5. Escribir "Ingrese un numero entero: "; 6. Leer num; 7. Mientras num >= 0 Hacer 8. 9. contador<-contador+1; 10. 11. Escribir "Ingrese un numero entero: "; 12. Leer num; 13. FinMientras 14. 15. Escribir "Se ingresaro ", contador, " numeros"; 16. FinProceso En este ejemplo, para poder ingresar al ciclo primero se evalua la expresión lógica (condición de parada) y después se ejecutan las sentencias que forman parte del ciclo. ¿Qué pasa si ingresamos un número negativo desde el principio?. Al ingresar un número negativo desde el principio las sentencias que forman parte del ciclo no se ejecutaran. Como se muestra en la siguiente captura. Veamos que pasa si utilizamos el ciclo REPETIR 1. Proceso leerEnteros 2. Definir contador, num Como Entero; contador<-0; 3. 4. 5. Repetir 6. Escribir "Ingrese un numero entero: "; 7. Leer num; 8. contador<-contador+1; 9. Hasta Que num < 0 10. 11. Escribir "Se ingresaron ", contador, " numeros positivos"; 12. FinProceso 10 Lógica de programación Al utilizar el ciclo REPETIR, se ejecutan el grupo de sentencias pertenecientes al cliclo y posteriormente se evalua la condición de parada. Esto puede generar resultados anómalos, como se muestra en la siguiente captura. Debemos utilizar REPETIR Cuando el grupo de sentencias del ciclo se debe ejecutar al menos una vez. En el resto de los casos lo más recomendable es utilizar MIENTRAS o PARA. Ciclos anidados En ciertas ocasiones se hace necesario la concatenación de estructuras algorítmicas, es decir que una estructura algorítmica forme parte de otra estructura algorítmica. Básicamente el término anidación o concatenación se refiere al hecho de ingresar una sentencia de control dentro de otra sentencia de control. Analicemos el siguiente caso Se desea desarrollar un algoritmo que presente la siguiente salida en pantalla. 1 12 123 1234 12345 123456 1234567 12345678 123456789 1 2 3 4 5 6 7 8 9 10 Observemos que tenemos 10 filas y en cada fila se presentan tantos números como lo indique la fila, por ejemplo en la fila uno se presenta en pantalla al número 1. En la fila dos se presentan los números 1 y el número 2 y así hasta llegar a la última fila ª 10º donde se presentan los 10 números. Vemos como solucionar el problema planteado y el por que debemos de utilizar ciclos anidados. El siguiente ejemplo utiliza una variable llamada ª filaº para controlar el número de cada fila. 1. Proceso anidados 2. Definir fila Como Entero; 3. 4. Para fila<-1 Hasta 10 Con Paso 1 Hacer 5. Escribir "fila No ", fila; 6. FinPara 7. FinProceso 11 Lógica de programación Deseamos presentar en cada fila tantos números como lo indique la fila, de tal forma que presentamos un número en pantalla mientras el número sea menor o igual al valor de la variable fila. Quedando el algoritmo como se muestra a continuación. 1. Proceso anidados 2. Definir fila, num Como Entero; 3. Para fila<-1 Hasta 10 Con Paso 1 Hacer 4. 5. num<-1; 6. Mientras num <= fila Hacer 7. Escribir sin saltar num, " "; 8. num<-num+1; FinMientras 9. 10. Escribir " "; 11. FinPara 12. FinProceso El primer ciclo (ciclo PARA) controla en número de la fila desde el 1 hasta el 10, en la línea 5 le damos el valor inicial de 1 a la variable ª numº que sera la encargada de presentar los números en la fila. El segundo ciclo (ciclo MIENTRAS) tiene la responsabilidad de presentar en pantalla tantos números como lo indique la fila, esto lo hace mediante la comprobación de la condicional num <= fila donde ª numº en un principio vale 1 e ira incrementado su valor hasta ser mayor que ª filaº . Analicemos el siguiente caso Se desea desarrollar un algoritmo que presente la siguiente salida en pantalla. * ** *** **** ***** ****** ******* ******** ********* ********** Observemos que tenemos 10 filas y en cada fila se presentan tantos asteriscos como lo indique la fila, por ejemplo en la fila uno se presenta en pantalla 1 asterisco. En la fila dos se presentan 2 asteriscos, etc. Además en cada fila se presenta una cantidad de espacios, de tal forma que en la fila 1 se presentan 9 espacios, en la fila 2 se presentan 8 espacios y asi hasta llegar a la fila 9 donde se presenta 1 espacio. La fila 10 no lleva espacios. 1. Proceso anidados3 2. Definir fila, asterisco, espacios, e Como Entero; 3. espacios<-9; 4. 5. Para fila<-1 Hasta 10 Con Paso 1 Hacer 6. Para e<-1 Hasta espacios Con Paso 1 Hacer 7. Escribir sin saltar " "; 8. FinPara 9. espacios<-espacios-1; 10. 11. Para asterisco<-1 Hasta fila Con Paso 1 Hacer 12. Escribir sin saltar "*"; 13. FinPara 14. Escribir " "; 15. FinPara 16. FinProceso 12 Lógica de programación Ejercicios Propuestos Ejercicio1 Elabore un algoritmo que presente la siguiente salida. Ejercicio2 Realice un algoritmo que muestre en pantalla un tablero de ajedrez, este tablero mostrara ª Bº en posición de las casilas blancas y ª Nº en las posiciones en las que se encuentren las casillas negras. A continuación se muestra una representación de un tablero en forma de matriz Para colocar el carácter ª Bº para las casillas blancas o ª Nº para las casillas negras, debemos sumar los valores de las filas y columnas, tal como se muestra en la siguiente imagen. Observe que la casilla donde la suma de la fila y columna da como resultado un valor par se muestran marcadas en rojo. Son estas posiciones las que corresponden a las casillas blancas y las impares a las casillas negras. El algoritmo que debe mostrar en pantalla es una salida como la que se muestra a continuación: 13 Lógica de programación Ejercicio3 Realice un algoritmo para cada una de las siguientes figuras Ejercicio4 Realizar un programa que nos pida un número n, y nos diga cuantos números hay entre 1 y n que son primos Ejercicio5 Hacer un algoritmo que simule el comportamiento de un cronómetro digital desde 0 segundos hasta llegar a 5 minutos en cuenta progresiva. Ejercicio6 Hacer un algoritmo que simule el comportamiento de un cronómetro digital en cuenta regresiva desde 5 minutos hasta 0 segundos. 14