ESTRUCTURA DE DECISION
LOGICA
MENU DEL DIA
•
•
•
•
•
Repaso clase anterior.
Ejemplos de repaso.
Pseudocódigo.
Diagramas de flujo.
Equivalencia entre
Pseudocódigo-diagramas
de flujo.
• Estructuras de decisión
lógica.
• Ejercicios de repaso.
• Estructura CASO.
REPASO CLASE ANTERIOR
PROBLEMA
ALGORITMO
REPASO CLASE ANTERIOR
algoritmo (nombre_algoritmo)
variables:
tipo_1: lista_variables_1
tipo_2: lista_variables_2
.
.
.
tipo_N: lista_variables_N
constantes:
lista_identificadores = valor
algoritmo(nombre_algoritmo)
Declaración de variables
INICIO
instrucciones_programa
FIN_INICIO
fin(nombre_algoritmo)
INICIO
sentencia_1
sentencia_2
.
.
.
sentencia_N
FIN_INICIO
fin(nombre_algoritmo)
REPASO CLASE ANTERIOR
algoritmo (nombre_algoritmo)
variables:
tipo_1: lista_variables_1
tipo_2: lista_variables_2
.
.
.
tipo_N: lista_variables_N
constantes:
lista_identificadores = valor
INICIO
sentencia_1
sentencia_2
.
.
.
sentencia_N
FIN_INICIO
fin(nombre_algoritmo)
variables:
entero: num_estudiantes
real: prom_grupo, estatura, peso
alfanumérica: nombre, identificación
entero: num_clases = 0
constantes:
PI = 3.14
TAMAÑO = 46
IVA = 0.16
asterisco = ‘*’
mensaje = “que hay de nuevo viejo”
INICIO
instrucciones de asignación
instrucciones de entrada (LEA)
instrucciones de salida (ESCRIBA)
Estructuras de control
FIN_INICIO
PSEUDOCODIGO
Pseudocódigo
Es un lenguaje de especificación
(descripción) de algoritmos . Se considera
un primer borrador dado que el
pseudocódigo tiene que traducirse
posteriormente a un lenguaje de
programación.
Ventajas:
• Se enfoca en la lógica del programa y
no en las reglas de un lenguaje especifico.
• Se puede traducir fácilmente a
lenguajes estructurados (Pascal, C, C++).
algoritmo(nombre_algoritmo)
Declaración de variables
INICIO
instrucciones_programa
FIN_INICIO
fin(nombre_algoritmo)
DIAGRAMAS DE FLUJO
Diagramas de flujo (flowchart):
Es un diagrama que utiliza unos símbolos
(cajas) estándar representando los pasos
del algoritmo por medio de dichas cajas
unidas por flechas (líneas de flujo), las
cuales indican la secuencia que se debe
ejecutar.
EQUIVALENCIA PSEUDOCODIGO –
DIAGRAMAS DE FLUJO (1)
ESTRUCTURAS DE DECISION LOGICA
Estas estructuras se usan para la
toma de decisiones lógicas.
Son usadas para elegir entre
diferentes
alternativas
de
acción.
SI (condicion) ENTONCES
instrucciones_caso_verdadero
SI_NO
instrucciones_caso_falso
FIN_SI
ESTRUCTURAS DE DECISION LOGICA
nota >=3.0
edad < 18
semestre == 1
(a<6)^(a>=0)
estatura < 1.23
c = a*b/(b+1)
m = m + 1
ESCRIBA(“Lo que sea”)
LEA(a)
c = (b*c)^2 + 1
SI (condicion) ENTONCES
instrucciones_caso_verdadero
SI_NO
instrucciones_caso_falso
FIN_SI
ESTRUCTURAS DE DECISION LOGICA
Las horas superiores a 35 se pagan …
Si la nota es menos que 3.5 …
Palabras claves que impliquen la toma de
decisiones lógicas:
• tal cosa mayor que otra
• menor que, inferior a
• entre tal y tal cosa
• sobre tal cosa
• Información relacionada con rangos de
valores (tablas).
Si el numero de mesas
compradas esta entre 30 y
40 el decuento …
Si la cantidad de costales
comprada excede los 16 …
Si la cantidad de costales comprada excede los
16 …
ALGUNOS EJEMPLOS
Escribir las sentencias SI apropiadas para cada uno de las siguientes condiciones:
1. Si un ángulo es igual a 90°, imprimir el mensaje “El ángulo es recto” sino imprimir el
mensaje “El ángulo no recto”.
SI (angulo == 90) ENTONCES
ESCRIBA(‘El angulo es recto’)
SI_NO
ESCRIBA(‘El angulo no es recto’)
FIN_SI
ALGUNOS EJEMPLOS
2. Si la temperatura es superior a 100 °C visualizar el mensaje: “Por encima del punto de
ebullición del agua” sino visualizar el mensaje “Por debajo del punto de ebullición del
agua”.
SI (temp > 100) ENTONCES
ESCRIBA(‘Por encima del punto de ebullicion del agua’)
SI_NO
ESCRIBA(‘Por debajo del punto de ebullicion del agua’)
FIN_INICIO
ALGUNOS EJEMPLOS
3. Si X mayor que Y, y Z menor que 20 leer un valor para P.
SI ((X > Y)AND(Z>20)) ENTONCES
LEA(P)
FIN_SI
4. Si la distancia es mayor que 20 y menos que 35, leer un valor para tiempo.
SI ((distancia > 20)AND(distancia < 35)) ENTONCES
LEA(tiempo)
FIN_SI
TIPOS DE ESTRUCTURAS DE DECISION
LOGICA
Alternativa simple
Alternativas en los
problemas de
decisión lógica
Alternativa doble
Alternativa múltiple
ALTERNATIVA SIMPLE
En los problemas de este tipo la implementación de la condición falsa no se realiza.
SI (condición) ENTONCES
instrucciones_caso_verdadero
FIN_INICIO
Ejemplos:
1. Las boleta de entrada a un circo vale $10000 por persona; sin embargo, si la edad de la
persona es menor de 10 años se le da un descuento del 25% en el valor de la boleta.
Realizar un algoritmo que despliegue el precio de la boleta según la edad.
2. En una empresa le dan a los empleados un subsidio de transporte si el sueldo base de
estos es menor que el salario mínimo, este subsidio es el 30% del sueldo base. Hacer un
algoritmo que calcule el salario neto de un empleado (sueldo base mas prestaciones si el
empleado tiene derecho a estas). Los datos de entrada son la cedula y el sueldo base.
ALTERNATIVA SIMPLE
1. Las boleta de entrada a un circo vale $10000 por persona; sin embargo, si la edad de la
persona es menor de 10 años se le da un descuento del 25% en el valor de la boleta.
Realizar un algoritmo que despliegue el precio de la boleta según la edad.
algoritmo(ejemplo1)
variables:
real: precio = 10000, descuento = 0
entero: edad
INICIO
ESCRIBA('Meta la edad')
LEA(edad)
SI(edad < 10) ENTONCES
descuento = 0.25*precio
FIN_SI
precio = precio - descuento
ESCRIBA('Como tiene ',edad,' años, le toca pagar $',precio)
FIN_INICIO
fin(ejemplo1)
Archivo pseint: ejemplo1.
ALTERNATIVA SIMPLE
2. En una empresa le dan a los empleados un subsidio de transporte si el sueldo base de
estos es menor que el salario mínimo, este subsidio es el 30% del sueldo base. Hacer un
algoritmo que calcule el salario neto de un empleado (sueldo base mas prestaciones si
el empleado tiene derecho a estas). Los datos de entrada son la cedula y el sueldo base.
algoritmo (ejemplo2)
variables:
real: sal_base, sal_neto, subsidio = 0
alfanumerica: cedula
constantes:
MINIMO = 510000
INICIO
ESCRIBA('Meta la cedula')
LEA(cedula)
ESCRIBA('Meta el salario base')
LEA(sal_base)
SI(sal_base < MINIMO) ENTONCES
subsidio = 0.30*sal_base
FIN_SI
sal_neto = subsidio + sal_base
ESCRIBA(cedula,' reciba ',sal_neto,' miserables pesos')
FIN_INICIO
fin(ejemplo2)
Archivo pseint: ejemplo2.
ALTERNATIVA DOBLE
En los problemas de este tipo la implementación de la condición falsa se realiza.
SI (condicion) ENTONCES
instrucciones_caso_verdadero
SI_NO
instrucciones_caso_falso
FIN_INICIO
Ejemplos:
3. Hacer un algoritmo que diga si una persona es mayor de edad o no.
4. Hacer un algoritmo que diga si una persona es hombre o mujer.
ALTERNATIVA DOBLE
3. Hacer un algoritmo que diga si una persona es mayor de edad o no.
algoritmo (ejemplo3)
variables:
entero: edad
INICIO
ESCRIBA('Digite la edad')
LEA(edad)
SI(edad >= 18) ENTONCES
ESCRIBA('Usted es mayor de edad')
SI_NO
ESCRIBA('Usted es menor de edad')
FIN_SI
FIN_INICIO
fin(ejemplo1)
Archivo pseint: ejemplo3.
Archivo pseudocódigo clase: ejemplo3.txt
Problema: Que el usuario sea un
tarado y meta una edad negativa
ALTERNATIVA DOBLE
4. Hacer un algoritmo que diga si una persona es hombre o mujer.
algoritmo (ejemplo2)
variables:
alfanumerica: sexo
INICIO
ESCRIBA('Digite F para mujer o M para hombre')
LEA(sexo)
SI(sexo == 'F' o sexo == 'f') ENTONCES
ESCRIBA('Mujer')
SI_NO
ESCRIBA('Hombre')
FIN_SI
FIN_INICIO
fin(ejemplo2)
Archivo pseint: ejemplo4.
Archivo pseudocódigo clase: ejemplo4.txt
Problema: Que el usuario sea un
tarado y meta una letra distinta a
las solicitadas.
RECAPITULACION DEL PROBLEMA
ANTERIOR
Niños, hasta ahora lo visto solo tenia si mucho 2 posibilidades, para manejar tanto
tarado se tienen que tener en cuenta mas posibilidades tal y como lo veremos a
continuación
Oye chef, y que hacemos
con tanto tarado que no
sabe seguir las instrucciones
de un programa
Si chef, estoy confundido
con tanto inepto
ALTERNATIVA MULTIPLE
Alternativa múltiple (las condiciones pueden tomar mas de dos valores (rango) de
modo que para la implementación de una condición se hace necesario anidar
estructuras de decisión lógica).
SI (condicion_1) ENTONCES
instrucciones_1
SI_NO
SI (condicion_2) ENTONCES
instrucciones_2
SI_NO
. . .
SI (condicion_N) ENTONCES
instrucciones_N
SI_NO
. . .
FIN_SI
. . .
FIN_SI
FIN_SI
ALTERNATIVA MULTIPLE
Ejemplos:
1. Se tiene la siguiente tabla en la cual se muestra el equivalente entre números
y letras para la calificación en notas en una guardería. Realizar un algoritmo
que entregue la letra equivalente cuando su ingresa una nota numérica.
Rango
Nota
nota >= 4.5
E
4.0 <= nota < 4.5
B+
3.5 <= nota < 4.0
B
3.0 <= nota < 3.5
B-
nota < 3
I
ALTERNATIVA MULTIPLE
5. Se tiene la siguiente tabla en la cual se muestra el equivalente entre números y letras
para la calificación en notas en una guardería. Realizar un algoritmo que entregue la
letra equivalente cuando su ingresa una nota numérica.
Rango
Nota
nota >= 4.5
E
4.0 <= nota < 4.5
B+
3.5 <= nota < 4.0
B
3.0 <= nota < 3.5
B-
nota < 3
I
Archivo pseint: ejemplo5.
Archivo pseudocódigo clase: ejemplo5txt
ALTERNATIVA MULTIPLE
algoritmo (notas)
variables:
real: nota
alfanumerica: letra
INICIO
ESCRIBA('Meta la nota')
LEA(nota)
SI ((nota>=0)AND(nota<=5)) ENTONCES
SI (nota>=4.5) ENTONCES
letra = 'E‘
ESCRIBA(nota,' igual a ',letra)
SI_NO
SI (nota>=4) ENTONCES
letra = 'B+'
ESCRIBA(nota,' igual a ',letra)
SI_NO
SI (nota>=3.5) ENTONCES
letra = 'B'
ESCRIBA(nota,' igual a ',letra)
SI_NO
SI (nota>=3) ENTONCES
letra = 'B-'
ESCRIBA(nota,' igual a ',letra)
SI_NO
letra = 'I'
ESCRIBA(nota,' igual a ',letra)
FIN_SI
FIN_SI
FIN_SI
FIN_SI
SI_NO
ESCRIBA('ERROR: Nota no esta dentro del rango')
FIN_SI
FIN_INICIO
fin(notas)
Rango
Nota
nota >= 4.5
E
4.0 <= nota < 4.5
B+
3.5 <= nota < 4.0
B
3.0 <= nota < 3.5
B-
nota < 3
I
ALTERNATIVA MULTIPLE
Rango
Nota
nota >= 4.5
E
4.0 <= nota < 4.5
B+
3.5 <= nota < 4.0
B
3.0 <= nota < 3.5
B-
nota < 3
I
ALTERNATIVA MULTIPLE
6. En la oficina del SISBEN están asegurando a la
población mas desamparada. Para evitar fraudes tienen
un sistema de encuesta el cual solicita los siguientes
datos: Cedula, sexo, estrato socio-económico y numero
de integrantes del grupo familiar. En dicha encuesta, el
sistema valida el sexo y el estrato socio-económico de
tal manera que si el estrato es mayor o igual que 3 se
rechaza la petición de afiliación notificando al
encuestado dicho rechazo a la afiliación. Si el estrato es
menor que 3, permite la afiliación del encuestado y de
un numero de miembros que depende del sexo de este
de tal forma que si es mujer es posible la afiliación de 5
miembros mas y si es hombre solo permite la afiliación
de 4 miembros, esto siempre y cuando el numero de
integrantes del grupo familiar sea mayor que esta cifra.
En caso de aceptación el algoritmo debe imprimir la
cedula del beneficiado y el numero total de cupos
(incluyendo el suyo) a los cuales tiene derecho.
Archivo pseint: ejemplo6.
Archivo pseudocódigo clase:
ejemplo6.txt
ALTERNATIVA MULTIPLE
algoritmo (sisben)
variables:
real: nota
alfanumerica: letra
INICIO
ESCRIBA('Digite la cedula')
LEA(cedula)
ESCRIBA('Digite el sexo (1 = mujer, 2 = hombre')
LEA(sexo)
ESCRIBA('Digite la cedula')
LEA(cedula)
ESCRIBA('Digite el numero de miembros del grupo familiar')
LEA(n_integ)
ESCRIBA('Digite el estrato')
LEA(est)
SI (est >= 3) ENTONCES
ESCRIBA('señor con cedula ',cedula,' abrase pa la PM')
SI_NO
SI (sexo == 1) ENTONCES
SI (n_integ >= 6) ENTONCES
cupos = 6
SI_NO
cupos = n_integ
FIN_SI
SI_NO
SI (n_integ >= 5) ENTONCES
cupos = 5
SI_NO
cupos = n_integ
FIN_SI
FIN_SI
ESCRIBA('Señor con cedula ',cedula,' tiene derecho a: ',cupos, ' cupos')
FIN_SI
FIN_INICIO
fin(sisben)
ALTERNATIVA MULTIPLE
...
SI (est >= 3) ENTONCES
ESCRIBA('señor con cedula ',cedula,' abrase pa la PM')
SI_NO
SI (sexo == 1) ENTONCES
SI (n_integ >= 6) ENTONCES
cupos = 6
SI_NO
cupos = n_integ
FIN_SI
SI_NO
SI (n_integ >= 5) ENTONCES
cupos = 5
SI_NO
cupos = n_integ
FIN_SI
FIN_SI
ESCRIBA('Señor con cedula ',cedula,' tiene derecho a: ',cupos, ' cupos')
FIN_SI
...
ALTERNATIVA MULTIPLE
MEJORANDO LOS PROGRAMAS QUE SE
JODIAN POR CULPA DE LOS TARADOS
Haciendo uso de la alternativa múltiple es posible solucionar el problema de los programas
anteriormente mostrados y hacerlos a prueba de tarados. Mirar los ejemplos 7 y 8 codificados
en pseint. Acá va la salida cuando un tarado de la mierda se equivoca.
SOBRE LOS PROBLEMAS CON ALTERNATIVA
MULTIPLE
Archivo pseint: ejemplo9.
La solución anidando condicionales no es la única,
existen otras maneras, no olvidar ante todo que lo
importante es la lógica y la idea es que el programa
funcione bien. Todos los caminos conducen a Roma.
SOBRE LOS PROBLEMAS CON ALTERNATIVA
MULTIPLE
Archivo pseint: ejemplo5.
Archivo pseint: ejemplo9.
Si nota>=4.5 Entonces
Escribir "Nota: E";
Sino
Si nota>=4.0 Entonces
Escribir "Nota: B+";
Sino
Si nota>=3.5 Entonces
Escribir "Nota: B";
Sino
Si nota>=3.0 Entonces
Escribir "Nota: B-";
Sino
Escribir "Nota: I";
FinSi
FinSi
FinSi
FinSi
Si nota>=4.5 Entonces
Escribir "Nota: E";
FinSi
Si nota>=4.0 Y nota < 4.5 Entonces
Escribir "Nota: B+";
FinSi
Si nota>=3.5 Y nota < 4.0 Entonces
Escribir "Nota: B";
FinSi
Si nota>=3.0 Y nota < 3.5 Entonces
Escribir "Nota: B-";
FinSi
Si nota < 3.0 Entonces
Escribir "Nota: I";
FinSi
ESTRUCTURA CASO
• Esta es una estructura adicional para problemas que impliquen toma de decisiones.
• Útil en la implementación de soluciones a problemas de alternativas múltiples
(solución a problemas de anidamiento).
• En este tipo de estructura permite evaluar una expresión (selector) la cual puede
tomar n valores distintos (1, 2, 3, 4, …, n). A cada uno de los posibles valores que
puede tomar el selector se asocian un conjunto de operaciones, de las cuales se
ejecutaran las asociadas a el valor elegido para dicho selector.
valor_1
valor_2
instrucciones_1
instrucciones_2
otros
selector
valor_3
instrucciones_3
valor_n
...
instrucciones_n
instruc_otros
ESTRUCTURA CASO
• Pseudocódigo
CASOS DE selector
CASO valor_1:
instrucciones_1
CASO valor_2:
instrucciones_2
CASO valor_3:
instrucciones_3
. . .
CASO valor_n:
instrucciones_n
OTROS_CASOS:
instrucciones_otros
FIN_CASOS
SEGÚN_SEA selector HACER
CASO valor_1:
instrucciones_1
CASO valor_2:
instrucciones_2
CASO valor_3:
instrucciones_3
. . .
CASO valor_n:
instrucciones_n
OTROS:
instrucciones_otros
FIN_CASOS
ESTRUCTURA CASO
• Software empleado
ESTRUCTURA CASO
Ejemplos:
1. Se desea diseñar un algoritmo que escriba los nombres de los días de la
semana en función del valor de una variable día introducida por teclado.
CASOS DE selector
CASO valor_1:
instrucciones_1
CASO valor_2:
instrucciones_2
CASO valor_3:
instrucciones_3
. . .
CASO valor_n:
instrucciones_n
OTROS_CASOS:
instrucciones_otros
FIN_CASOS
algoritmo (dias)
variables:
entero: dia
INICIO
ESCRIBA(‘Meta el dia’)
LEA(dia)
CASOS DE dia
CASO 1: ESCRIBA(‘Lunes’)
CASO 2: ESCRIBA(‘Martes’)
CASO 3: ESCRIBA(‘Miércoles’)
CASO 4: ESCRIBA(‘Jueves’)
CASO 5: ESCRIBA(‘Viernes’)
CASO 6: ESCRIBA(‘Sábado’)
CASO 7: ESCRIBA(‘Domingo’)
OTROS CASOS :
ESCRIBA(‘ERROR !!!’)
FIN_CASOS
FIN_INICIO
fin(dias)
ESTRUCTURA CASO
Ejemplos:
2. Se desea convertir las calificaciones alfabéticas A,B, C y D a calificaciones
numéricas 4, 5, 6 y 7 respectivamente.
CASOS DE selector
CASO valor_1:
instrucciones_1
CASO valor_2:
instrucciones_2
CASO valor_3:
instrucciones_3
. . .
CASO valor_n:
instrucciones_n
OTROS_CASOS:
instrucciones_otros
FIN_CASOS
algoritmo (calificaciones)
variables:
entero: nota
alfanumerico: letra
INICIO
ESCRIBA(‘Meta la letra’)
LEA(letra)
CASOS DE letra
CASO ‘A’: nota = 4
ESCRIBA(‘Su nota es’, nota)
CASO ‘B’: nota = 5
ESCRIBA(‘Su nota es’, nota)
CASO ‘C’: nota = 6
ESCRIBA(‘Su nota es’, nota)
CASO ‘D’: nota = 7
ESCRIBA(‘Su nota es’, nota)
OTROS CASOS : ESCRIBA(‘ERROR !!!’)
FIN_CASOS
FIN_INICIO
fin(calificaciones)
ESTRUCTURA CASO
1. Están haciendo recolección de bachilleres para pagar servicio militar para lo
cual una vez termina el bachillerato un bachiller se tiene que presentar al
sorteo y sacar una balota, hay tres posibles balotas, estas son:
• Roja: Le toca pagar servicio inmediatamente.
• Amarilla: Servicio militar aplazado.
• Verde: Se salva.
Hacer un algoritmo que simule esta situación.
Solucion: ejemplo10. (Archivo pseint).
2. Una empresa tiene cuatro escalas de salario numeradas consecutivamente
del 1 al 4, además, tiene un programa de incentivos de acuerdo a la categoría
y si el numero de unidades producidas es mayor que 50. Si esta en la
categoría 1 se le da un incremento de sueldo equivalente al 5% de su salario,
si esta en la 2 al 7%, si esta en la 3 al 10% y en la 4 al 15%; esto por cada
empleado.
Se tiene la siguiente información: Nombres, salario mensual, categoría y
numero de unidades producidas.
Hacer una algoritmo que determine el total devengado por cada empleado.
Solucion: ejemplo11. (Archivo pseint).
BIBLIOGRAFIA
BIBLIOGRAFIA
Titulo: Lógica de Programación.
Autor: Efraín M. Oviedo.
Editorial: ECOE Ediciones.
Fecha de publicación: 11/20/2008
ISBN: 9586483088.
OLC: http://ingenieria.udea.edu.co/~eoviedo/
Titulo: Fundamentos de Programación.
Autor: Luis Joyanes Aguilar.
Editorial: Mac Graw Hill.
Fecha de publicación: 27/05/2008
ISBN: 8448161114
OLC: http://www.mhe.es/joyanes
Descargar

ESTRUCTURA DE DECISION LOGICA_rev2