2. sesion· segunda - uam.es · escribe un programa que pregunte por los numeros· positivos y...

4
Dpto. Qu´ ımica F´ ısica Aplicada, UAM 11 2. SESI ´ ON SEGUNDA 2.1. Decisiones (instrucci ´ on IF) En determinadas ocasiones un programa debe determinar por s´ ı mismo si realiza o no un conjunto de ins- trucciones concretas. Para ello el FORTRAN utiliza la instrucci´ on IF que podemos traducir como el ”si” con- dicional. Si una determinada condici ´ on es cierta, entonces, ejecuta la instrucci ´ on (o conjunto de instrucciones). Si no (else) es cierta, entonces hace otra cosa. En la Fig. 10 se muestran tres formas de Figura 10: Tres posibilidades de la instrucci´ on IF. utilizar esta instrucci ´ on. La expresi ´ on l ´ ogica o condici´ on es una comparaci´ on de cuyo resul- tado determina, el programa, si realiza o no las instrucciones correspondientes. En el progra- ma if1.f se utiliza la primera forma de la ins- trucci´ on IF para evitar un error al hacer la ra´ ız cuadrada de un n´ umero negativo, estudie este programa (ver Tabla 2) y despu´ es comp´ arelo con los programas if2.f e if3.f, que emplean la segunda y tercera forma de la instrucci´ on IF, respectivamente. EDITE, COMPILE y EJECUTE los tres programas. Cuando ejecute los programas, el ordenador se quedar´ a esperando a que introduzca los valores de A y B para leerlos, ya que es esta la primera instrucci ´ on de los tres programas. Teclee ambos valores separados por uno o varios espacios en blancos (barra espaciadora) y pulso intro. No use las flechas de los cursores para avanzar y/o retroceder. C if1.f 17 Oct 97 C if2.f 17 Oct 97 C if3.f 17 Oct 97 C Instruccion IF C Instruccion IF C Instruccion IF C====================== C ========================= C ======================== READ * , A, B READ * , A, B READ * , A, B C = A - B C = A - B C = A - B IF(C.LE.0.0) C = -1.0 * C IF(C.LT.0.0) THEN IF(C.GT.0.0) THEN D = SQRT(C) C = -1.0 * C D = SQRT(C) PRINT * , A, B, C, D PRINT * , N. complejo’ PRINT * , A, B, C, D STOP ENDIF ELSE END D = SQRT(C) D = SQRT(-1.0 * C) PRINT * , A, B, C, D PRINT * , N. complejo’ STOP PRINT * , A, B, C, D,’i’ END ENDIF STOP END Cuadro 2: Operadores (incluidos lo puntos) utilizados en las comparaciones. Operador Significado .LT. Menor que .LE. Menor o igual que .EQ. Igual a .NE. No igual a .GT. Mayor que .GE. Mayor o igual que

Upload: dodan

Post on 19-Oct-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2. SESION· SEGUNDA - uam.es · Escribe un programa que pregunte por los numeros· positivos y calcule su media geom·etrica. ... (M y N) utilizando el algoritmo y dia-

Dpto. Quımica Fısica Aplicada, UAM 11

2. SESION SEGUNDA

2.1. Decisiones (instruccion IF)

En determinadas ocasiones un programa debe determinar por sı mismo si realiza o no un conjunto de ins-trucciones concretas. Para ello el FORTRAN utiliza la instruccion IF que podemos traducir como el ”si” con-dicional. Si una determinada condicion es cierta, entonces, ejecuta la instruccion (o conjunto de instrucciones).Si no (else) es cierta, entonces hace otra cosa.

En la Fig. 10 se muestran tres formas de

Figura 10: Tres posibilidades de la instruccion IF.

utilizar esta instruccion. La expresion logica ocondicion es una comparacion de cuyo resul-tado determina, el programa, si realiza o no lasinstrucciones correspondientes. En el progra-ma if1.f se utiliza la primera forma de la ins-truccion IF para evitar un error al hacer la raızcuadrada de un numero negativo, estudie esteprograma (ver Tabla 2) y despues comparelocon los programas if2.f e if3.f, que emplean lasegunda y tercera forma de la instruccion IF,respectivamente.

