440 likes | 562 Views
AIPQ PROGRAMACIÓ EN FORTRAN. Assignatura AIPQ (Aplicació de la Informàtica als problemes químics): 2/3 nota QF (Fortran) + 1/3 nota QA FORTRAN: 10 setmanes de classe. Professors QF: Elena Rodríguez elena.rodriguezbalada@urv.net Jordi Carbó j.carbo@urv.net. AIPQ PROGRAMACIÓ EN FORTRAN.
E N D
AIPQPROGRAMACIÓ EN FORTRAN • Assignatura AIPQ (Aplicació de la Informàtica als problemes químics): • 2/3 nota QF (Fortran) + 1/3 nota QA • FORTRAN: 10 setmanes de classe Professors QF: Elena Rodríguezelena.rodriguezbalada@urv.net Jordi Carbó j.carbo@urv.net AIPQ - Fortran
AIPQPROGRAMACIÓ EN FORTRAN • Criteris d’AVALUACIÓ: • Imprescindible per aprovar: • Assistència obligatòria a les classes pràctiques • Nota examen + nota classes pràctiques 5 EXAMEN: • sobre 6 (es fa mitja si la nota és 2) • últimdia de classe: 7 abril (de 15 a 16 h) CLASSES PRÀCTIQUES: • sobre 4: activitats diàries + programes finals (s’entreguen l’últim dia de classe) AIPQ - Fortran
AIPQPROGRAMACIÓ EN FORTRAN Fonament teòric - paraules clau + normes de combinació algorismes simples Aplicació - resolució de problemes senzills (programes) Objectius - Conèixer les eines fonamentals d’un llenguatge d’alt nivell. - Saber resoldre de forma ordenada un problema qualsevol. - Entendre la lògica de la programació. AIPQ - Fortran
ALGORISMES Problema ALGORISME (Mètode per resoldre’l) Algorisme – Seqüència d’instruccions ordenades que cal realitzar per a resoldre un problema determinat i obtenir el resultat final buscat. • Característiques • - Són genèrics (serveixen sempre que tinguem el mateix problema) • No cal entendre els principis en què es basa • Qualitats que haurien de tenir • Han de servir pel màxim tipus de problemes • Eficient (menor nombre de passos) • Rapidesa i menys ús de memòria AIPQ - Fortran
LLENGUATGES ALGORÍSMICS • Són aquells llenguatges capaços d’especificar clarament els passos que ha de tenir un algoritme. • Tipus • Llenguatges de programació • Diagrames de flux AIPQ - Fortran
ESTRUCTURES ALGORÍSMIQUES Existeixen 3 estructures algorísmiques bàsiques. Combinant-les adequadament podem obtenir qualsevol algorisme complex. 1. Estructura seqüencial- conjunt d’accions 1, 2, ... N que s’executen en l’ordre en què apareixen en el programa. Acció 1 Acció 2 ... Acció N 2. Estructura alternativa- s’executa una o altra part del programa segons sigui o no certa una condició. Sicondicióllavors acció 1 altrament acció 2 fi-si 3. Estructura repetitiva- es repeteix una acció mentre sigui certa una condició. Mentrecondiciófer acció fi-per-a Per-a i=1 fins-a n fer acció fi-per-a AIPQ - Fortran
MÀQUINES algorísmiques - ORDINADORS Són aquelles màquines que entenen i porten a terme les instruccions escrites en un llenguatge algorísmic. ORDINADOR: És una màquina algorísmica per al processament (transformació) de la informació seguint unes instruccions (PROGRAMA). El llenguatge algorísmic que interpreta és el llenguatge de programació. Ex: Fortran, Basic, Pascal, C,… AIPQ - Fortran
L’ORDINADOR PERSONAL - COMPONENTS Existeixen 2 components: HARDWARE I SOFTWARE HARDWARE: Són els elements físics que són tangibles (circuits, discos, etc) = Suport Electrònic • CPU: Emmagatzema i processa la informació • Perifèrics d’entrada/Sortida: Teclats, pantalles, etc. • Perifèrics d’emmagatzement: Discos, cintes, etc. SOFTWARE: Són els programes que gestionen els elements físics = Suport Lògic • Sistema Operatiu: Conjunt de programes que s’encarreguen de la gestió primària de l’ordinador. • Aplicacions del sistema: Editors, compiladors, etc. AIPQ - Fortran
CODIFICACIÓ DE LA INFORMACIÓ EN ELS ORDINADORS • Representen la informació internament en forma binària (0 i 1). • Bit (Binari digit): Unitat mínima d’informació (o un 0 o un 1). Amb N bits es poden representar 2N nombres diferents. • Byte (B): Unitat mínima de memòria. 1 B = 8 bits • 210 = 1024 bytes= 1 K de memòria • (per comoditat 1 K s’associa a 1000 bytes) • Paraula de memòria: Quantitat d’informació que la màquina pot manipular d’un sol cop: 8, 16, 32 bits, ...segons l’ordinador, generalment potència de dos. AIPQ - Fortran
LLENGUATGES DE PROGRAMACIÓ Altres... Llenguatges d’ALT NIVELL Com és un llenguatge d’ALT NIVELL? ·Conjunt de paraules i regles de combinació intel·ligibles per l’home ·Permet codificar instruccions interpretables per un ordinador FORTRAN Orientat al càlcul matemàtic Molt utilitzat en l’àmbit científic AIPQ - Fortran
FORTRAN • FORTRAN (IBMFORmula TRANslation system) • Es va introduir en l’IBM 704 el 1954. • Primer llenguatge d’alt nivell. • Moltes versions: II(1958), IV(1962-68), 66, 77, 90, 95, 200X. • Primer llenguatge àmpliament acceptat. • Introdueix la facilitat de programació, eficiència dels programes fets a mà i redueix els errors de codificació. • Inventat per enginyers i patrocinat per la companyia IBM. • Llenguatge emprat en l’àmbit científic. AIPQ - Fortran
CODI FONT Llenguatge d’ALT NIVELL Intel.ligible només per l’home traducció COMPILADOR Llenguatge màquina BINARI (1/0). L’únic que entén l’ordinador PROGRAMA EXECUTABLE AIPQ - Fortran
Compilador-Editor VFORT • Windows 95/98 • Buscar el fitxer autoexec.bat • Obrir-lo amb el bloc de notes • Copiar-hi el PATH • Guardar el fitxer autoexec.bat • Windows XP • Inicio • Panel de control • Rendimiento y mantenimiento • Sistema • Opciones avanzadas • Variables de entorno • Afegir el PATH AIPQ - Fortran
En un directori prèviament creat (nom sense espais ni en el directori on es treballa ni en els directoris anteriors. Per tant, no podem treballar aMis documentos!): 1. Crear un nou document amb el programa VFORT 2. Escriure el codi FORTRAN 3.Guardar como 4.Crear un nou projecte al mateix directori on és el codi anterior 5.Obrir el codi.for 6.Compilar(Mirar tipus d’errors, p. 14) 7.Executar (en mode MS-DOS) en el directori Output Si es treballa amb fitxers externs, han d’estar al mateix directori que conté el fitxer executable. AIPQ - Fortran
TIPUS D’ERRORS: • Errors sintàctics: • L’escriptura del programa no està d’acord amb les regles del llenguatge font i per tant el programa no es pot convertir en l’executable. • 2. Errors lògics: • El compilador no els detecta com a errors perquè pertanyen a un defecte de la lògica del disseny de l’algoritme. Condueixen normalment a resultats inadequats o impropis d’un càlcul. AIPQ - Fortran
SINTAXI Normes generals - Un codi FORTRAN és un document de text pla en el qual: 1) Només s’utilitzen les columnes 1 a 72. 2) Si a la columna 1 hi ha una C, el compilador no interpreta aquella línia. 3) Les instruccions només van a les columnes 7 a 72. 4) Si una instrucció llarga no cap a una sola línia, es pot continuar a la línia següent posant un caràcter de continuació a la columna 6 que no sigui un zero o un espai. 5) Les columnes 1 a 5 s’empren per col·locar etiquetes. 6) Els espais en blanc es poden posar on es vulgui ja que el compilador els treu després (excepte en una cadena de caràcters). AIPQ - Fortran
TIPUS D’INSTRUCCIONS(sentències) 1.DECLARACIÓ- indiquen caracterísitiques de les dades o les defineixen. Sempre van davant de les sentències executables. Per exemple, inicialitzar el valor d’una variable o assignar el valor d’un paràmetre. 2.EXECUTABLES- ordenen una acció. ·entrada/sortida de dades ·assignació ·control -condicionals -transferència de control -repetició 3.END - marca el final del programa. També s’hi poden incloure COMENTARIS (els quals no llegeix el compilador). Existeixen instruccions tipus FORMAT. Serveixen per escriure resultats o frases amb una presentació determinada. Cada instrucció en FORTRAN s’escriu en una línia diferent. AIPQ - Fortran
EMMAGATZEMENT DE LA INFORMACIÓ EN ELS ORDINADORS • Segons la informació que es vol guardar: • Nombres ENTERS: Traducció de decimal a binari • Nombres REALS: Parell (mantissa + exponent) i cada un com un nombre enter. Ex: 102.35 +0.10235 · 10+3 • Nombres COMPLEXES: Parell (mantissa + exponent) per la part real i la imaginària. • Caràcters ALFANUMÈRICS: Es guarden caràcter a caràcter, codificats com a enters seguint el conveni ASCII • Variables LÒGIQUES: 1 bit, .TRUE. o .FALSE. (0 o 1) AIPQ - Fortran
CARÀCTERS I ELS SEUS DERIVATS CARÀCTERS: Elements bàsics amb els que es construeixen altres de més elaborats. Alfabètics: lletres Alfanumèrics Numèrics: nombres Especials: =, +, *, ... Amb els caràcters es formen les paraules del llenguatge de programació. OPERADORS ARITMÈTICS: Per indicar les operacions aritmètiques: +, -, *, /, ** AIPQ - Fortran
CONSTANTS • CONSTANT: El seu valor ja no canviarà al llarg del programa. • Poden ser: • NUMÈRIQUES Poden ser: ENTERES, REALS I COMPLEXES • CARÀCTER • LÒGIQUES ENTERES: Sèrie de dígits precedits o no de signe + o - REALS: Han de portar el punt decimal. Molt útil expressar-les com a constant de punt flotant: Ex. 3E5 COMPLEXES CARÀCTER: Conjunt de caràcters LÒGIQUES: Només 2 valors .TRUE. (.T.) / .FALSE. (F.) AIPQ - Fortran
VARIABLES VARIABLE: Nom simbòlic o identificador que designa o fa referència a una dada susceptible de prendre valors diferents al llarg d’un programa. La classe de variable ha de declarar-se a l’inici del programa emprant una sentència de tipus. INTEGER per a les variables de contingut enter. De forma implícita serà entera si comença per I, J, K, L, M, N (I-N) REAL per a les variables reals (A-H,O-Z), COMPLEX per a les variables complexes CHARACTER per a les variables caràcter LOGICAL per a les variables de contingut lògic AIPQ - Fortran
ASSIGNACIÓ Instruccions d’assignació etiqueta_variable = expressió A l’esquerra del signe ‘=‘ només pot anar-hi el nom d’una variable. A la dreta es desenvolupa l’operació. La variable i l’ expressió han de ser del mateix tipus. Si no és així, el valor final de la variable pot ser menys precís per aquesta raó. Exemple: A = 2.89 A és real I = A + 3 I és enter I = 5 Hi ha hagut truncament! AIPQ - Fortran
OPERACIONS Funcions incorporades ABS(X) SQRT(X) EXP(X) LOG(X) LOG10(X) SIN(X) COS(X) Operacions Suma: + Resta: - Producte: * Divisió: / Exponenciació: ** TAN(X) ATAN(X) ASIN(X) ACOS(X) MOD(n,m) MAX(X1,X2,...) MIN(X1,X2,...) Ordre d’avaluació d’expressions numèriques i) Crides a funcions incorporades ii) 1. ** 2. * , / 3. + , - Aquest ordre es pot alterar fent servir parèntesis. AIPQ - Fortran
CANVIS DE VARIABLE Funcions de canvi de tipus int(variable_real) char(variable_entera) ichar(cadena_caràcters) float(variable_entera) converteix un real en enter converteix un número ASCII a caràcter converteix un caràcter a número ASCII converteix un enter en real LECTURA, ESCRIPTURA READ(5,*)var_1,var_2...var_n el ‘5’ significa el teclat, ‘*’ vol dir sense format WRITE(6,*)x1,x2...xn el ‘6’ significa el monitor AIPQ - Fortran
EXERCICI. 1 • Escriure les següents expressions aritmètiques en Fortran: • a·b • ax • b2-4ac • Solució: a) a*b b) a**x c) b**2-4*a*c EXERCICI. 2 • Catalogar les següents expressions en enteres o reals: • 3*im+metro • (2.5+veloc)*3.89 • 0.5*g*t**2 • Solució: a) entera b) real c) real AIPQ - Fortran
CODIS EXEMPLE. 1 Programa variables c program variables c Aquest programa converteix variables d'un tipus a un altre. c character*1 a c write(6,*) write(6,*) ' Introdueix un nombre real entre 0 i 255.' write(6,*) read(5,*) x k=int(x) write(6,11) k,x a=char(k) write(6,22) a,k 11 format(I3,' es la part sencera del nombre real ',F6.2,/) 22 format(A2,' es el caracter en codi ASCII associat al numero',I3,/) end AIPQ - Fortran
INSTRUCCIONS CONDICIONALS: IF Permet executar una part del programa o una altra segons es compleixi o no certa condició. IF (condició) THEN instruccions executables si es compleix la condició ELSE (o ELSE IF (condició) THEN) instruccions executables si no es compleix la condició END IF general IF (condició) THEN instruccions executables si es compleix la condició END IF reduïda IF (condició) instrucció executable si es compleix la condició super-reduïda AIPQ - Fortran
Definició de condicions en la instrucció IF Operadors de comparació: ”operands” que relacionen dues expressions. NOTACIÓSIGNIFICAT .GT. > .GE.≥ .EQ. = .NE. ≠ .LE. ≤ .LT. < Exemples: (i.GE.4) (a.EQ.’YES’) ((z-4.0).LT.(z**2)) Combinació de condicions: Es poden combinar expressions lògiques amb els operadors Booleans.not., .and. i .or. . Exemples: ((a.EQ.’YES’).OR.(a.EQ.’SI’)) ((sinus.LE.1).AND.(sinus.GE.-1)) AIPQ - Fortran
TRANSFERÈNCIA DE CONTROL GOTO etiqueta envia el control del programa a la línia marcada amb etiqueta. Aquesta nova línia pot ser posterior o anterior a la del GOTO. Es recomana no abusar d’aquesta instrucció. STOP atura l’execució d’un programa. Exemple: 1 READ(5,*) A, B IF((A.EQ.0).AND.(B.EQ.0)) STOP C=A*B WRITE(6,*) C GOTO1 END AIPQ - Fortran
EXECUCIÓ REPETITIVA: DO Existeixen tres tipus d’estructures de DO - END DO en Fortran Sense condició: es repeteixen infinitament les instruccions executables. DO instruccions executables END DO Amb condició: es repeteixen les instruccions executables mentres es compleix la condició. DO WHILE (condició) instruccions executables END DO Amb comptador: es repeteixen les instruccions executables el número de vegades indicat. DO index=valor(i),valor(f),increment instruccions executables END DO Està prohibit canviar l’índex del bucle a l’interior d’aquest. AIPQ - Fortran
Amb condició: Sense condició: K=0 DO WHILE (K.LE.5) K=K+1 SUM=SUM+K END DO WRITE(6,*) SUM END i=0 DO i=i+1 WRITE(6,*) i if(i.EQ.1000) STOP END DO END comptador acumulador Amb comptador: Aquest programa escriu el sumatori de 1 a 5. DO I=1,340 WRITE(6,*) ‘FORTRAN’ END DO END EXECUCIÓ REPETITIVA: DO Existeixen tres tipus d’estructures de DO - END DO en Fortran comptador Per evitar que les instruccions es repeteixin infinitament, és necessari afegir alguna condició “de sortida” en l’interior del DO. Aquest programa escriu els números de l’1 al 1000. S’obtindria el mateix resultat amb “I=341,680”, amb “I=1,680,2” o amb “I=340,1,-1”, ja que no s’usa el valor de “I”, tot i que el programa el coneix. Aquest programa escriu 340 vegades la paraula “FORTRAN”. AIPQ - Fortran
VARIABLES INDEXADES A aquest grup de variables pertanyen els vectors i les matrius. · Al principi del programa s’han de declarar les variables que seran d’aquest tipus. Es pot fer usant la instrucció “DIMENSION” o en la mateixa declaració de la variable. DIMENSIONnom_vector (índex_mínim:índex_màxim) DIMENSIONnom_matriu (índex_mínim files:índex_màxim files, índex mínim columnes:índex màxim columnes) REAL*8nom_vector (índex_mínim:índex_màxim) · També es poden declarar només els índexos màxims i obviar-ne els mínims. · Poden ser de tipus real, integer o character. · Els índex de les files i columnes s’han de posar explícitament o en funció d’un paràmetre prèviament declarat. AIPQ - Fortran
VARIABLES INDEXADES Exemple de declaració: DIMENSION VEC1(20),VEC2(30),MAT1(4,4),MAT2(6,2) Com treballar amb variables indexades do i=1,3 do j=1,3 B(i,j)=A(j,i) end do end do DO implícit (per lectura i escriptura de vectors i matrius) ex 1: WRITE(6,*) (VEC(I), I=1,N) escriu el vector en una mateixa línia ex 2:do i=1,N WRITE(6,*) VEC(I) end doescriu el vector en una columna (N línies) AIPQ - Fortran
LECTURA I ESCRIPTURA AMB FORMAT S’utilitza per llegir i/o escriure resultats amb un ‘aspecte’ determinat. READ(5,etiqueta) llista variables WRITE(6,etiqueta2) llista variables (...) etiqueta FORMAT(llista especificacions) etiqueta2 FORMAT(llista especificacions 2) 1. Onetiquetaés un número entre 1 i 99999. No es pot posar una instrucció FORMAT sense etiqueta. 2. Pot haver-hi tantes etiquetes com es desitgi en un programa. 3. No importa on es col·loqui la instrucció FORMATdins del programa, no és una sentència executable. En la llista d’especificacions: 1. Les cadenes de caràcters s’escriuen entre apòstrofs: ‘cadena car’. 2. Les diferents instruccions se separen per comes (,). 3. La llista d’especificacions pot ocupar diverses línies de codi. AIPQ - Fortran
Models d’edició de variables en la instrucció Format In per a enters, on n és la longitud total del camp. Fn.d per a reals i reals de doble precisió. d és el nombre de decimals. En.d per a reals (notació científica). Dn.d per a reals de doble precisió (notació científica). A o An per a cadenes de caràcters. mIn, mFn.d, mAn, ...quan hi ha m variables que segueixen el model d’edició “In”, “Fn.d”, “An”, ... respectivament. (Exemple: 2A4 indica dues variables de caracters de longitut de camp 4.) mX per posar espais en blanc, on m indica el nombre d’espais. / per a què el cursor salti de línia. $ per a què el cursor es mantingui en la mateixa línia. AIPQ - Fortran
SUBPROGRAMES Són molt emprats per realitzar la mateixa tasca en diverses ocasions. La clau és: - escriure un sol cop el codi corresponent a aquella/es operació/ns. - cridar aquell subprograma quan convingui. SUBROUTINEnom (llista_paràmetres) instruccions de declaració instruccions executables RETURN END FUNCTIONnom (llista_paràmetres) instruccions de declaració instruccions executables RETURN END La instrucció de crida d’un subprograma és call per les subrutines o simplement anomenar la funció en el cas de les últimes. AIPQ - Fortran
EXEMPLES FUNCTION I SUBROUTINE program funcio1 real*8 a,r c c aquest programa calcula l’àrea d’un c cercle Area=PI*r**2 c read(5;*) r a=area(r) write(6,*) a end function area(x) real*8 x, area, pi parameter (pi=3.14159) area=pi*x**2 return end program sub real*8 a,r c c aquest programa calcula larea d’un c cercle Area=PI*r**2 c read(5;*) r call area(a, r) write(6,*) a end subroutine area(x, y) real*8 x, y, pi parameter (pi=3.14159) x=pi*y**2 return end AIPQ - Fortran
OPEN / CLOSE L’entrada i/o la sortida de dades es fa a través de arxiu/s. Amb cadascun dels arxius utilitzats en el programa: 1) Cal “obrir-lo” amb la comanda OPEN(etiqueta,file=‘nom_arxiu’), on etiquetaés un nombre diferent de 5 i 6. 2) En les instruccions d’escriptura i/o lectura en l’arxiu, s’empra l’etiqueta de l’arxiu (assignada en l’OPEN) enlloc del 5 i/o el 6 usuals. 3) Cal “tancar-lo” amb la comanda CLOSE(etiqueta). OPEN(4,FILE=‘ENTRADA.TXT’) READ(4,*) X1, X2, X3 Y1=X1*2 Y2=X2*2 Y3=X3*2 OPEN(44,FILE=‘SORTIDA.TXT’) WRITE(44,*) Y1, Y2, Y3 CLOSE(4) CLOSE(44) END Exemple: AIPQ - Fortran
CODIS EXEMPLE. 2 Programa funcions i operacions c program funcions real*8 x, y, z, r, s, t write(6,50) read(5,*) x y=log(x) z=exp(x) r=sin(x) c L'argument de la funcio sinus esta en radians. s=sqrt(x) t=(z+r)/s-y c Aixo no es (z+r)/(s-y). write(6,100) x, y, z, r, s, t 50 format(/,3x,'Escriu un nombre real: ', $) 100 format(/,3x,'Logaritme neperia de', F10.5,'= ', F10.5, / & 3x,'Exponencial = ', F10.5, / & 3x,'Sinus = ', F10.5, / & 3x,'Arrel quadrada = ', F10.5, / & 3x,'(z+r)/s-y = ', F10.5, //), end AIPQ - Fortran
CODIS EXEMPLE. 3 Programa variables i expressions logiques c234567 integer*4 i,j logical*1 k c k es una variable logica write(6,20) read(5,*) i, j k=i.le.j write(6,30) write(6,*) k write(6,*) 20 format( /, 3x, 'Introdueix dos nombres enters, separats per un esp &ai en blanc.',/) 30 format( /,'El resultat de l''expressio logica de comparacio dels n &ombres es ',$) end AIPQ - Fortran
CODIS EXEMPLE. 4 Exemple sentències IF i DO c234567 c Quantes vegades escriu la paraula 'quimica' aquest codi? do 10 m=1, 5 do 20 j=m, 6 if ((m.gt.3).or.(j.lt.m)) write(6,*) 'quimica' 20 continue 10 continue end AIPQ - Fortran
CODIS EXEMPLE. 5 Programa triangle c234567 c Exemple amb IF ... ELSE (IF)... ENDIF. integer*4 a,b,c write(6,*) ' Escriu tres nombres enters separats per espais.' read(5,*) a, b, c if ((abs(a-b).lt.c).and.(c.lt.(a+b))) then write(6,11) a,b,c if (a.eq.b) then write(6,*)' Es un triangle isosceles.' if (b.eq.c) then write(6,*)' i tambe equilater.' end if else if (a.eq.c.or.b.eq.c) then write(6,*)' Es un triangle isosceles.' else write(6,*)' Es un triangle escale.' write(6,*) end if else write(6,*)' Els segments no formen un triangle.' end if 11 format(' Existeix un triangle de costats',I3,',',I3,',',I3,/) stop end AIPQ - Fortran
CODIS EXEMPLE. 6 Treball amb matrius c234567 c Aquest codi llegeix del teclat una matriu nxm. REAL*4 A DIMENSION A(50,50) write(6,*)' Introdueix el nombre de files de la matriu A.' read(5,*) n write(6,*)' Introdueix el nombre de columnes de la matriu A.' read(5,*) m write(6,*) 'Introdueix els elements de la matriu A per files separa &ts per espais. En acabar una linia, premer intro.' do i=1,n read (5,*) (A(i,j), j=1,m) end do end AIPQ - Fortran
CODIS EXEMPLE. 7 Entrada/Sortida. OPEN, CLOSE c234567 c Gestio de fitxers. implicit double precision (A-H, O-Z) DIMENSION A(50,50), B(50,50) c Llegim una matriu A (3x3) d'un fitxer extern anomenat mat.in. open (2, file='mat.in') do i=1,3 read(2,*) (A(i,j), j=1,3) end do close (2) c Fem la trasposta de la matriu A. do i=1,3 do j=1,3 B(i,j)=A(j,i) end do end do c Escrivim la nova matriu B en un fitxer anomenat mat.out. open (3, file='mat.out') do i=1,3 write(3,*) (B(i,j), j=1,3) end do close (3) stop end AIPQ - Fortran