LÓGICA -DECISIONES

21
LÓGICA - DECISIONES Los valores lógicos: constantes, variables y expresiones lógicas, permiten controlar la ejecución de las sentencias de un programa. Hay dos tipos de expresiones lógicas: las expresiones lógicas relacionales y las expresiones lógicas combinacionales. Las expresiones lógicas relacionales comparan los valores de dos expresiones aritméticas o dos expresiones de tipo carácter. Las expresiones lógicas combinacionales representan operaciones lógicas entre constantes, variables y otras expresiones lógicas.

Transcript of LÓGICA -DECISIONES

Page 1: LÓGICA -DECISIONES

LÓGICA - DECISIONES

Los valores lógicos: constantes, variables y expresioneslógicas, permiten controlar la ejecución de las sentencias deun programa.

Hay dos tipos de expresiones lógicas: las expresioneslógicas relacionales y las expresiones lógicascombinacionales.

• Las expresiones lógicas relacionales comparan los valores de dosexpresiones aritméticas o dos expresiones de tipo carácter.

• Las expresiones lógicas combinacionales representan operacioneslógicas entre constantes, variables y otras expresiones lógicas.

Page 2: LÓGICA -DECISIONES

Expresiones lógicas relacionalesLas expresiones lógicas relacionales comparan los valores de dosexpresiones aritméticas o dos expresiones de tipo carácter.

La evaluación de una expresión lógica relacional produce unresultado de tipo lógico: .TRUE. o .FALSE.

Sintaxis:operando1 OPERADOR_LÓGICO_RELACIONAL operando2

• operando es una expresión, variable o constantearitmética o de tipo carácter.

Operador LÓGICO relacionalSignificado

F77 F90/95

.EQ. = = Igual

.NE. /= Distinto

.LT. < Menor que

.LE. <= Menor o igual que

.GT. > Mayor que

.GE. >= Mayor o igual que

Los operadores lógicos relacionalesde Fortran 77 han sobrevivido yfuncionan en los compiladores deFortran 90/95. Por ello, es interesanteque el programador los reconozca enlos programas, sin embargo, espreferible que utilice la forma deFortran 90 en sus programas nuevos,que es mucho más intuitiva.

Page 3: LÓGICA -DECISIONES

Expresiones lógicas relacionales (ejemplos)

Sea la sentencia de declaración de tipos:INTEGER :: I=3, J=5

OPERACIÓN RESULTADO3 <= I .TRUE.J**2-1 >= 0 .TRUE.I = = J .FALSE.I /= 10 .TRUE.‘ANA’ < ’PEPE’ .TRUE.

No son válidas las siguientes expresiones lógicas relacionales:<= 5 (falta operando 1)8.44 /= 'XYZ' (no se pueden comparar reales con caracteres)I = 3 (es una sentencia de asignación)

• No confundir el operador lógico relacional de igualdad con el operador deasignación.

Page 4: LÓGICA -DECISIONES

Expresiones lógicas combinacionales

Sintaxis:

La evaluación de una expresión lógica combinacional produce unresultado de tipo lógico: .TRUE. o .FALSE.

• operando es una expresión relacional, variable lógica oconstante lógica. Operando1 no existe cuando el operadorlógico usado es unario.

operando1 OPERADOR_LÓGICO_COMBINACIONAL operando2

Las expresiones lógicas combinacionales representan operacioneslógicas entre constantes, variables y otras expresiones lógicas.

Operador TIPO SIGNIFICADO

.NOT. Unario Es lo opuesto a operando2

.AND. Binario Es .true. si y sólo si operando1 y operando2 son .true.

.OR. Binario Es .true. si uno de los dos operandos ES .true.

.EQV. Binario Es .true. si y sólo si los dos operandos son .true. o los dos operandos son .false.

.NEQV. Binario Es .true. si y sólo si los dos operandos tienen valores distintos

Page 5: LÓGICA -DECISIONES

Expresiones lógicas combinacionales (ejemplos)

Sea:

LOGICAL:: L1=.TRUE., L2=.TRUE., L3=.FALSE.

OPERACIÓN RESULTADO

.NOT.L1 .FALSE.L1.AND.L3 .FALSE.L1.OR.L3 .TRUE.L1.AND.L2.OR.L3 .TRUE.

No es válida la siguiente expresión:

4.AND.3

• da error al compilar

Page 6: LÓGICA -DECISIONES

Precedencias lógicas-aritméticas Expresiones lógicas

combinacionales Operador ( ).NOT..AND..OR..EQV., .NEQV.

Prioridad

Mayor

Menor

Si una expresión lógica contiene dos o másoperadores de la misma precedencia sesiguen las siguientes reglas:•Cuando tiene paréntesis anidados, éstos seevalúan desde el más interno hasta el másexterno.•Si hay varios operadores .EQV. y/o .NEQV.se evalúan de izquierda a derecha.

