Sie sind auf Seite 1von 66

Universidad Centroccidental Lisandro Alvarado Decanato de Ciencias y tecnologa Departamento de Matemtica

Programas Ambiente FORTRAN90 Estructuras de control


Mg.Sc. Eduardo E. Escalante R.

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

II.- Ambiente FORTRAN


1. Desarrollo y evolucin de FORTRAN 1.1 Historia del Lenguaje 1.2 Objetivos 1.3 Evolucin 1.4 Nuevas facilidades del FORTRAN 90 1.5 Nuevas facilidades del FORTRAN 95 1.6 Nuevas facilidades del FORTRAN 2000 2. Elementos de FORTRAN 2.1 Formato Fuente 2.2 Cdigos de Formato libre 2.3 Conjunto de caracteres 2.4 Manejo de espacios en blanco 2.5 Manejo de comentarios 2.6 Nombres 2.7 Estructura del Programa

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

III.- Estructuras de Control


1. Instruccin IF 2. Instruccin IF ... THEN 3. Instruccin IF ... THEN ... ELSE 4. Instruccin IF ... THEN ... ELSEIF 5. Construcciones anidadas de la instruccin IF 6. Instruccin EXIT 7. Instruccin CYCLE 8. Instruccin DO ... WHILE 9. Instruccin DO ... END DO 10. Instruccin SELECT CASE 11. Mezcla de objetos de diferente tipo 12. Procedimientos intrnsecos 13. Instrucciones simples de Entrada / Salida

I.- Programas
Introduccin
1. El computador

2. Hardware / Software

3. Cmo funciona el computador

4. Almacenamiento numrico a) Enteros b) Reales


32767, 32767

0.31459 10

Double Precision ( KIND)

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

Gramtica o sintaxis debe ser muy precisa.

Lenguajes de Programacin de Alto Nivel

I.- Lenguajes de Bajo Nivel


1.- La estructura del lenguaje refleja refleja la instruccin de CPU. 2.- Permiten utilizar de manera muy eficiente la mquina. Aunque son difciles de utilizar. 3.- Cdigos ensambladores.

II.- Lenguajes de Alto Nivel


1.- Portables. 2.- Permiten mayor grado de abstraccin del hardware. 3.- Son ms expresivos, seguros y rpidos de usar. Por ejemplo, FORTRAN90, FORTRAN77, ADA, C, JAVA. 4.- Deben ser compilados.

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

Anlisis del programa

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

donde las races vienen dadas por la expresin I- Algoritmo

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

Como escribir un programa

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

II.- Ambiente FORTRAN


1. Desarrollo y Evolucin de FORTRAN
1.1. - 1.2. - 1.3. Desarrollo, objetivos y evolucin de FORTRAN 1950 FORTRAN =====> Mathematical FORmula TRANslation System

(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

1.4. Caractersticas de FORTRAN 77


1-. Formato fuente fijo, 'Formato Fijo' * Las primeras 5 columnas se reservan para numerar lneas de programacin * La sexta columna se utiliza unicamente para indicar continuacin de linea anterior * Los comentarios solo pueden hacerse marcando la primera columna con un caractr especial * Se recomienda trabajar utilizando letras maysculas * El nombre de las variables debe ser de un mximo de 6 caracteres * No se permiten comentarios entre lneas 2-. No trabaja en paralelo 3-. Carece de almacenamiento dinmico 4-. Carece de portabilidad numrica 5-. Carece de estructuras definidas por el usuario 6-. Carece de recurrencia explcita 7-. Almacenamiento inseguro

1.5. Caractersticas de FORTRAN 90


1-. Formato fuente libre, 'Formato Libre' * No necesita posicionamiento especfico * Mximo 132 columnas por lnea * Ms de una declaracin por lnea * Permite comentarios entre lneas * Acepta maysculas y minsculas * Es virtualmente imposible ubicar mal un caractr * Nombres de variables ms largos (31 caractres) * Permite la utilizacin de puntos ( . ) y underscores ( _ ) 2-. Facilidades de paralelismo 3-. Introduce almacenamiento dinmico 4-. Permite portabilidad numrica ( KIND ) 5-. Permite estructuras definidas por el usuario 6-. Permite recurrencia explcita 7-. Facilidades de empaquetamiento

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.

FORTRAN 77 ===> formato fijo FORTRA 90 ===> formato libre

Fortran 90 soporta el nuevo formato libre: * * * * * * Ejemplo:

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

PRINT *, PROGRAMA& &CION

PRINT *, PROGRAMA& & CION

2.3. Conjunto de Caracteres A-Z az 09 _ , .

Disponibilidad

espacios en blanco , + , - , = , * , / , ( , ) , , , . , ' ' , , : , ; , ! , & , % , < , > , $ , ?

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 )

