• No se han encontrado resultados

LÓGICA - DECISIONES. Hay dos tipos de expresiones lógicas: las expresiones lógicas relacionales y las expresiones lógicas combinacionales.

N/A
N/A
Protected

Academic year: 2021

Share "LÓGICA - DECISIONES. Hay dos tipos de expresiones lógicas: las expresiones lógicas relacionales y las expresiones lógicas combinacionales."

Copied!
21
0
0

Texto completo

(1)

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.

(2)

Expresiones lógicas relacionales

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

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

Sintaxis:

operando1 OPERADOR_LÓGICO_RELACIONAL operando2

operando es una expresión, variable o constante

aritmética o de tipo carácter.

Operador LÓGICO relacional

Significado 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 relacionales de Fortran 77 han sobrevivido y funcionan en los compiladores de Fortran 90/95. Por ello, es interesante que el programador los reconozca en los programas, sin embargo, es preferible que utilice la forma de Fortran 90 en sus programas nuevos, que es mucho más intuitiva.

(3)

Expresiones lógicas relacionales

(ejemplos)

Sea la sentencia de declaración de tipos:

INTEGER :: I=3, J=5

OPERACIÓN RESULTADO

3 <= 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 de asignación.

(4)

Expresiones lógicas combinacionales

Sintaxis:

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

operando es una expresión relacional, variable lógica o

constante lógica. Operando1 no existe cuando el operador

lógico usado es unario.

operando1 OPERADOR_LÓGICO_COMBINACIONAL operando2

Las expresiones lógicas combinacionales representan operaciones ló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

(5)

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

(6)

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ás operadores de la misma precedencia se siguen las siguientes reglas:

•Cuando tiene paréntesis anidados, éstos se evalúan desde el más interno hasta el más externo.

•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

(7)

Bloque IF (I)

Permite que un bloque de sentencias (puede ser sólo una) sea ejecutado si y sólo si el valor de una expresión lógica es cierta. Si la expresión lógica es falsa se salta ese bloque de sentencias y se ejecuta la siguiente primera sentencia ejecutable.

Sintaxis: IF (expresión lógica) THEN

bloque de sentencias

END IF

• ENDIF marca la terminación de la sentencia de bloque IF.

• El bloque de sentencias suele dentarse varios espacios para facilitar la lectura del bloque IF, aunque no es obligatorio hacerlo.

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

IF (expresión lógica 1) THEN

bloque de sentencias 1

ELSE IF (expresión lógica 2) THEN

bloque de sentencias 2

ELSE

bloque de sentencias 3

(8)

Bloque IF (II)

La forma general responde a la siguiente sintaxis:

• Cuando una expresión lógica es cierta se ejecuta el bloque de sentencias correspondiente 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 ELSE se ejecuta su bloque de sentencias.

•Cuando el bloque IF no incluye la cláusula ELSE y ninguna de las expresiones lógicas sean ciertas no se ejecuta ninguno de los bloques de sentencias dados.

IF (expresión lógica 1) THEN

bloque de sentencias 1

[ELSE IF (expresión lógica 2) THEN

bloque de sentencias 2]

...

[ELSE

bloque de sentencias n]

(9)

Bloque IF con nombre

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

• Es recomendable usar nombres en los bloque IF largos y complicados. Por un lado, el programador estructura mejor los programas y, por otro, el compilador encuentra errores en su código de forma más precisa.

[nombre:] IF (expresión lógica 1) THEN

bloque 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 IF pueden estar anidados. Dos bloques IF se dice que están anidados cuando uno de ellos se encuentra dentro de otro. En este caso, cada uno de los bloques IF requiere su propia sentencia ENDIF. Ejemplo

[nombre_externo:] IF (expresión lógica 1) THEN

bloque de sentencias 1

[nombre_interno:]IF (expresión lógica 2) THEN

bloque de sentencias 2

END IF [nombre_interno] END IF [nombre_externo]

(10)

Ejemplo de bloque IF I

(Valor absoluto)

Leer n Escribir n n < 0 SI NO Principio Fin

IF (expresión lógica 1) THEN

bloque de sentencias

END IF

(11)

Ejemplo de bloque IF II

(Ecuación de 2º grado)

2 4 d b= - ac 1 2 b d r a - + = 2 2 b d r a -= 1 2 b r a -= Leer a, b y c Escribir r1 y r2 Escribir pr y pi Escribir r1 d = 0 SI NO Principio Fin 2 b pr a -= 2 d pi a = d > 0 SI NO

