Brazos Bloque IF

Anuncio
Brazos
Bloque IF
Permite que se ejecuten una serie de tareas si y sólo si una expresión lógica es
verdadera.
IF(logical_exp) then
sentencia1
sentencia2
Bloque1
…
END IF
Si la expresión lógica es verdad entonces se ejecuta el Bloque1. Si la expresión
lógica es falsa se saltea todo el Bloque1 y ejecuta la sentencia posterior al
END IF
Exp.
logica
verdad
Sentencia 1
Sentencia 2
…..
falso
EJ: Dado un numero A calcular su raíz cuadrada e imprimirlo
Diagrama de flujo
comienzo
Leo
A
no
A> 0
Imprimo:
‘No tiene
solución’
si
B=sqrt(A)
Imprimo :
‘ la raíz es
‘B
fin
Las clausulas ELSE y ELSE IF
Permiten sumar otros Bloques de tareas
Exp.
falso
Lógica
1
verdad
Exp.
Lógica
2
verdad
Bloque 1
Bloque 2
falso
Bloque 3
IF(logical_exp 1) THEN
sentencia1
sentencia2
Bloque1
…
ELSE IF(logical_exp2) THEN
sentencia3
sentencia4
Bloque2
…
ELSE
sentencia5
sentencia6
Bloque3
…
END IF
Ej:
PROGRAM raices_de_la_ecuacion_cuadratica
! Proposito: calcular las raíces de la ecuación cuadrática y clasificar el
!resultado según sea con 2 soluciones reales distintas , 2 soluciones reales
!iguales o 2 soluciones complejas.
!
IMPLICIT NONE
REAL :: a !coef de x2
REAL :: b !coef de x
REAL :: c !coef indep
REAL :: discrim !discriminante
REAL :: part_real !parte real de la solucion
REAL :: part_ima !parte imaginaria de la solucion
REAL :: x1
!sol. Real 1
REAL :: x2
!sol. Real 2
!
WRITE(*,*) “Este programa resuelve la ec. a x2 +b x +c =0”
WRITE(*,*) “Entre los coeficientes a, b y c”
READ(*,*) a, b, c
WRITE(*,*) “ los coeficientes a, b y c son:”, a, b, c
! Calculo el discriminante
Discrim=b**2 – 4.*a*c
!clasifico la raiz según el discriminante
IF(discrim>0) then
x1=(-b+sqrt(discrim))/(2.*a)
x2=(-b-sqrt(discrim))/(2.*a)
WRITE(*,*) “ esta ecuación tiene 2 raíces reales”
WRITE(*,*) “x1=“, x1
WRITE(*,*) “x2=“, x2
ELSE IF(discrim<0) then
part_real=(-b)/(2.*a)
part_ima=sqrt(abs(discrim))/(2.*a)
WRITE(*,*) “ esta ecuación tiene 2 raíces complejas”
WRITE(*,*) “x1=“,part_real,”+i”,part_ima
WRITE(*,*) “x2=“, part_real,”-i”,part_ima
ELSE IF(discrim==0) then
x1=(-b)/(2.*a)
WRITE(*,*) “ esta ecuación tiene 2 raíces reales iguales”
WRITE(*,*) “x1=x2=“, x1
END IF
END PROGRAM raices_de_la_ecuacion_cuadratica
Verificación (prueba de escritorio)
x2 + 5x + 6 = 0
x1 = -2 y x2 = -3
x2 + 4x + 4 = 0
x=2
x2 + 2x + 5 =0
x= -1 ∓ i2
Realizar 3 ejecuciones para verificar los 3 casos
Es posible poner un nombre al bloque IF
[nombre:] IF(logical_exp 1) THEN
sentencia1
sentencia2
Bloque1
…
ELSE IF(logical_exp2) THEN [nombre]
sentencia3
sentencia4
Bloque2
…
ELSE [nombre]
sentencia5
sentencia6
Bloque3
…
END IF [nombre]
El nombre puede tener 31 caracteres de longitud y debe empezar con una letra.
Si un nombre se le asigna al IF en el END IF también debe figurar ese nombre.
En los ELSE el nombre es opcional.
Este nombre es de utilidad en programas muy largos.
Los IF pueden ser anidados
externo: IF (x > 0.) then
……
interno: IF(y>0.) then
……
…….
END IF interno
………
END IF externo
Para solo una linea
IF(exp_logica) sentencia
La sentencia debe de ser ejecutable. Se usa cuando el el bloque tiene una sola
sentencia.
[nombre:] SELECT CASE(exp_caso)
case (caso seleccionado1) [ nombre]
sentencia1
sentencia2
Bloque1
…
case (caso seleccionado2) [ nombre]
sentencia3
sentencia4
Bloque2
…
case default [ nombre]
sentencian
sentencian+1
Bloquen
…
END select [nombre]
Caso
1
falso
verdad
Bloque 1
Ej:
Caso
2
verdad
Bloque 2
INTEGER :: temp_c
Temp: SELECT CASE (temp_c)
CASE(:-1)
WRITE(*,*) “Bajo cero ”
CASE(0)
WRITE(*,*) “congelación”
CASE(1:20)
WRITE(*,*) “frio a fresco”
CASE(21:33)
WRITE(*,*) “cálido”
CASE(34:)
WRITE(*,*) “bochornoso”
END SELECT temp
Caso
n
falso
verdad
Bloque n
Bloque
Descargar