Prioridad

Mayor

Menor

Operador***, /+, -.GT., .GE., .LT.,.LE., .EQ., .NE..NOT..AND..OR..EQV., .NEQV.

Combinación de expresiones

Operadores aritméticos

Operadores lógicos relacionales

Operadores lógicos combinacionales

Page 7: LÓGICA -DECISIONES

Bloque IF (I)Permite que un bloque de sentencias (puede ser sólo una) sea ejecutado si y sólo siel valor de una expresión lógica es cierta. Si la expresión lógica es falsa se salta esebloque de sentencias y se ejecuta la siguiente primera sentencia ejecutable.Sintaxis: IF (expresión lógica) THEN

bloque de sentenciasEND IF

• ENDIF marca la terminación de la sentencia de bloque IF.• El bloque de sentencias suele dentarse varios espacios para facilitar lalectura del bloque IF, aunque no es obligatorio hacerlo.

La estructura del bloque IF puede ser más complicada. A veces, se quiere ejecutardiferentes bloques de sentencias dependiendo de que otras tantas condiciones seanciertas. Por ejemplo:

IF (expresión lógica 1) THENbloque de sentencias 1

ELSE IF (expresión lógica 2) THENbloque de sentencias 2

ELSEbloque de sentencias 3

END IF

Page 8: LÓGICA -DECISIONES

Bloque IF (II)

La forma general responde a la siguiente sintaxis:

• Cuando una expresión lógica es cierta se ejecuta el bloque de sentenciascorrespondiente y se salta a la primera sentencia ejecutable por debajo de END IF.•Cuando todas las expresiones son falsas y el bloque IF incluye la cláusula ELSEse ejecuta su bloque de sentencias.•Cuando el bloque IF no incluye la cláusula ELSE y ninguna de las expresioneslógicas sean ciertas no se ejecuta ninguno de los bloques de sentencias dados.

IF (expresión lógica 1) THENbloque de sentencias 1

[ELSE IF (expresión lógica 2) THENbloque de sentencias 2]

...[ELSE

bloque de sentencias n]END IF

Page 9: LÓGICA -DECISIONES

Bloque IF con nombre

Es posible asignar un nombre a un bloque IF. La sintaxis general de unbloque IF con nombre es:

• Es recomendable usarnombres en los bloque IFlargos y complicados. Por unlado, el programadorestructura mejor los programasy, por otro, el compiladorencuentra errores en su códigode forma más precisa.

[nombre:] IF (expresión lógica 1) THENbloque de sentencias 1

[ELSE IF (expresión lógica 2) THEN [nombre]bloque de sentencias 2]

…[ELSE [nombre]

bloque de sentencias n]END IF [nombre]

•Además, los bloques IFpueden estar anidados. Dosbloques IF se dice que estánanidados cuando uno de ellosse encuentra dentro de otro. Eneste caso, cada uno de losbloques IF requiere su propiasentencia ENDIF. Ejemplo

[nombre_externo:] IF (expresión lógica 1) THENbloque de sentencias 1

[nombre_interno:]IF (expresión lógica 2) THENbloque de sentencias 2

END IF [nombre_interno]END IF [nombre_externo]

Page 10: LÓGICA -DECISIONES

Ejemplo de bloque IF I (Valor absoluto)

Leer n

Escribirn

n < 0SI

NO

Principio

Fin

IF (expresión lógica 1) THENbloque de sentencias

END IF

n = - n

Page 11: LÓGICA -DECISIONES

Ejemplo de bloque IF II (Ecuación de 2º grado)

2 4d b ac= -

1 2b dra

- +=

2 2b dra

- -=

1 2bra-

=

Leer a, b y c

Escribirr1 y r2Escribir

pr y pi

Escribirr1

d = 0SI

NO

Principio

Fin

2bpra-

=

2d

pia

=

d > 0SI

NO

IF (expresión lógica 1) THENbloque de sentencias 1

[ELSE IF (expresión lógica 2) THENbloque de sentencias 2]

…[ELSE

bloque de sentencias n]END IF

Page 12: LÓGICA -DECISIONES

Ejemplo de IF lógico I (Valor absoluto)

Leer n

Escribirn

n < 0SI

NO

Principio

Fin

IF (expresión lógica 1) sentencia

n = - n

Page 13: LÓGICA -DECISIONES

¡PRECAUCIÓN!

TÉNGASE MUCHO CUIDADO AL REALIZARCOMPROBACIONES EN UN IF CON VARIABLESREALES: POR ERROR DE REDONDEO PUEDETENER RESULTADOS INCORRECTOS.

USAR SIEMPRE VARIABLES ENTERAS