EDITE, COMPILE y EJECUTE los tres programas. Cuando ejecute los programas, el ordenador sequedara esperando a que introduzca los valores de A y B para leerlos, ya que es esta la primera instruccion delos tres programas. Teclee ambos valores separados por uno o varios espacios en blancos (barra espaciadora)y pulso intro. No use las flechas de los cursores para avanzar y/o retroceder.

C if1.f 17 Oct 97 C if2.f 17 Oct 97 C if3.f 17 Oct 97C Instruccion IF C Instruccion IF C Instruccion IFC====================== C ========================= C ========================

READ *, A, B READ *, A, B READ *, A, BC = A - B C = A - B C = A - BIF(C.LE.0.0) C = -1.0 *C IF(C.LT.0.0) THEN IF(C.GT.0.0) THEND = SQRT(C) C = -1.0 *C D = SQRT(C)PRINT *, A, B, C, D PRINT *, ’ N. complejo’ PRINT *, A, B, C, DSTOP ENDIF ELSEEND D = SQRT(C) D = SQRT(-1.0 *C)

PRINT *, A, B, C, D PRINT *, ’ N. complejo’STOP PRINT *, A, B, C, D,’i’END ENDIF

STOPEND

Cuadro 2: Operadores (incluidos lo puntos) utilizados en las comparaciones.Operador Significado.LT. Menor que.LE. Menor o igual que.EQ. Igual a.NE. No igual a.GT. Mayor que.GE. Mayor o igual que

Page 2: 2. SESION· SEGUNDA - uam.es · Escribe un programa que pregunte por los numeros· positivos y calcule su media geom·etrica. ... (M y N) utilizando el algoritmo y dia-

12 Introduccion a la Programacion

2.1.1. Introduccion de datos por medio de un fichero.

EDITE un fichero llamado, por ejemplo, ”ifdatos.dat” y escriba en el dos numeros separados por variosespacios en blanco; guarde el fichero y ejecute las instrucciones siguientes:

./if1.exe <ifdatos.dat

./if2.exe <ifdatos.dat

./if3.exe <ifdatos.datObserva que cuando utilizamos el simbolo ”<” los datos que nos piden los programas y que antes teniamosque introducir con el teclado ahora los lee del fichero ”ifdatos.dat”. Tambien podemos escribir el resultado enun fichero; ejecute la instruccion:

./if3.exe <ifdatos.dat >ifsalida.saly edite el fichero ”ifsalida.sal” para ver el resultado.

Tenga cuidado de no confundir los sımbolos ”<” y ”>” pues si se equivoca puede borrar el fichero dedatos. Los datos editados en el fichero de datos tiene que estar en la misma posicion (separados por espaciosy/o en diferentes lıneas) que cuando los tecleamos en la pantalla. No tenemos que incluir comentarios enestos ficheros salvo que el programa fortran lea dichos comentarios. En la sesion siguiente utilizaremos confrecuencia la introduccion de datos por medio de un fichero.

2.2. GOTO (la instruccion que debemos evitar)

Observe el programa num1.f, en el introducimos nuevos elementos: la instruccion GOTO y las etiquetas.El GOTO (Fig. 11) significa ”vete a ...”, en este caso ”vete a 10” y el ”10” situado delante de la instruccionPRINT es una etiqueta.Observe que las etiquetas tienen que ir siempre entrelas columnas 1 y 5 (ver Fig. 7). Este programa enrealidad es un modo alternativo de hacer un buclepero sin la instruccion DO.

EDITE, COMPILE Y EJECUTE elprograma num1.f.

C num1.f 17 Oct 97C Escribe numeros enteros del 1 al 100C =====================================

N = 110 PRINT *, N

N = N + 1IF(N .LE. 100) GOTO 10STOPEND

Figura 11: Instruccion GOTO.

Page 3: 2. SESION· SEGUNDA - uam.es · Escribe un programa que pregunte por los numeros· positivos y calcule su media geom·etrica. ... (M y N) utilizando el algoritmo y dia-

Dpto. Quımica Fısica Aplicada, UAM 13

2.3. Ejercicio 1: Ecuacion de segundo grado

Figura 12: Diagrama de flujo para resolver una ecuacion de segundo grado.

Queremos resolvemos una ecuacion de segundo grado:

a x2 + b x + c = 0

La solucion (las raıces) de esta ecuacion se obtienen resolviendo la ecuacion siguiente:

