Está en la página 1de 4

Dpto.

Qumica Fsica 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 raz
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 echas 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 Signicado
.LT. Menor que
.LE. Menor o igual que
.EQ. Igual a
.NE. No igual a
.GT. Mayor que
.GE. Mayor o igual que
12 Introducci on a la Programaci on
2.1.1. Introducci on de datos por medio de un chero.
EDITE un chero llamado, por ejemplo, ifdatos.dat y escriba en el dos n umeros separados por varios
espacios en blanco; guarde el chero y ejecute las instrucciones siguientes:
./if1.exe <ifdatos.dat
./if2.exe <ifdatos.dat
./if3.exe <ifdatos.dat
Observa que cuando utilizamos el simbolo < los datos que nos piden los programas y que antes teniamos
que introducir con el teclado ahora los lee del chero ifdatos.dat. Tambi en podemos escribir el resultado en
un chero; ejecute la instrucci on:
./if3.exe <ifdatos.dat >ifsalida.sal
y edite el chero ifsalida.sal para ver el resultado.
Tenga cuidado de no confundir los smbolos < y > pues si se equivoca puede borrar el chero de
datos. Los datos editados en el chero de datos tiene que estar en la misma posici on (separados por espacios
y/o en diferentes lneas) que cuando los tecleamos en la pantalla. No tenemos que incluir comentarios en
estos cheros salvo que el programa fortran lea dichos comentarios. En la sesi on siguiente utilizaremos con
frecuencia la introducci on de datos por medio de un chero.
2.2. GOTO (la instrucci on que debemos evitar)
Observe el programa num1.f, en el introducimos nuevos elementos: la instrucci on GOTO y las etiquetas.
El GOTO (Fig. 11) signica vete a ..., en este caso vete a 10 y el 10 situado delante de la instrucci on
PRINT es una etiqueta.
Observe que las etiquetas tienen que ir siempre entre
las columnas 1 y 5 (ver Fig. 7). Este programa en
realidad es un modo alternativo de hacer un bucle
pero sin la instrucci on DO.
EDITE, COMPILE Y EJECUTE el
programa num1.f.
C num1.f 17 Oct 97
C Escribe numeros enteros del 1 al 100
C =====================================
N = 1
10 PRINT
*
, N
N = N + 1
IF(N .LE. 100) GOTO 10
STOP
END
Figura 11: Instrucci on GOTO.
Dpto. Qumica Fsica Aplicada, UAM 13
2.3. Ejercicio 1: Ecuaci on de segundo grado
Figura 12: Diagrama de ujo para resolver una ecuaci on de segundo grado.
Queremos resolvemos una ecuaci on de segundo grado:
a x
2
+ b x + c = 0
La soluci on (las races) de esta ecuaci on se obtienen resolviendo la ecuaci on siguiente:
x =
b

b
2
4ac
2a
Al resolver esta ecuaci on podemos encontrarnos con algunos problemas. El primer problema se da cuando
a = 0. En este caso no podemos emplear la ecuaci on anterior pues al dividir por cero el programa nos dar a un
error. Evidentemente, en este caso, la ecuaci on a resolver sera
bx + c = 0 ; x =
c
b
Para simplicar hemos supuesto que a y b no valen ambos cero a la vez. El segundo problema es el c alculo
de la raz. Si su argumento (b
2
- 4ac) es negativo la raz no tiene soluci on (dentro de los n umeros reales) y el
programa nos dara otro error. Conviene que nuestro programa compruebe estas posibilidades y evite los errores.
Como vemos la programaci on se va complicando y conviene estructurar los programas antes de escribirlos en
el ordenador. Para ello se utilizan los llamados diagramas de ujo. Un diagrama de ujo (no muy ortodoxo)
para resolver la ecuaci on de segundo grado se muestra en la Fig. 12.
Haga un programa que resuelva la ecuaci on de segundo grado. Ay udese en el diagrama de ujo y
las instrucciones dadas anteriormente. Utilice el programa para calcular las races de las siguientes
ecuaciones particulares.
OPCIONAL: Incluir en el programa el caso en el que la soluci on pueda ser n umeros complejos.
2,2x
2
4,5x + 0,5 = 0 ; Sol : 1,9275 y 0,1179
3,0x
2
+ 3,0x + 0,75 = 0 ; Sol : 0,5
1,0x
2
+ 2,0x + 1,5 = 0 ; Sol : 1 + 0,707i y 1 0,707i
14 Introducci on a la Programaci on
2.4. Problemas Adicionales (opcionales)
[C] Que valor quedar a almacenado en J al nal de las secuencias siguientes? (el tipo de las variables es el
correspondiente por defecto).
a) M = 9 b) DO K = 1, 4
J = 1 J = 0
2 CONTINUE DO N = 1, 5
J = J + 1 J = J + N
M = M / J ENDDO
IF (M.GT.0) GOTO 2 ENDDO
PRINT
*
, J PRINT
*
, J
[P] Un n umero primo es aquel que s olo es divisible por si mismo y por la unidad. Teniendo en cuenta que
si no existe ning un divisor de un n umero N entre 2 y (N)
1/2
entonces N es un n umero primo, escriba un
programa en FORTRAN para calcular y escribir los n umero primos menores de 1000.
[P] La media geom etrica de Nn umeros positivos es la n-esima raz del producto de los n umeros. Por ejemplo,
la media geom etrica de 0.5, 4.0 y 13.5 es (0.5*4.0*13.5)
1/3
= 3.0. Escribe un programa que pregunte
por los n umeros positivos y calcule su media geom etrica. El programa debe leer n umeros hasta que el
usuario introduzca un n umero negativo.
[P] El examen del espectro del atomo hidr ogeno muestra la existencia de series de lineas espectrales, las
frecuencias de las dos primeras series se calculan con las ecuaciones,
Serie de Lyman : f = c R

1
1

1
n

; n = 2, 3, 4, ... (ultravioleta)
Serie de Balmer : f = c R

1
2

1
n

; n = 3, 4, 5, ... (visible)
donde c es la velocidad de la luz (3.010
8
m/s) y R es la constante de Rydberg (1.096775810
7
m
1
).
Escribe un programa FORTRAN para generar las primeras frecuencias de estas dos series.
[P] Escriba un programa FORTRAN para calcular el
m aximo com un divisor (MCD) de dos n umeros
enteros (M y N) utilizando el algoritmo y dia-
grama de ujo de la gura y de acuerdo con las
siguientes etapas:
a) Hacemos que el n umero M sea mayor que N,
es decir si N es mayor que M intercambia-
mos los dos n umeros.
b) Calculamos el resto (R) de dividir M por N.
Si el resto (R) es cero entonces N es el
MCD.
c) Si el resto (R) no es cero damos a M el valor
de N y a N el valor de R y repetimos las
etapas b) y c).

También podría gustarte