fortran 77 y cómputo científico

9
FORTRAN 77 y Cómputo Científico Guilmer González Facultad de Ciencias – UNAM Programación Avanzada para Ingenieros Petroleros asilados en la Facultad de Ciencias 2007-2

Upload: rafe

Post on 10-Jan-2016

44 views

Category:

Documents


3 download

DESCRIPTION

FORTRAN 77 y Cómputo Científico. Guilmer González Facultad de Ciencias – UNAM Programación Avanzada para Ingenieros Petroleros asilados en la Facultad de Ciencias 2007-2. Algunos operadores, sentencias, conceptos de uso común (I). Constante : Valor que no cambia durante el programa. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: FORTRAN 77 y Cómputo Científico

FORTRAN 77 y Cómputo Científico

Guilmer GonzálezFacultad de Ciencias – UNAM

Programación Avanzada para Ingenieros Petroleros asilados en la Facultad de Ciencias 2007-2

Page 2: FORTRAN 77 y Cómputo Científico

Algunos operadores, sentencias, conceptos de uso común (I)

Constante: Valor que no cambia durante el programa.Variable: Valor que puede modificarse.

Constante y variables ENTERAS:I,J,K,L,M,N : enteras por defecto Declaraciones: integer, integer*2, integer*4Constante y variables REALESDeclaraciones: real, real*4,real*8, ¿ real*16 ?(programa int_div)Constante y variables LOGICAS (solo 2 valores).TRUE. Verdadero.FALSE. Falso

OPERADORES LOGICOS

DE RELACION ESPECÌFICOS

.EQ.

.NE.

.LT.

.LE.

.GT.

.GE.

Igual a

desigual

Menor que

Menor o igual que

Mayor que

Mayor o igual que

.NOT.

.AND.

.OR.

.XOR.

negación

y

o

o exclusivo

Page 3: FORTRAN 77 y Cómputo Científico

Constantes y variables alfanuméricas

Cad=‘Esto es una cadena de caracteres’

Character*30 caddeclaración

Cad(1:1)=‘E’

Operador más usual con cadenas: //

Sentencia IMPLICIT

Implicit tipo_de_variable lista_de_letras

Implicit real*8 (A-H,O-Z)

Implicit NONE

Page 4: FORTRAN 77 y Cómputo Científico

Funciones en FORTRAN

1) Intrínsecas: las que trae el compilador. REAL();AIMAG(),SIN(),COS(),…2)De usuario: las define el usuario y=f(x)

Entrada-Salida E/S1. Open2. READ, WRITE y FORMAT3. CLOSE

OPEN(UNIT=unit,FILE=nombre,STATUS=

‘NEW’‘OLD’

‘UNKNOWN’

CLOSE(unit)

READ(UNIT=unit,FORMAT=formato) listaWRITE(UNIT=unit,FORMAT=formato)lista

etiqueta FORMAT(lista_de_formato)

Page 5: FORTRAN 77 y Cómputo Científico

Sentencias de control en FORTRAN

• IF• GO TO• DO - ENDDO

IF(condición) sentencia

IF(condición) THEN bloqueENDIF

IF(condición) THEN primer bloqueELSE segundo bloqueENDIF

Page 6: FORTRAN 77 y Cómputo Científico

GO TO etiquetaTransfiere control del programa.!! Evitar su uso !!

Bloque ENDDO

DO ivar=n1,n2,n3 bloqueENDDO

Alternativa

DO etiqueta ivar=n1,n2,n3 bloqueEtiqueta CONTINUE

DO

ENDDO

DO

ENDDO

DO

ENDDO

DO

ENDDO

CorrectaIncorrecta

Page 7: FORTRAN 77 y Cómputo Científico

CC Programa que realiza una tabla de la funcionC sin(x) entre dos valores de x dados por el C usuario.CC-----------------------C--- Declaracion de variables implicit real*8 (a-h,o-z) character*20 file_out c c--Entrada de datos write(6,*)' limite inferior:' read(5,*)xinf write(6,*)' limite superior:' read(5,*)xsup write(6,*)' numero de intervalos:' read(5,*)inter write(6,*)' nombre del archivo:' read(5,'(a20)')file_out

C---Realizacion de la tabla open(unit=30,file=file_out,status='new') write(30,50) xpaS=(xsup-xmin)/dfloat(inter) do i=1,inter+1 x=xinf+dble(i-1)+xpas y=dsin(x) write(30,100)X,Y enddo

50 FORMAT(8X,' x ',10X,' sin(x) '/) 100 FORMAT(2(2X,D13.5))

close(30) stop end

Page 8: FORTRAN 77 y Cómputo Científico

Algoritmo: Sistema secuencial para resolver un problema

Ejemplo: Diagrama de flujo para resolver una ecuación de segundo grado

INICIO

Entrara b c

Si No0dis

a

disbx

21

a

disbx

22

)2(

)()(1 acmplx

discmplxbcmplxz

)2(

)()(2 acmplx

discmplxbcmplxz

acbdis 42

Escribir Escribir1x 2x

FINAL

Page 9: FORTRAN 77 y Cómputo Científico

CC Programa para el calculo de las raices de una ecuacion de segundoC grado CC-------------------------------------------------------------------------------- complex*8 z1,z2 tol=1.0d-5 write(6,*) ‘ De el coeficiente cuadratico’ read(5,*)a if(abs(a).lt.tol)then write(6,*) ‘ El coeficiente debe ser mayor’ stop endif write(6,*) ‘ De el coeficiente lineal’ read(5,*)b write(6,*) ‘ De el coeficiente inependiente’ read(5,*)c

open(unit=12,file=‘resul.res’,status=‘new’)

C Calculo y escritura de las fraices dis=b*b-4.*a*c if(dis.ge.0.) then x1=(-1.0*b + sqrt(dis))/(2.0*a) x2=(-1.0*b - sqrt(dis))/(2.0*a) write(12,100) ‘ primera raiz = ‘,x1 write(12,100) ‘ segunda raiz = ‘,x2 else z1=(cmplx(-1.0*b)+sqrt(cmplx(dis)))/(cmplx(2.0*a)) z2=(cmplx(-1.0*b)-sqrt(cmplx(dis)))/(cmplx(2.0*a)) write(12,100) ‘ primera raiz = ‘,z1 write(12,100) ‘ segunda raiz = ‘,z2 endif

100 format(2x,a20,2x,e15.8)200 format(2x,a20,2x,’(‘,e15.8,’.’e15.9,’)’) close(12) stop end