x =−b ±

√b2 − 4ac

2a

Al resolver esta ecuacion podemos encontrarnos con algunos problemas. El primer problema se da cuandoa = 0. En este caso no podemos emplear la ecuacion anterior pues al dividir por cero el programa nos dara unerror. Evidentemente, en este caso, la ecuacion a resolver serıa

bx + c = 0 ; x =−c

b

Para simplificar hemos supuesto que a y b no valen ambos cero a la vez. El segundo problema es el calculode la raız. Si su argumento (b2 - 4ac) es negativo la raız no tiene solucion (dentro de los numeros reales) y elprograma nos darıa otro error. Conviene que nuestro programa compruebe estas posibilidades y evite los errores.Como vemos la programacion se va complicando y conviene estructurar los programas antes de escribirlos enel ordenador. Para ello se utilizan los llamados diagramas de flujo. Un diagrama de flujo (no muy ortodoxo)para resolver la ecuacion de segundo grado se muestra en la Fig. 12.

Haga un programa que resuelva la ecuacion de segundo grado. Ayudese en el diagrama de flujo ylas instrucciones dadas anteriormente. Utilice el programa para calcular las raıces de las siguientesecuaciones particulares.OPCIONAL: Incluir en el programa el caso en el que la solucion pueda ser numeros complejos.

2,2x2 − 4,5x + 0,5 = 0 ; Sol : 1,9275 y 0,1179

3,0x2 + 3,0x + 0,75 = 0 ; Sol : −0,5

1,0x2 + 2,0x + 1,5 = 0 ; Sol : −1 + 0,707i y − 1 − 0,707i

Page 4: 2. SESION· SEGUNDA - uam.es · Escribe un programa que pregunte por los numeros· positivos y calcule su media geom·etrica. ... (M y N) utilizando el algoritmo y dia-

14 Introduccion a la Programacion

2.4. Problemas Adicionales (opcionales)

[C] ¿Que valor quedara almacenado en J al final de las secuencias siguientes? (el tipo de las variables es elcorrespondiente por defecto).

a) M = 9 b) DO K = 1, 4J = 1 J = 0

2 CONTINUE DO N = 1, 5J = J + 1 J = J + NM = M / J ENDDO

IF (M.GT.0) GOTO 2 ENDDOPRINT *, J PRINT *, J

[P] Un numero primo es aquel que solo es divisible por si mismo y por la unidad. Teniendo en cuenta quesi no existe ningun divisor de un numero N entre 2 y (N)1/2 entonces N es un numero primo, escriba unprograma en FORTRAN para calcular y escribir los numero primos menores de 1000.

[P] La media geometrica de N numeros positivos es la n-esima raız del producto de los numeros. Por ejemplo,la media geometrica de 0.5, 4.0 y 13.5 es (0.5*4.0*13.5)1/3 = 3.0. Escribe un programa que preguntepor los numeros positivos y calcule su media geometrica. El programa debe leer numeros hasta que elusuario introduzca un numero negativo.

[P] El examen del espectro del atomo hidrogeno muestra la existencia de series de lineas espectrales, lasfrecuencias de las dos primeras series se calculan con las ecuaciones,

Serie de Lyman : f = c · R ·(

(

1

1

)2 −(

1

n

)2)

; n = 2, 3, 4, ... (ultravioleta)

Serie de Balmer : f = c · R ·(

(

1

2

)2 −(

1

n

)2)

; n = 3, 4, 5, ... (visible)

donde c es la velocidad de la luz (3.0·108 m/s) y R es la constante de Rydberg (1.0967758·107 m−1).Escribe un programa FORTRAN para generar las primeras frecuencias de estas dos series.

[P] Escriba un programa FORTRAN para calcular elmaximo comun divisor (MCD) de dos numerosenteros (M y N) utilizando el algoritmo y dia-grama de flujo de la figura y de acuerdo con lassiguientes etapas:

a) Hacemos que el numero M sea mayor que N,es decir si N es mayor que M intercambia-mos los dos numeros.

b) Calculamos el resto (R) de dividir M por N.Si el resto (R) es cero entonces N es elMCD.

c) Si el resto (R) no es cero damos a M el valorde N y a N el valor de R y repetimos lasetapas b) y c).