Page 14: LÓGICA -DECISIONES

Bloque SELECT CASEEl bloque SELECT CASE aparece en Fortran 90/95 como otra forma de controlar,junto con el bloque IF, la ejecución de determinados bloques de sentencias.

Su sintaxis general es:• El bloque SELECT CASE ejecutaun bloque determinado de sentenciascuando el valor de la expresión casocoincide o pertenece al rango dado desu correspondiente selector de caso.

[nombre:] SELECT CASE (expresión caso)CASE (selector de caso 1) [nombre]

bloque de sentencias 1[CASE (selector de caso 2) [nombre]

bloque de sentencias 2]…[CASE DEFAULT [nombre]

bloque de sentencias n]END SELECT [nombre]

• Opcionalmente puede existir unCASE DEFAULT en un bloqueSELECT CASE. El bloque desentencias de este caso por defecto seejecuta cuando el valor de laexpresión caso no coincide conningún selector de caso.• expresión caso es una expresión entera, lógica o de caracteres.• Selector de caso es una lista de uno o más valores posibles del mismo tipo que laexpresión caso. Cada selector de caso debe ser mutuamente excluyente. Los valorespueden escribirse como: valor

valormin: valormax: valormaxvalormin:o una combinación de estas formas separadas por comas.

• Es recomendable ponernombre a un bloqueSELECT CASE cuando sealargo y complicado

Page 15: LÓGICA -DECISIONES

Bloque SELECT CASE (Ejemplo)

Leer a, b y oper

Escribirc

'+'

Principio

Fin

oper = c = a + b

c = a - b

'-''*'

c = a * b

'/'

otrocaso

0.b ¹

SIc = a / b

NO

Fin 2

Escribirno vale

Fin 1

Escribirimposible

Page 16: LÓGICA -DECISIONES

Bloque SELECT CASE (Otros ejemplos)INTEGER :: valorparimpar: SELECT CASE (valor)

CASE (1, 3, 5, 7, 9)WRITE (*,*) ‘el valor es impar’

CASE (2, 4, 6, 8, 10)WRITE (*,*) ‘el valor es par’

CASE (11:)WRITE (*,*) ‘el valor es demasiado grande’

CASE DEFAULTWRITE (*,*) ‘el valor es negativo o cero’

END SELECT parimparINTEGER :: tempfriocalor: SELECT CASE (temp)

CASE (:-1)WRITE (*,*) ‘Por debajo de 0 Celsius’

CASE (0)WRITE (*,*) ‘Está helando’

CASE (1:10)WRITE (*,*) ‘Hace frío’

CASE (11:20)WRITE (*,*) ‘Templado’

CASE (21:)WRITE (*,*) ‘Hace calor’

END SELECT friocalor

Determinar si un número entero entre 1 y 10 es par o impar y visualizar un mensaje adecuado.

Visualizar un mensaje deacuerdo con el valor de latemperatura dada.

Page 17: LÓGICA -DECISIONES

Ejercicio nº 1

Pedir un número real por teclado y escribir si es positivo o no

Leer num

num > 0SI NO

Principio

Fin

EscribirPOSITIVO

EscribirNEGATIVO

o CERO

Page 18: LÓGICA -DECISIONES

Ejercicio nº 2

Pedir un número real por teclado yescribir si es positivo, negativo o cero.

num > 0SI NO

Principio

Fin

EscribirPOSITIVO

EscribirNEGATIVO

num < 0SI NO

EscribirCERO

Leer num

Page 19: LÓGICA -DECISIONES

Ejercicio nº 4Resolver una ecuación de 2º grado con A, B y Ccualquier valor.

2 4d b ac= -

1 2b dra

- +=

2 2b dra

- -=

1 2bra-

=

d = 0

SI

NO

Principio

Fin

2bpra-

=

2d

pia

=

SI

NO

Leer a, b y c

d > 0

Escribirr1 y r2

Escribirpr y pi

Escribirr1

a 0SI

NO¹b 0

SI

¹

c 0

SI

¹

NO

crb

= -

Escribirr

EscribirINDET.

EscribirIMPOS.

NO

Page 20: LÓGICA -DECISIONES
Page 21: LÓGICA -DECISIONES

Ejercicio nº 5Dada una calificación numérica obtener la correspondiente alfabética segúnla siguiente clasificación: 0£ Nota < 5 Suspenso

5£ Nota < 7 Aprobado7£ Nota < 9 Notable9£ Nota < 10 SobresalienteNota = 10 Matricula de Honor

NO

Principio

Fin

Leer nota

nota < 5

SI

NOSI

SI

EscribirSusp.

NOnota < 7

nota < 9

nota < 10EscribirAprob.

EscribirNotab. SI

EscribirSobres.

NO

EscribirMat. H.