Beruflich Dokumente
Kultur Dokumente
I.- Programas
1. Lenguajes de Programacin 2. Lenguajes de Programacin de Alto Nivel 3. Ejemplos de Programas 4. Como escribir un programa 4.1 Anlisis del problema 4.2 Algoritmo 4.3 Editar el programa 4.4 Prueba del programa 4.5 Anlisis de resultados 4.6 Anlisis de errores (Compilacin y Ejecucin) 5. Software de FORTRAN
3. Data Objects 3.1 Tipo Intrnseco 3.2 Constantes literales 3.3 Tipo Implcito 3.4 Declaraciones Numricas y lgicas 3.5 Declaracin de caracteres 3.6 Constantes (parmetros) 3.7 Inicializacin 3.8 Ejemplos 4. Expresiones y Asignaciones 4.1 Expresiones 4.2 Asignacin 4.3 Operaciones numricas intrnsecas 4.4 Operadores relacionales 4.5 Operaciones lgicas intrnsecas 4.6 Errores de precisin 4.7 Precedencia (orden de ejecucin) 4.8 Operaciones con caracteres
I.- Programas
Introduccin
1. El computador
2. Hardware / Software
0.31459 10
overflow / underflow
c) Caracteres
' abcdefgh' , ' 12345678 ' , ' ab57ght9' ,' abgh tfz '
Lenguajes de Programacin
1.- Cdigo Binario ( 0 / 1) Complejo Propenso a errores 2.- Lenguajes Ensambladores LDA'3F2C' ADD'3F29' STO'3F2A' 3.- Lenguajes de Programacin Inequvoco Expresivo Prctico Fcil de usar
Ejemplos de Programas
Disear un programa que convierta grados farenheit ( F ) a grados centgrados ( C ), para ello puede utilizar la siguiente regla de conversin.
C = 5 f 32 / 9
Y que tambin transforme de C a grados Kelvin (K). PROGRAM conversion_de_temperatura IMPLICIT NONE INTEGER :: grad_F, grad_C, K write(*,*)'Ingrese la temperatura en grados F' read(*,*)grad_F grad_C=5*(grad_F-32)/9 write(*,*)'Grados centigrados = ', grad_C,'C' K=grad_C+273 write(*,*)'y', K, 'K' END PROGRAM conversion_de_temperatura
Seccin de Especificacin Es el rea del programa apartado para las declaraciones de las posiciones de memoria ( o variables) que sern utilizadas en el rea ejecutable. Esta seccin, adems de dar los nombres de las variables a utilizar, es necesaria para indicar el tipo de data de cada variable.
Seccin de Ejecucin Es el rea del cdigo que ejecuta todas las instrucciones. En este caso el programa lleva a cabo las siguientes acciones: 1. Pide datos de entrada 2. Lee datos de entrada (grad_F) 3. Calcula la temperatura en C 4. Imprime el valor en C 5. Calcula la temperatura en K 6. Imprime el valor en K
PROGRAM conversion_de_temperatura IMPLICIT NONE INTEGER :: grad_F, grad_C, K write(*,*)'Ingrese la temperatura en grados F' read(*,*)grad_F grad_C=5*(grad_F-32)/9 write(*,*)'Grados centigrados = ', grad_C,'C' K=grad_C+273 write(*,*)'y', K, 'K' END PROGRAM conversion_de_temperatura Seccin de Especificacin: IMPLICIT NONE: Su presencia indica que todas las variables mencionadas en el programa deben declararse en la seccin de especificacin. DECLARACIN DE VARIABLES NUMRICAS: Enteras Reales Lgicas Caracteres -------> INTEGER -------> REAL -------> 3.1459, 0.31417E05 -------> LOGICAL -------> .TRUE. / .FALSE. -------> CHARACTER ------->Caracteres alfanumricos
Seccin de ejecucin:
write(*,*)'Ingrese la temperatura en grados F' Escribe por pantalla la frase que se encuentra entre comillas. read(*,*)grad_F Lee el valor asignado desde el teclado para la variable entera grad_F grad_C=5*(grad_F-32)/9 Declaracin de asignacin, el lado derecho es evaluado y le asigna a la variable entera grad_C el valor calculado. Esta declaracin contiene los operadores: * Multiplicacin - Sustraccin = Asignacin + Adicin / Divisin write(*,*)'Grados centigrados = ', grad_C,'C' K=grad_C+273 write(*,*)'y', K, 'K'
Ejemplo: Escriba un programa que calcule las races de una ecuacin cuadrtica de la forma:
a x bx c =0
2
x =b
[ b2 4 a c ] 2a
Leer los valores de los coeficientes a, b y c Si a es cero el programa se detendr debido a que no se tiene una ecuacin cuadrtica Calcula el valor del discriminante Si D es cero hay una sola raz
D = b 4 ac
2
b 2a Si D > 0 hay dos races reales b D y b D 2a 2a Si D < 0 hay dos races complejas b i D y b i D 2a 2a
Imprimir la solucin
II- Programa
PROGRAM QES IMPLICIT NONE INTEGER:: a, b, c, D REAL:: real_part, imag_part WRITE(*,*)Ingrese los valores a a, b y c READ(*,*)a, b, c IF(a /= 0) then !calculo del discriminante D=b*b 4*a*c IF(D == 0) then !una sola raz WRITE(*,*)La raz es , -b/(2.0*a) ELSE IF (D > 0) then !Raices reales WRITE(*,*)Las races son, (-b+sqrt(real(D)))/(2.0*a) WRITE(*,*)y, (-b-sqrt(real(D)))/(2.0*a) ELSE real_part=-b/(2.0*a) !D<0, calculamos la SQRT de -D imag_part=(SQRT(real(-D))/(2.0*a)) WRITE(*,*)Primera raz, real_part,+,imag_part,i WRITE(*,*)Segunda raz, real_part,-,imag_part,i ENDIF ELSE !a==0 WRITE(*,*)No es una ecuacin cuadrtica ENDIF END PROGRAM QES
1.- Especificar el problema 2.- Analizar y dividir en una serie de subtareas para obtener la solucin (algoritmo) 3.- Escribir el cdigo en lenguaje FORTRAN90 (Edicin del programa) 4.- Compilar y ejecutar (test de programa) 5.- Anlisis de resultados 6.- Anlisis de errores a) Compilacin Errores b) Ejecucin
(IBM)
1960 Popularizacin 1960 Versiones Diferentes =====> Crecimiento divergente (Dialectos) 1963 existan 40 compiladores diferentes 1972 FORTRAN66 Primer lenguaje oficialmente standard 1975 * Todos los computadores estaban dotados con FORTRAN66 * Programas podan ser mudados para trabajar en otros sistemas * Lenguaje ms utilizado en el mundo para aplicaciones no comerciales ANSI X3.9 1978 / IS 1539 : 1980
1980 FORTRAN77 Compiladores ms eficientes a.- Estructuras de datos Deficiencias de FORTRAN77 b.- Almacenamiento dinmico FORTRAN 8X 1992 FORTRAN90 FORTRAN77 sigue siendo reconocido por FORTRAN90 portable + eficiente + seguro + mantenimiento 2000 VAST / LOFT90 Crecimiento de FORTRAN90 ==> Ambigedades / conflictos / Areas grises FORTRAN95 FORTRAN HPF
2. Elementos de FORTRAN
Formato Fuente Cdigos de Formato Libre Conjunto de Caracteres Manejo de espacios en blanco Manejo de comentarios Nombres Estructura del programa
Elementos de FORTRAN 90
2.1. Formato Fuente Son las reglas bsicas de cualquier lenguaje de programacin. Estas reglas determinan exactamente como deben escribirse las instrucciones para la mquina. 2.2. Cdigo de Formato Libre Fortran 90 tiene dos formatos fuentes bsicamente incompatibles, uno es la forma compatible con la utilizada en FORTRAN 77, formato fijo, y una forma nueva ms conveniente para el ambiente de cmputacin moderno, formato libre.
132 caracteres por linea Serie de caracteres extendido ( . , _ ) & Indicador de continuacin de lnea ! Indicador de comentario ; Separador de instrucciones en la misma lnea Espacios en blanco
Disponibilidad
2.4. Manejo de espacios en blanco * Los espacios en blanco consecutivos tienen el mismo significado que uno solo. * Los espacios en blanco no son permitidos en palabras claves ( keywords ) del lenguaje de programacin. * Los espacios en blanco no estn permitidos en nombres definidos por el programador. * Si el nombre est compuesto de dos palabras se estila utilizar un underscore ( _ ) como separador. * Las palabras claves y los nombres deben escribirse separados. Ejemplo: INTEGER / = INT EGER horas /= ho ras / = SUBROUTINE Clear EGER : : a
SUBROUTINEClear INTEGER : : a
/ = INT
INTEGER FUNCTION fit( i ) ! vlida INTEGERFUNCTION fit( i ) ! invlida INTEGER FUNCTIONfit( i ) ! invlida POLYN=X**3-X**2+3*X-2.0 POLYN = X**3 - X**2 + 3*X - 2.0
2.5. Comentarios En cualquier lnea el caracter ! indica que todos los caracteres siguientes a este hasta el final de la lnea es un comentario. Los comentarios son ignorados por el compilador, forman parte del programa fuente pero estn dirigidos al programador y no a la mquina.
Ejemplo: PROGRAM Area ! ! Evalo el rea del tringulo ! A=b*h/2 WRITE( * , * ) ' Esto no es un comentario ! ! ! '
! La siguiente lnea es una directiva HPF !HPF$ PROCESSORS P( 3, 3, 3 ) ! Cambia a formato fijo !DIR$ FIXED_FORM
2.6. Nombres El lenguaje FORTRAN define una serie de nombres, o palabras clave, tales como PRINT, INTEGER, MAX, WRITE, SUBROUTINE, FUNCTION, DIMENSION, entre otras cuya sintaxis est definida por el lenguaje. Por otro lado, hay hay una serie de entidades que deben ser nombradas por el programador, tales como variables, procedimientos, constantes. Estos nombres deben ser escogidos de tal manera que obedezcan las siguientes reglas: a.- Debe tener un mximo de 31 caracteres alfanumricos. b.- El primer caracter en cualquier nombre debe ser una letra. c.- En los nombres, las maysculas como las minsculas son equivalentes. Ejemplo: Vlidas: A , aAa , entrada , num1 , N1205 , contador_ciclos CHARACTER ( LEN = 12 ) : : nombreusuario CHARACTER ( LEN = 12 ) : : nombre_usuario INTEGER : : 1A INTEGER : : depth:0 REAL : : A-3
Invlidas:
2.7. Orden y estructura del programa Bsicamente en cualquier programa o procedimiento deben usarse las siguientes reglas: a.- La declaracin de encabezamiento debe ir al principio, ( PROGRAM, FUNCTION o SUBROUTINE ) b.- Todas las instrucciones de especificacin deben estar antes que las instrucciones de ejecucin. c.- Las instrucciones ejecutables deben seguir el orden requerido por la lgica del programa. d.- El programa debe terminar con la declaracin END.
3. Objetos de data
3.1. Tipos Intrnsecos Clases Caracter Booleana Numrica -----> -----> Tipos CHARACTER LOGICAL INTEGER REAL, DOUBLE PRECISION COMPLEX
Tipos
CHARACTER : Cadena de uno o ms caracteres. LOGICAL : Objetos que tienen dos valores, definidos por Verdadero / Falso ( .TRUE. / .FALSE. ). INTEGER : Nmeros Enteros. REAL ( DOUBLE PRECISION ) : valores aproximados o de punto flotante. COMPLEX : Nmeros definidos por una parte real y otra imaginaria, de la forma x+yi.
Ejemplos CHARACTER : : sexo CHARACTER (LEN = 12) : : nombre LOGICAL : : estado_civil REAL : : altura DOUBLE PRECISION : : pi INTEGER : : edad COMPLEX : : val ! letras ! Cadena de letras ! casad@ ! 3.14159 ! nros. Enteros ! x + yi
Observaciones: 1.- En la mayora de los lenguajes de programacin estn presentes las tres clases. 2.- Las clases no pueden mezclarse entre s, a no ser que se desarrolle algn tipo de relacin. 3.- Los objetos REAL y DOUBLE PRECISION son aproximaciones. En FORTRAN90, DOUBLE PRECISION no debe ser utilizado. En FORTRAN77, un objeto D. P. tiene mayor precisin que uno de tipo real. 4.- Todos los tipos numricos tienen rango finito. 5.- No existe declaraciones por defecto para ningn tipo de valor.
3.2. Constantes Literales Son entidades con un valor fijo. Ejemplos: +12345 ! INTEGER 2. ! REAL -6.6E-06 ! REAL -6.6D-06 ! DOUBLE PRECISION . FALSE . ! LOGICAL 'MA''DIB' ! CHARACTER MADIB ! CHARACTER
Observaciones: 1.- Solo existen dos valores lgicos ( LOGICAL ). 2.- Los valores enteros son representados por una secuencia de dgitos con un signo (+) (-), (+) es opcional. 3.- Los valores reales contienen un punto decimal o un smbolo de exponente. 4.- Los valores de tipo caracter siempre estn delimitados por comillas, que deben ser del mismo tipo. 5.- Los valores numricos tienen un rango finito. 6.- Las constantes pueden incluir alguna clase de especificador.
3.3. Tipo Implcito Si una variable es utilizada, pero no es declarada, el compilador la considerar declarada de forma implcita. El tipo que se asume depender de la primera letra del nombre del objeto. A, B , C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z Nota: Al Utilizar IMPLICIT NONE el usuario ser informado de cualquier variable no declarada.
3.4. Declaraciones numricas y lgicas Las variables utilizadas en un programa deben declararse en la seccin de declaracin. SINTAXIS: < TIPO > [, < lista de atributos > ] : : < lista de variables > [ = < valor > ] Nota: Los dos puntos son obligatorios si la lista de atributos es utilizada o si a la variable se le asigna algun valor.
Ejemplos: REAL : : x INTEGER : : i , j LOGICAL, POINTER : : ptr REAL, DIMENSION (10, 10) : : y , z( 10 ) DOUBLE PRECISION, DIMENSION (0:9,0:9) : : w Atributos: PARAMETER, SAVE, INTENT, POINTER, TARGET, DIMENSION 3.5. Declaracin de Caracteres SINTAXIS: < TIPO > [LEN = < longitud > ][, < lista de atributos >] : : < lista de variables > [ = < valor > ] [LEN = < longitud >] puede ser modificada al usarse el asterisco. Ejemplos: CHARACTER( LEN = 10 ) : : nombre CHARACTER : : sexo CHARACTER ( LEN = 32 ) : : str CHARACTER ( LEN = 10 ) : : nombre, sexo*1, str*32 CHARACTER ( LEN = 10 ), DIMENSION : : tom(10)*2, dick, harry(10,10,10)*20 CHARACTER, POINTER : : P2ch
3.6. Declaracin de Constantes ( PARAMETER ) Las constantes simblicas, conocidas en Fortran como PARAMETER, pueden configurarse tanto en una declaracin con atributo o en una declaracin de PARAMETER. Ejemplo: ESTILO FORTRAN77
INTEGER numero PARAMETER ( numero = 256 ) REAL pi PARAMETER ( pi = 3.14159 ) CHARACTER hijo , padre PARAMETER ( hijo = ' bart ' ) PARAMETER ( padre = homero )
ESTILO FORTRAN90
INTEGER , PARAMETER : : numero = 256
REAL, PARAMETER : : pi = 3.14159 CHARACTER ( LEN = * ), PARAMETER : : hijo = ' bart ', padre = homero
Observaciones: 1.- Las constantes deben utilizarse cuando se tiene la seguridad que la variable solo toma un valor. Con esta declaracin la variable no podr ser modificada en el transcurso del programa, si alguna declaracin intente cambiar este valor el compilador lo interpretar como un error. 2.- Son utilizadas para hacer que la lectura del programa se haga ms sencilla. 3.- Mantenimiento: cuando un valor constante debe ser cambiado, este se ajusta al cambiar la lnea de la seccin de declaracin.
3.7. Inicializacin Cuando un programa se carga a la memoria de un computador, el contenido de las variables es indefinido. Por lo tanto siempre es til asignarle valores iniciales a las variables. Asignar valores iniciales ===> INICIALIZACION Ejemplos: INTEGER : : i = 5 , j = 100 REAL : : max = 10. D 5 CHARACTER ( LEN = 5 ) : : light = ' ambar ' CHARACTER ( LEN = 9 ) : : boot = wellie LOGICAL : : on = .TRUE. , off = .FALSE. Observaciones: 1.- En las declaraciones tipo caracter: a) El objeto se completa con espacios en blanco. b) La expresin de inicializacin se trunca al lado derecho. 2.- Hay diferentes maneras de inicializar a las variables: a) Instruccin PARAMETER. REAL, PARAMETER : : pi = 3.141592 b) Instruccin DATA. c) Declaracin de tipo REAL : : radio = 3.5 ; REAL : : circun = 2. * pi * radio
3.8. Ejemplos de declaraciones CHARACTER ( LEN = 20 ) : : lugar CHARACTER : : turno INTEGER : : num_nios_nacidos = 0 REAL : : tiempo_ transcurrido = 0.0 REAL : : tmax_entre_nacim = 0.0 REAL : : tprom_entre_nacim REAL : : t_desde_el_ultimo_nacim LOGICAL : : publico ! Nombre del hospital ! A, B, C, D ! Suma total de nacimientos ! Tiempo desde el primer nacimiento ( hora ) ! Mximo tiempo de espera entre nacimientos ! Tiempo de espera promedio entre nacimientos ! Tiempo medido desde el ltimo nacimiento ! Hospital o clnica
Ejemplos: De la siguientes, cuales son declaraciones incorrectas? 1.- ReAl : : x 13.- CHARACTER ( len ), PARAMETER : : barquisimeto 2.- CHARACTER : : name 14.- REAL, PARAMETER : : py = 22.0 / 7.0 3.- CHARACTER ( len = 10 ) : : name 15.- REAL : : dos_pi = py * 2 4.- REAL : : var-1 16.- REAL : : a = 1 . , b = 2 5.- INTEGER : : 1 17.- LOGICAL ( len = 12 ) : : frisnet 6.- BOOLEAN : : loji 18.- CHARACTER ( len = 6 ) : : palabra = yknow 7.- DOUBLE : : X 19.- CHARACTER ( len = 6 ) : : palabra = yknow 8.- CHARACTER ( len = 5 ) : : ciudad = barquisimeto 20.- INTEGER : : ia ib ic id 9.- CHARACTER ( len = * ) : : ciudad = barquisimeto 21.- DOUBLE PRECISION : : pattie = +1.0D0 10.- CHARACTER ( len = * ), PARAMETER : : estado = Lara 22.- DOUBLE PRECISION : : pattie = -1.0E-0 11.- INTEGER : : pi = +22 / 7 23.- LOGICAL, DIMENSION ( 2 ) bool 12.- LOGICAL : : onn = .TRUE. 24.- REAL : : pi = 4. * atan ( 1. )
4. Expresiones y Asignaciones
4.1. Expresiones Son la combinacin de operadores y operandos, en las que cada tipo de las tres clases de objetos tienen sus propios operandos. Una expresin est compuesta por un operador y, al menos, un operando. Operadores + , - , * , / , // , * * , definidos por el usuario Ejemplo: Numrico Caracter Lgico alfa + 1 carrera // ciencias a = 100 ; b = 5 ; a .GT. B
P=x**32*x**2+5*x-6
4.2. Asignacin Es el operador que permite darle sentido prctico a la combinacin de expresiones. Ejemplo: A=B C = sin ( .7 ) * 12.7 nombre = iniciales // apellido bool = ( a .EQ. b .OR. c .NE. d )
Operadores
Tipos
+ , - , * , / , **
Ejemplo: Escribir un programa que lea el radio y calcule el rea de la circunferencia correspondiente as como el volumen de la esfera. area = r 2
4 r 3 volumen = 3
PROGRAM area REAL : : r , area , volumen REAL : : pi = 3.14159 Write*, Ingrese el valor del radio Read*, r area = pi * ( r ** 2. ) volumen = ( 4. * pi * ( r ** 3 ) ) / 3. Write*, Area de la circunferencia , area Write*, Volumen de la esfera , volumen END PROGRAM area
FORTRAN90
> < >= <= /= ==
1.2.3.4.5.-
Compara valores entre dos operandos. Entrega un resultado lgico ( .TRUE. / .FALSE. ). Aplica a operandos numricos (COMPLEX ?). Aplica a objetos tipo CHARACTER ---> ASCII. No aplica a objetos de tipo lgico.
Ejemplo: PROGRAM RELACION IMPLICIT NONE LOGICAL : : bool INTEGER : : i , j REAL : : c , d write(*,*)' Ingrese los valores i, j ' read(*,*) i , j bool = i .GT. J write(*,*)' respuesta logica ', bool END PROGRAM RELACION
4.5. Operadores lgicos intrnsecos Expresiones que dan como resultados .TRUE. / .FALSE. .NOT. .AND. .OR. .EQV. .NEQV.
X1 TRUE TRUE FALSE FALSE X2 TRUE FALSE TRUE FALSE
.NOT. (a .LT. b) (a .GT. 5) .AND. (b .LT. 3) (a .GT. 6) .OR. (b .LT. 10) Ambos operandos iguales Ambos operandos diferentes
.NOT. X2 FALSE TRUE FALSE TRUE X1 .AND. X2 X1 .OR. X2 X1 .EQV. X2 X1 TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE .NEQV. X2 FALSE TRUE TRUE FALSE
Ejemplo: REAL : : a, b, x, y LOGICAL : : L1, L2 L1 = (.NOT. (x .EQ. y .AND. a .EQ. B )) L2 = (L1 .EQV. ( ( x .GT. a .OR. y .LT. b ) .NEQV. a .EQ. b ) )
CHARACTER (LEN = *), PARAMETER : : palabra = 'abcdefgh' write(*,*) palabra write(*,*) palabra (1:1) write(*,*) palabra (2:4) write(*,*) palabra (1) write(*,*) palabra (1:) write(*,*) palabra (:1) abcdefgh a bcd ! Invlida abcdefgh a
b.- Concatenacin ( // ) Ejemplo: PROGRAM concatenar CHARACTER (LEN = *) palabra1, palabra2, palabra3, frase write*, ' Ingrese palabra1, palabra2, palabra3 ' read*, palabra1, palabra2,palabra3 frase = palabra1//palabra2//palabra3 write*, ' frase = ', frase END PROGRAM concatenar
4.6. Precedencia
Operador Precedencia Ejemplo
Mo ndico us. Mayo r ** *o / Mo nad. + o Diadi. + o // >, <, >=, <=... .NOT. .AND. .OR. .EQV. o .NEQV. Didico us. Meno r .inverse. A 10 **4 89 *55 -4 5+4 str1//str2 A>B .NOT. bo o l A .AND. B A .OR. B A .EQV. B X .DOT. Y
1.- Busca el operador de mayor precedencia. 2.- Si aparece ms de una vez, se evalan las expresiones por separado y de izquierda a derecha. 3.- El orden de evaluacin puede alterarse utilizando parntesis.
A B / C A B / C
4.- Se contina con las siguientes subexpresiones. 5.- Se mueve al operador ms prximo y se repite el procedimiento. Ejemplo:
x = a b / 5.0 cd 1. e a.b..NOT. A .OR. B .EQV. C .AND. D .OR. .NOT. E c.- .NOT. A .AND. B .EQV. C .OR. D .AND. E .OR. X .GT. Y .AND. Y .EQ. Z d.- -A * B C / D ** E / F + G **H + 1 J / K
4.8. Errores de Precisin Cada vez que dos nmeros reales se combinan se genera una pequea prdida de exactitud en el resultado. La prdida Catastrfica de exactitud, se origina frecuentemente debido a que dos valores casi iguales se restan.
Ejemplo:
0.123456 0.123446 =1 10
5
mquina
0.123457 0.123445=1.2 10
Declaraciones y construcciones de ejecucin condicional { IF, IF... THEN... ELSE IF... ELSE... END IF } Estas instrucciones son necesarias si una seccin del cdigo necesita ser ejecutado y este depende de que se cumplan una serie de condiciones lgicas. Lazos { DO... END DO } Estructura que permite al cuerpo del lazo ser ejecutado repetidas veces. Construccin para seleccin de mltiples caminos { SELECT CASE... END SELECT CASE } Estructura que se encarga de elejir un camino particular, dependiendo del valor de la expresin evaluada. Declaraciones de salto incondicional { GOTO } Salto directo y sin condiciones a una lnea en particular, muy poderosa.
1. Instruccin IF
Es la forma bsica de ejecucin condicional en la que hay una sola opcin a ser ejecutada. SINTAXIS: IF ( < Expresin lgica > ) < Instruccin a ejecutar > Evala la < Expresin lgica >, si el resultado es verdadero ( .TRUE. ) se ejecuta la < Instruccin a ejecutar > en caso contrario pasa a la prxima lnea. Ejemplos: IF ( x. LT . y ) write (*,*)' x < y ' IF ( x .GT. y ) maximo = x IF ( i .NE. 0 .and. j .NE. 0 ) k = 1. / ( i * j ) IF ( i ./=. 0 .and. j ./=. 0 ) k = 1. / ( i * j )
Prxima lnea
Construccin IF
La construccin IF es ms flexible que la instruccin IF porque el bloque puede tener diferentes alternativas que se excluyan mtuamente. La forma ms simple de la construccin IF es equivalente a la instruccin IF.
IF ( I > 17 ) THEN PRINT (*,*) I > 17 END IF PRINT (*,*) Prxima lnea
IF ( x .GT. y ) THEN PRINT *, I > 17 ELSE IF ( I == 17 ) THEN PRINT *, I == 17 ELSE PRINT *, I < 17 END IF IF ( I > 17 ) THEN I > 17 PRINT *, I > 17 I <= 17 ELSE IF ( I == 17 )THEN I == 17 PRINT *, I == 17 ELSE PRINT *, I < 17
END IF
SINTAXIS: [ < nombre > : ] IF ( < Expresin lgica > ) THEN < BLOQUE THEN > [ELSE IF ( < Expresin lgica > ) THEN [ < nombre > ] < BLOQUE ELSE IF > . . .] [ ELSE [ < nombre > ] < BLOQUE ELSE > ] END IF [ < nombre > ]
Observacin: Tanto ELSE como ELSE IF son opcionales. Y podr haber cualquier cantidad de ramas ELSE IF.
Ejemplo: IF ( x > 3 ) THEN CALL sub1 ELSE IF ( x == 3 ) THEN CALL sub2 ELSE IF ( x == 2 ) THEN CALL sub3 ELSE CALL sub4 END IF
Las instrucciones, END SUBROUTINE, END FUNCTION o END PROGRAM no son permitidas en los bloques pertenecientes a la estructura IF.
Observaciones:
a.Si la declaracin IF tiene nombre, este debe estar presente en la declaracin END IF. No es obligatorio en el ELSE IF o en el ELSE.
b.- Los nombres no deben repetirse en el ningn lugar del cuerpo del programa.
Ejemplo: Escriba un programa que acepte tres longitudes (enteras) y reporte como resultado si estas longitudes definen un tringulo equiltero, isceles o escaleno (3, 2 o ningn lado igual) o si no forman ningn tringulo. Demuestre que el programa funciona para: 1. ( 1, 1, 1 ) 4. ( 3, 4, 5 ) 2. ( 2, 2, 1 ) 5. ( 3, 2, 1 ) 3. ( 1, 1, 0 ) 6. ( 1, 2, 4 ) Sugerencia: Si las tres longitudes forman un tringulo entonces (2 * MAX ( lado1, lado2, lado3 ) < lado1 + lado2 + lado3 )
PROGRAM TRIANGULO IMPLICIT NONE LOGICAL l1, l2 INTEGER lado1, lado2, lado3 PRINT (*,*) Ingrese los tres valores READ(*,*) lado1, lado2, lado3 IF( 2 * MAX(lado1,lado2,lado3) >= lado1 + lado2 + lado3 ) THEN PRINT(*,*) No es un tringulo ELSE l1 = lado1 .EQ. lado2 l2 = lado2 .EQ. lado3 IF ( l1 .AND. l2 ) THEN WRITE(*,*) Es un tringulo equiltero ELSE IF ( l1 .OR. l2 .OR. Lado1 .EQ. Lado3 ) THEN write(*,*) Tringulo Isceles ELSE write(*,*) Tringulo Escaleno END IF END IF END IF END PROGRAM TRIANGULO
6. Lazos con salida condicional ( EXIT ) Un lazo DO comprende un bloque de declaraciones que se ejecutan cclicamente. Al alcanzarse el final del lazo, el bloque se repite nuevamente desde el principio. Observaciones a.- El bloque de declaraciones que componen el lazo est delimitado por las declaraciones DO END DO b.- En cada iteracin del lazo, se evala la condicin y la primera vez que sta se cumple se lleva a cabo la instruccin EXIT y el procesamiento contina a partir de la declaracin siguiente a la frase clave END DO. c.- El bloque del lazo puede contener otros bloques como DO, IF, CASE. Pero estas construcciones deben estar contenidas completamente dentro del lazo. d.- Si la declaracin EXIT no est dentro de un lazo el compilador la reconoce como un error.
Ejemplo:
i=0 DO i=i+1 if ( i .GT. 10 ) EXIT write(*,*) i = , i END DO write(*,*) Lazo terminado. Ahora i =, i
Lazos con ciclos condicionales CYCLE La instruccin CYCLE transfiere el control a una instruccin DO interna (la nica que contiene la instruccin CYCLE) y el lazo comienza una nueva iteracin. Ejemplo: i=0 DO i=i+1 IF( i >= 5 .AND. i <= 8 ) CYCLE IF( i > 10 ) EXIT write(*,*) i =, i END DO write(*,*) Lazo terminado. Ahora i =, i Observaciones: a.- El lazo debe contener una instruccin EXIT para que pueda finalizar. b.- Las declaraciones CYCLE fuera del lazo DO son consideradas por el compilador como un error.
0 1 2 3 4 5 6 7 8 9
salida: DO entrada: DO ... IF(a.GT.b) EXIT salida IF(a.GT.b) CYCLE salida IF(c.GT.d) EXIT entrada IF(c.EQ.a) CYCLE END DO entrada END DO salida ... !linea 9 !linea 0 !linea 8 !linea 1
Lazos DO . . . WHILE El lazo DO ... WHILE se utiliza cuando una condicin debe ser evaluada al principio del lazo DO.
DO WHILE ( a.EQ.b ) BLOQUE WHILE END DO Observaciones: a.- Los valores de a o b deben ser modificados dentro del lazo. b.- Es equivalente a: DO; IF(a.NE.b)EXIT BLOQUE DO END DO c.- EXIT y CYCLE siguen siendo usados en los lazos DO . . . WHILE
Ejemplo:
a = 5; b = 5 DO WHILE (a.EQ.b) i=i+1 IF(i.EQ.3)THEN a=a+1 b=b+2 END IF END DO
DO < variable DO > = < EXPR1 >, < EXPR2 > [ , < EXPR3 > ] Declaraciones de ejecucin END DO Observaciones: a.- El lazo se ejecuta a partir de la < EXPR1 > a la < EXPR2 > en pasos de < EXPR3 >. b.- El nmero de iteraciones se calcula con la siguiente expresin: MAX(INT((<EXPR2> - <EXPR1> + <EXPR3>) / <EXPR3>) , 0) c.- Si la <EXPR3> est ausente el valor de ella se asume como 1. d.- La variable DO <variable DO> no puede ser asignada dentro del lazo.
Seguimiento de variables DO
1.-
2.- Examine y determine el valor de la variable x. a.x=0 DO index1 = 1, 10 DO index2 = index1, 10 IF(index2 > 6)EXIT x=x+1 END DO END DO b.x=0 DO index = 1, 10 IF(x == 10)CYCLE x = x + index END DO