IF (expresión lógica 1) THEN

bloque de sentencias 1

[ELSE IF (expresión lógica 2) THEN

bloque de sentencias 2]

… [ELSE

bloque de sentencias n]

(12)

Ejemplo de IF lógico I

(Valor absoluto)

Leer n Escribir n n < 0 SI NO Principio Fin

IF (expresión lógica 1) sentencia

(13)

¡PRECAUCIÓN!

TÉNGASE MUCHO CUIDADO AL REALIZAR

COMPROBACIONES EN UN

IF

CON VARIABLES

REALES: POR ERROR DE REDONDEO PUEDE

TENER RESULTADOS INCORRECTOS.

(14)

Bloque SELECT CASE

El 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 ejecuta un bloque determinado de sentencias cuando el valor de la expresión caso coincide o pertenece al rango dado de su 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 un

CASE DEFAULT en un bloque SELECT CASE. El bloque de sentencias de este caso por defecto se ejecuta cuando el valor de la

expresión caso no coincide con

ningú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 la

expresión caso. Cada selector de caso debe ser mutuamente excluyente. Los valores

pueden escribirse como: valor

valormin: valormax : valormax

valormin:

o una combinación de estas formas separadas por comas.

• Es recomendable poner

nombre a un bloque

SELECT CASE cuando sea largo y complicado

(15)

Bloque SELECT CASE

(Ejemplo)

Leer a, b y oper Escribir c '+' Principio Fin oper = c = a + b c = a - b '-' '*' c = a * b '/' otro caso 0. b ¹ SI c = a / b NO Fin 2 Escribir no vale Fin 1 Escribir imposible

(16)

Bloque SELECT CASE

(Otros ejemplos)

INTEGER :: valor

parimpar: 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 DEFAULT

WRITE (*,*) ‘el valor es negativo o cero’ END SELECT parimpar

INTEGER :: temp

friocalor: 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 de acuerdo con el valor de la temperatura dada.

(17)

Ejercicio nº 1

Pedir un número real por teclado y escribir si es positivo o no Leer num num > 0 SI NO Principio Fin Escribir POSITIVO Escribir NEGATIVO o CERO

(18)

Ejercicio nº 2

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

num > 0 SI NO Principio Fin Escribir POSITIVO Escribir NEGATIVO num < 0 SI NO Escribir CERO Leer num

(19)

Ejercicio nº 4

Resolver una ecuación de 2º grado con A, B y C cualquier valor. 2 4 d b= - ac 1 2 b d r a - + = 2 2 b d r a -= 1 2 b r a -= d = 0 SI NO Principio Fin 2 b pr a -= 2 d pi a = SI NO Leer a, b y c d > 0 Escribir r1 y r2 Escribirpr y pi Escribir r1 a 0 SI NO ¹ b 0 SI ¹ c 0 SI ¹ NO c r b = -Escribir r Escribir INDET. Escribir IMPOS. NO

(20)
(21)

Ejercicio nº 5

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

5£ Nota < 7 Aprobado

7£ Nota < 9 Notable

9£ Nota < 10 Sobresaliente

Nota = 10 Matricula de Honor

NO Principio Fin Leer nota nota < 5 SI NO SI SI Escribir Susp. NO nota < 7 nota < 9 nota < 10 Escribir Aprob. Escribir Notab. SI Escribir Sobres. NO Escribir Mat. H.

Referencias

Documento similar

El contar con el financiamiento institucional a través de las cátedras ha significado para los grupos de profesores, el poder centrarse en estudios sobre áreas de interés

La amplitud temporal en la que se instaló el software que manipulaba las emisiones durante las pruebas (de 2009 a 2015) así como el número de vehículos afectados (11 millones en

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

(2) la expresión episódica propiamente dicha. e) El que las expresiones episódicas sean producidas uniformente para una determinada situación no conlleva que existan expresiones

Eso le debería permitir que una parte significativa de su atención se dedicara a su economía (potenciando el mercado interior, previa mejora de las infraes- tructuras y de

Conside- raremos los dos principales canales para el estudio de las emociones: las expresiones faciales obtenidas a partir de un video y las expresiones

saginata, se considera común en Europa del este (15), con una prevalencia mucho más baja en Europa occidental (del orden de 0.01%) (16).. Las infecciones humanas son endémicas

aceptado sino muy parcial y matizadamente, y aun prescindiendo también de que incluso aquellos autores que intentan explicar las relaciones inter- normativas con apoyo en