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