4.3. Operaciones Numricas Intrnsecas Literales Constantes Aplican Escalares Arreglos

Operadores
Tipos

+ , - , * , / , **

Un operando => mondico Dos operandos ==> didico Ejemplo: a=bc f = -3 * 6 / 5 + z ** x

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

4.4. Operadores de relacin FORTRAN77 >


<
. . . . . . . =.

FORTRAN90
> < >= <= /= ==

.GT. .LT. .GE. .LE. .NE. .EQ.

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 ) )

4.5. Operadores con caracteres

a.- Subcadenas de caracteres (SUBSTRINGS)

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

II.- Estructuras de Control

Programas Estructurados IF FORTRAN66 GOTO

Construcciones Ejecucin Condicional

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 )

IF ( I > 17 ) PRINT (*,*) I > 17 PRINT (*,*) Prxima lnea

IF ( I > 17 ) I > 17 PRINT (*,*) I > 17 I <= 17

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.

2. IF... THEN Ejemplo: IF ( x .GT. y ) THEN maximo = x x=y y=y+7 END IF

IF ( I > 17 ) THEN PRINT (*,*) I > 17 END IF PRINT (*,*) Prxima lnea

IF ( I > 17 ) I > 17 PRINT (*,*) I > 17 I <= 17

END IF Prxima lnea

3. IF... THEN... ELSE

IF ( x .GT. y ) THEN PRINT *, I > 17 ELSE PRINT *, I <= 17 END IF

IF ( I > 17 ) THEN I > 17 PRINT *, I > 17 END IF ELSE PRINT *, I <= 17

4. IF... THEN... ELSE IF

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.

5. Construcciones IF nombradas y anidadas


Cuando aparece una construccin IF en cualquier bloque de otra estructura IF este bloque se considera ANIDADO. Ejemplo: salida: IF ( a < 0 ) THEN PRINT *, a < 0 IF ( c /= 0 ) THEN PRINT *, a< 0 y c /= 0 ELSE PRINT *, a < 0 pero c == 0 END IF ELSE IF ( a > 0 ) THEN salida PRINT *, a > 0 ELSE salida PRINT *, a debe ser = 0 END IF salida

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.

Lazos Anidados y Nombrados

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

Lazos DO con ndices


Estos lazos son utilizados cuando se requiere que alguna instruccin se realice una cantidad fija de veces.

DO i = 1, 100, 1 BLOQUE DO END DO Sintaxis:

DO i = 1, 100 BLOQUE DO 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.

Conteo para lazos


1.- sloopy: DO i = 1, 30, 2 ... END DO sloopy 2.- DO j = 30, 1, -2 ... END DO 3.- DO m = 30, 1, 2 ... END DO 4.- DO n = 1, 30 ... END DO 5.- DO p = 30, 1 ... END DO

Seguimiento de variables DO

1.-

DO i = 4, 45, 17 write(*,*) i en el lazo, i END DO write(*,*) i despus del lazo =, i

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

Das könnte Ihnen auch gefallen