Está en la página 1de 10

LENGUAJE DE PROGRAMACION FORTRAN 90 PARA WINDOWS

ESTRUCTURAS DE CONDICIN-SELECCIN Y REPETICIN

1.- INTRODUCCIN:
Hasta ahora, todas las sentencias que forman los programas se ejecutan. Sin embargo, hay ocasiones en que un
determinado conjunto de sentencias se deben ejecutar slo si una determinada condicin es cierta y sino no. Los valores
lgicos: constantes, variables y expresiones lgicas, permiten controlar la ejecucin de las sentencias de un programa.
Hay dos tipos de expresiones lgicas: las expresiones lgicas relacionales y las expresiones lgicas condicionales.
2.- EXPRESIONES LGICAS RELACIONALES:
Las expresiones lgicas relacionales comparan los valores de dos expresiones aritmticas o dos expresiones de tipo
carcter.
La evaluacin de una expresin lgica relacional produce un resultado de tipo lgico: .TRUE. o .FALSE.
La sintaxis de una expresin lgica de tipo relacional es: operando1 OPERADOR_LGICO_RELACIONAL operando2
Donde operando es una expresin, variable o constante aritmtica o de tipo carcter.
El OPERADOR_LGICO_RELACIONAL puede ser:
OPERADOR LGICO RELACIONAL
F77
F90/95 SIGNIFICADO
.EQ.
.NE.
.LT.
.LE.
.GT.
.GE.

==
/=
<
<=
>
>=

IGUAL
DISTINTO
MENOR QUE
MENOR O IGUAL QUE
MAYOR QUE
MAYOR O IGUAL QUE

3.-EJEMPLOS DE EXPRESIONES LOGIAS RELACIONALES


Sea la sentencia de declaracin de tipos: INTEGER :: i=3, j=5

OPERACIN

RESULTADO

3<=i
.TRUE.
j**2-1>=0
.TRUE.
I == j
.FALSE.
I /=10
.TRUE.
ANA<PEPE
.TRUE.
La ltima expresin lgica relacional ANA< PEPE es cierta porque los caracteres se evalan en orden alfabtico.
Son invlidas las siguientes expresiones lgicas relacionales:
<=5
Falta operando1 al lado izquierdo.
8.44/='XYZ'
No se pueden comparar reales con caracteres.
i=3
No es una expresin lgica relacional, sino una sentencia de asignacin! No confundir el operador
lgico relacional de
igualdad con el operador de asignacin.
4.-EXPRESIONES LGICAS COMBINACIONALES
La evaluacin de una expresin lgica combinacional produce un resultado de tipo lgico: .TRUE. o .FALSE.
La sintaxis de una expresin lgica de tipo combinacional es: operando1 OPERADOR_LGICO_COMBINACIONAL
operando2
operando es una expresin relacional, variable lgica o constante lgica. Operando1 no existe cuando el operador lgico
usado es unario.
EL OPERADOR_LGICO_COMBINACIONAL puede ser:
OPERADOR
TIPO
SIGNIFICADO
.NOT.
.AND.
.OR.
.EQV.
SON .FALSE.
.NEQV.

UNARIO
BINARIO
BINARIO
BINARIO

ES
ES
ES
ES

LO OPUESTO A OPERANDO2
.TRUE. SI Y SLO SI OPERANDO1 Y OPERANDO2 SON .TRUE.
.TRUE. SI UNO DE LOS DOS OPERANDOS O LOS DOS ES .TRUE.
.TRUE. SI Y SLO SI LOS DOS OPERANDOS SON .TRUE. O LOS DOS OPERANDOS

BINARIO

ES .TRUE. SI Y SLO SI LOS DOS

OPERANDOS TIENEN VALORES DISTINTOS

Sean operando1 y operando2 A y B, respectivamente, la tabla de verdad de los operadores lgicos combinacionales es:
A

.NOT.B

.TRUE.
.FALSE.
.TRUE.
.FALSE.

.FALSE.
.TRUE.
.FALSE.
.TRUE.

A.AND.B

A.OR.B

A.EQV.B

A.NEQV.B

.TRUE.
.TRUE.
.FALSE.
.FALSE.

.TRUE.
.FALSE.
.FALSE.
.FALSE.

.TRUE.
.TRUE.
.TRUE.
.FALSE.

.TRUE.
.FALSE.
.FALSE.
.TRUE.

.FALSE.
.TRUE.
.TRUE.
.FALSE.

5.- PRECEDENCIAS LGICAS-ARITMTICAS


Precedencia de los operadores lgicos combinacionales:
OPERADOR(ES) PRECEDENCIA
()
MAYOR
.NOT.
.AND.
.OR.
.EQV. , .NEQV.
MENOR
Si una expresin lgica contiene dos o ms operadores de la misma precedencia se siguen las siguientes reglas:
Cuando existen parntesis anidados se evalan desde el ms interno hasta el ms externo
Si existen varios operadores .EQV. y/o .NEQV. se evalan de izquierda a derecha
Precedencia de los operadores aritmticos, lgicos relacionales y lgicos combinacionales
OPERADORES ARITMTICOS:** (1) *, / (2) + , - (3)
OPERADORES LGICOS RELACIONALES > , >= , < <= , == ,.NE. (4)
OPERADORES LGICOS COMBINACIONALES .NOT. (5) .AND. (6) .OR. (7) .EQV., .NEQV. (8)

El orden de prioridad esta encerrado entre parntesis ( )

6.- SENTENCIA DE ASIGNACIN LGICA


Asigna un valor lgico (.TRUE. o .FALSE.) a una variable lgica. variable_lgica = expresin_lgica
variable_lgica es el nombre de una variable, o elemento de matriz, declarada en el programa del tipo LOGICAL.
expresin_lgica es una expresin lgica Fortran vlida.
El funcionamiento es:
Se evala la expresin_lgica, luego se asigna el valor obtenido a la variable_lgica.
Ejemplo:
LOGICAL :: log1
INTEGER :: i = 10
log1 = (i==10)

SENTENCIAS DE DECISIN (IF)


Las estructuras de decisin o seleccin comparan una variable contra otro(s) valor(es), para que de acuerdo al resultado
de esta comparacin, se siga un curso de Accin dentro del programa. Cabe mencionar que la Comparacin se puede
hacer contra otra variable o contra una constante, segn sea necesario. Existen cuatro tipos bsicos: simples, dobles,
anidadas y mltiples; como se puede observar en siguiente mapa conceptual:
ESTRUCTURAS DE
DECISIN

7.- ESTRUCTURA CONDICIONAL SIMPLE (SI-ENTONCES)


Permite que un bloque de sentencias (puede ser slo una) sea ejecutado si y slo si el valor de una expresin lgica es
cierta. Si
la expresin lgica es falsa se salta ese bloque de sentencias y se ejecuta la primera sentencia ejecutable por debajo de
END IF.
Sintaxis
IF (condicin) THEN
sentencias para condicin verdadera
END IF
Donde, Condicin: tiene que ser verdadera.
ENDIF marca la terminacin de la sentencia bloque IF.
El bloque de sentencias suele dentarse (sangra) por dos o ms espacios para facilitar la lectura del bloque IF, aunque no
es obligatorio hacerlo.
8.- ESTRUCTURA CONDICIN DOBLE (SI-ENTONCES-SINO)
Esta estructura permite evaluar una condicin y segn sea el resultado lgico ejecutara el bloque de sentencias para el
caso que sea verdadero caso contrario ejecutar el otro bloque de sentencias para el caso de que la condicin sea falsa.
Sintaxis
IF (condicin) THEN
sentencias para condicin verdadera
ELSE
sentencias para condicin falsa
ENDIF
9.- ESTRUCTURA CONDICIONAL MLTIPLE O ANIDADA
Aqu, cada condicin se prueba por turno. Si la condicin no se se satisface, se prueba la siguiente, pero si la condicin
es verdadera, se ejecutan las instrucciones correspondientes para tal condicin y luego se va al final de la estructura. Si
ninguna de las condiciones son satisfechas se ejecutan las instrucciones especificadas en el bloque correspondientes al
sino final. Debera quedar claro entonces que para que un estructura condicional sea eficiente sus condiciones deben ser
mutuamente excluyentes. La codificacin de esta estructura en Fortran se indica a continuacin. Sintaxis
IF (condicin 1) THEN
sentencias para condicin 1 verdadera
ELSEIF (condicin 2) THEN
sentencias para condicin 2 verdadera
...
ELSEIF (condicin N) THEN
sentencias para condicin N verdadera
ELSE
sentencias para todas las condiciones falsa
ENDIF
10.- ESTRUCTURA DE DECISIN LGICA. (if lgico)
La sentencia IF lgica es el caso particular ms simple del bloque IF. La sentencia IF lgica evala una expresin lgica y
ejecuta
una sentencia si dicha expresin es cierta. Sintaxis

IF (expresin lgica) sentencia


sentencia es cualquier sentencia ejecutable excepto DO, END, bloque IF u otra sentencia IF lgica.
Si el valor de la expresin lgica es .TRUE., se ejecuta la sentencia. Si es .FALSE. se salta esa sentencia y se pasa el
control a la sentencia siguiente.
11.- SENTENCIA DE SELECCIN (SELECT)
Esta estructura es una alternativa a las decisiones anidadas, su sintaxis:
SELECT CASE (expresin caso o selector)
CASE (selector de caso 1)
bloque de sentencias 1
[CASE (selector de caso 2)
bloque de sentencias 2]

[CASE DEFAULT
bloque de sentencias n]
END SELECT

El bloque SELECT CASE ejecuta un bloque determinado de sentencias cuando el valor de la expresin caso
coincide o pertenece al rango dado de su correspondiente selector de caso.
Opcionalmente puede existir un CASE DEFAULT en un bloque SELECT CASE. El bloque de sentencias de este
caso por defecto se ejecuta cuando el valor de la expresin caso no coincide con ningn selector de caso.
expresin caso es una expresin entera, lgica o de caracteres.
Selector de caso es una lista de uno o ms valores posibles del mismo tipo que la expresin caso. Cada selector
de caso debe ser mutuamente excluyente. Los valores pueden escribirse como:
valor
valormin : valormax
: valormax
valormin:
una combinacin de las formas anteriores separadas por comas.
Es recomendable poner nombre a un bloque SELECT CASE largo y complicado. Por un lado, el programador
estructura mejor los programas y, por otro, el compilador encuentra errores en su cdigo de forma ms
precisa.

EJEMPLOS:
1.- Consideremos, como ejemplo de una estructura de seleccin, el diseo e implementacin de un algoritmo para
calcular las races de una ecuacin cuadrtica ax 2+ bx +c = 0; cuya solucin esta dado por:

x(1,2)=

b b 24 ac
2a

Solucion:
La naturaleza de estas races depender del signo del discriminante D=b 2-4ac, lo cual nos lleva a implementar una
estructura de seleccin: si D > 0 las races sern nmeros reales, de lo contrario sern nmeros complejos conjugados
uno del otro. Por otra parte, al ingresar los coeficientes, deberamos asegurarnos que el coeficiente a no es nulo, pues,
de lo contario la frmula conducira a una divisin por cero. Nuevamente, una estructura de decisin permite verificar
esto. El pseudocdigo de nuestro algoritmo y el programa en Fortran es el siguiente .
PROGRAM ecuadratica
Leer a; b; c
! --------------------------------------------------Si a = 0 entonces
! Se calculan las races de la ecuacin cuadrtica
Escribir La ecuacin no es cuadrtica.
ax**2+bx+c=0
Salir.
! --------------------------------- Declaracin de tipos
fin_si.
IMPLICIT NONE
Calcular D = b2 - 4ac.
REAL :: a,b,c ! coeficientes de la ecuacin
REAL :: discr ! discriminante de la ecuacin
Si D >= 0 entonces
REAL :: x1,x2 ! variables para soluciones
Calcular x1 = (-b+raiz(D))/2a
REAL :: term,den
Calcular x2 = (-b-raiz(D))/2a
! -------------------------------------------------! Entrada de
sino
datos
Calcular x1 = (-b+ i raiz(D))/2a
PRINT*,"Ingrese coeficientes a,b,c"
Calcular x2 = x1
READ*,a,b,c
IF( a == 0 ) THEN
fin_si.
PRINT*,"La ecuacin no tiene trmino cuadrtico"
Imprimir x1 y x2.
STOP
ENDIF
! ----------------- Bloque de procesamiento y salida
! ------------------discr = b**2 - 4.0*a*c
den = 2.0*a
term = SQRT(ABS(discr))
IF (discr >= 0 ) THEN
x1 = (-b+term)/den
x2 = (-b-term)/den
PRINT*,"x1 = ", x1
PRINT*,"x2 = ", x2
ELSE
x1 = -b/den
x2 = term/den
!Caso raices complejas
PRINT*,"x1 = (", x1, " ,", x2, ")"
PRINT*,"x1 = (", x1, " ,", -x2, ")"
ENDIF
!------------------------------ Terminar
STOP
END PROGRAM ecuadratica

Ingrese coeficientes a,b,c


024
La ecuacion no tiene
cuadratico
Press any key to continue

termino

Ingrese coeficientes a,b,c


503
x1 = ( 0.0000000E+00 , 0.7745967
)
x1 = ( 0.0000000E+00 , -0.7745967
)
Press any key to continue
Ingrese coeficientes a,b,c
352
x1 = -0.6666667
x2 = -1.000000
Press any key to continue

2.-Se tiene el siguiente programa, diga Ud. a que puede atribuirse el resultado que se obtiene?
PROGRAM test_igualdad
IMPLICIT NONE
1/2 es igual a 0.5
real :: a
1/10 es distinto a 0.1
a = 2.0
Press
any
key
to
IF (1.0/a == 0.5) THEN
continue
PRINT*,"1/2 es igual a 0.5"
ELSE
PRINT*,"1/2 es distinto a 0.5"
ENDIF
a = 10.0
IF (1.0/a == 0.1) THEN
PRINT*,"1/10 es igual a 0.1"
ELSE
PRINT*,"1/10 es distinto a 0.1"
ENDIF
STOP
END PROGRAM test_igualdad
3.- Determinar si un nmero entero entre 1 y 10 es par o impar y visualizar un mensaje adecuado en consecuencia.
PROGRAM USO_SELECT
INTEGER :: valor
PRINT*,"INGRESE UN VALOR ENTERO ENTRE 1 A 10"
READ*,Valor
SELECT CASE (valor)
CASE (1, 3, 5, 7, 9)
PRINT*,"el valor es impar"
CASE (2, 4, 6, 8, 10)
PRINT*,"el valor es par"
CASE (11:)
PRINT*,"el valor es demasiado grande"
CASE DEFAULT
PRINT*,"el valor es negativo o cero"
END SELECT
END PROGRAM USO_SELECT

INGRESE UN VALOR ENTERO ENTRE 1 A 10


5
el valor es impar
Press any key to continue
INGRESE UN VALOR ENTERO ENTRE 1 A 10
6
el valor es par
Press any key to continue

4.-Programa que visualiza un mensaje de acuerdo con el valor de la !temperatura ingresada:


PROGRAM CASE2
INTEGER:: temp
PRINT*,"INGRESE UN VALOR DE TEMPERATURA"
READ*,TEMP
INGRESE UN VALOR DE TEMPERATURA
SELECT CASE(temp)
25
CASE (:-1)
Hace calor
PRINT*,"por debajo de 0 Celsius"
Press any key to continue
CASE (0)
PRINT*,"Est helando"
CASE (1:10)
PRINT*,"Hace fro"
CASE (11:20)
PRINT*,"templado"
CASE (21:)
PRINT*,"Hace calor"
END SELECT
END PROGRAM CASE2
5.- Dada una calificacin numrica obtener la correspondiente alfabtica segn la siguiente clasificacin:

PROGRAM IF_ANIDADO
REAL :: nota
PRINT*,"INGRESE UNA NOTA"
READ*,nota
IF (nota < 0 .OR. nota > 10) THEN
PRINT*,"NOTA INCORRECTA"
ELSE IF (nota < 5) THEN
PRINT*,"SUSPENSO"
ELSE IF (nota < 7) THEN
PRINT*,"APROBADO"
ELSE IF (nota < 9) THEN
PRINT*,"NOTABLE"
ELSE IF (nota < 10) THEN
PRINT*,"SOBRESALIENTE"
ELSE
PRINT*,"MATRICULA DE HONOR"
END IF

0 Nota <
5 Nota <
7 Nota <
9 Nota <
Nota = 10

5
7
9
10

Suspenso
Aprobado
Notable
Sobresaliente
Matricula de Honor

INGRESE UNA NOTA


8
NOTABLE
Press any key to continue

END PROGRAM IF_ANIDADO

PROBLEMAS PROPUESTOS

1.-Dadas las variables con los valores que se indican:


a = 2.0 d = 2.5 i = 2 f = .FALSE. b = 5.0 e = -4.0 j = 3 t = .TRUE. c = 10.0 k = -2
deducir el valor lgico de cada una de las expresiones lgicas siguientes. Indicar el orden en que se evalan.
a) t .AND. f .OR. .FALSE. b) a**i+b <= b/c+d
c) i/j == 2+k .AND. b/c+d >= e+c/d-a**j
d) (b*j+3.0) == (d-e) .AND. (.NOT. f)
2.- Implemente un programa de decisin para verificar si un nmero es negativo o no negativo (positivo o cero).
3.- Implemente un programa de decisin para determinar si un nmero entero es par o impar (Ayuda: utilice la funcin
MOD(x,y), la cual devuelve el resto de la divisin de x por y).
4.- Dada una esfera de radio R, considerando su centro como origen de coordenadas se quiere determinar si un punto de
coordenadas (x; y; z) est dentro o fuera de la esfera. Implemente un programa para ste problema.
5.- Considrese en el plano un rectngulo dado por las coordenadas (xS;yS) de su vrtice superior izquierdo y las
coordenadas (xI ;yI) de su vrtice inferior derecho. Se quiere determinar si un punto (x;y) del plano est dentro o fuera
del rectngulo. Implemente la solucin en un programa
6.- Dado tres nmeros reales distintos se desea determinar cual es el mayor. Implemente un progrma apropiado (Ayuda:
considere ya sea un conjunto de estructuras de seleccin anidadas o bien dos estructuras de seleccin en secuencia).
7.- Implemente un programa que intercambie los valores de dos nmeros reales si estn en orden creciente pero que no
realice ninguna accin en caso contrario.
8.- Implementar un programa para el clculo del valor absoluto de un nmero real con un if lgico.
9.- Implementar un programa multicondicional para la evaluacin de la funcin:

10.- Un examen se considera desaprobado si la nota obtenida es menor que 4 y aprobado en caso contrario. Si la nota
est entre 7 y 9 (inclusive) el examen se considera destacado, y entre 9 y 10 (inclusive) sobresaliente. Implementar un
programa para indicar el estatus de un examen en base a su nota .
ESTRUCTURAS DE REPETICIN
La estructura de control iterativa permite la repeticin de una serie determinada de instrucciones. Este conjunto de
instrucciones a repetir se denomina bucle (loop, en ingls) y cada repeticin del mismo se denomina iteracin. Podemos
diferenciar dos tipos de bucles:

Bucles donde el nmero de iteraciones es fijo y conocido de antemano.

Bucles donde el nmero de iteraciones es desconocido de antemano. En este caso el bucle se repite mientras se
cumple una determinada condicin (bucles condicionales).
Para estos dos tipos de bucles disponemos de sendas formas bsicas de la estructura de control iterativa.
Comencemos con un bucle cuyo nmero de iteraciones es conocido a priori. La estructura iterativa, en tal caso, puede
expresarse en pseudocdigo como sigue.
Desde ndice = valor inicial hasta valor final hacer
Instrucciones del bucle
fin_desde

El ndice es una variable entera que, actuando como un contador, permite controlar el nmero de ejecuciones
del ciclo.
Los valor inicial y valor final son valores enteros que indican los lmites entre los que vara ndice al comienzo y
final del bucle.
Est implcito que en cada iteracin la variable ndice toma el siguiente valor, incrementndose en una unidad.
En seguida veremos que en Fortran se puede considerar incrementos mayores que la unidad e incluso
negativos.
El nmero de iteraciones del bucle es N = valor final - valor inicial +1.
Dentro de las instrucciones del bucle no es legal modificar la variable ndice. Asimismo, al terminar todas las
iteraciones el valor de la variable no tiene porque tener un valor definido, por lo tanto, la utilidad de la variable
ndice se limita a la estructura de iteracin.

En Fortran la estructura repetitiva se codifica como sigue.


DO ndice = valor inicial, valor final, incremento
Sentencias del bucle
END DO

ndice es una variable entera que se usa como contador del bucle.

Inicio, fin y paso son cantidades enteras y constituyen los parmetros del ndice del bucle. Controlan los valores
de la variable ndice durante la ejecucin. Pueden ser constantes, variables o expresiones enteras.

Las sentencias entre la sentencia DO y la sentencia END DO se llaman cuerpo del bucle. Para mejorar la lectura
del cdigo es recomendable endentar el cuerpo del bucle con dos o ms espacios.
Inicio marca el valor inicial que toma ndice cuando comienza la ejecucin del bucle DO.
Fin marca el valor final que puede tomar ndice.
Paso indica el incremento con que ndice es modificado despus de cada ejecucin del bucle DO. Es un
parmetro opcional, cuando no aparece, su valor por defecto es 1. Puede ser positivo o negativo.
Cuando se ejecuta una sentencia DO, tienen lugar la secuencia de operaciones siguiente:
Si los parmetros del ndice del bucle son expresiones enteras se calculan sus valores antes del comienzo de la
ejecucin del bucle.
Se asigna el valor inicio a la variable de control ndice. Si la condicin ndice * paso fin * paso, el programa
ejecuta las sentencias del cuerpo del bucle.
Despus, se recalcula el valor de ndice como: ndice = ndice + paso. Si an se cumple la condicin anterior
ndice * paso fin * paso, el programa ejecuta otra vez las sentencias del cuerpo del bucle.
Se repite el punto anterior hasta que deja de cumplirse la condicin de desigualdad dada, en cuyo caso la
ejecucin salta a la primera sentencia siguiente a la sentencia END DO.
El nmero de iteraciones que se llevan a cabo en el bucle DO se puede calcular a partir de la siguiente
ecuacin:
N ITERACIONES = (FIN INICIO + PASO) / PASO
Precauciones:
No est permitido modificar el valor de ndice en el cuerpo del bucle. La mayora de los compiladores Fortran
suelen reconocer este problema y generan un error en tiempo de compilacin si se intenta modificar su valor.
Caso de que el compilador no detectara este problema, se podra dar el caso de un bucle infinito.
La nica manera de parar la ejecucin de un programa cuando ste contiene un bucle infinito es matar el
programa pulsando control CTRL+C.
En muchos computadores, el valor de ndice despus de la finalizacin normal del bucle DO, est definido por el
siguiente valor asignado como resultado del incremento. Esto es lo que ocurre en el compilador de la Salford
FTN95. Sin embargo, su valor es indefinido oficialmente en el Fortran estndar, de modo que algunos
compiladores pueden producir resultados diferentes. Por lo tanto, no conviene nunca usar el valor del ndice de
un bucle en las siguientes sentencias del programa Fortran.
Si paso toma el valor 0 se puede dar un bucle infinito.
Puede ocurrir que el cuerpo de un bucle no se ejecute nunca, si inicio * paso > fin * paso.

Ejemplos
Ejemplo 1:
PROGRAM DO_1
INTEGER I
DO I = 1,10,1
PRINT*,2*I
END DO
PRINT*,I
END PROGRAM DO_1

Ejemplo 2:
PROGRAM DO_2
INTEGER I,J
PRINT*,"INGRESE VALOR DE I,J"
READ*,I,J
DO L = I,J,1
PRINT*,2*L
END DO
END PROGRAM DO_2
Ejemplo 3:
PROGRAM DO_3
INTEGER I,J,K
PRINT*,"INGRESE VALOR DE I,J,K"
READ*,I,J,K
DO L = I,J,K
PRINT*,L
END DO
END PROGRAM DO_3

2
4
6
8
10
12
14
16
18
20
11
Press any key to continue
INGRESE VALOR DE I,J
1 6
2
4
6
8
10
12
Press any key to continue

INGRESE VALOR DE I,J,K


3 10 3
3
6
9
Press any key to continue

El DO CONDICIONAL (The conditional Loop)


La estructura DO WHILE es un tipo de bucle condicional. El bucle se ejecutar indefinidamente hasta que la prueba se
condicione a FALSO, con base a la variable de control del bucle(s).
Por supuesto, para comenzar el bucle, la condicin debe inicialmente ser verdadera. Obviamente, la condicin debe
cambiar de algn modo de verdadero a falso. Esta es una diferencia con la declaracin DO, donde la computadora no
nos permite cambiar el control de la variable. Para el DO WHILE, la variable de control(s) que es la base de la condicin

de prueba debe cambiar, de otra manera, nosotros se estar inmerso en un bucle infinito El formato de la declaracin
DO WHILE es:
DO WHILE <Condicin es Verdadera>
[Bloque de instrucciones]
END DO
Cuando se ingresa al bucle primero, la prueba se realiza para lo cual los resultados permitidos nicos son verdaderos o falsos. Si la
condicin es verdadera, el bloque de instrucciones es ejecutado. Pero si la condicin de prueba es falsa, el bucle termina y realiza un salto
la operacin despus del fin del bucle
Ejemplo1
Una demostracin de como trabaja la declaracin WHILE DO, se presume que nosotros deseamos calcular el promedio de peso de los
conejos en un laboratorio. Donde los conejos se multiplican tan rpidamente, nosotros nunca sabemos por adelantado cuntos habr.
Nosotros establecemos el bucle para leer los pesos, de uno en uno, hasta que uno de los pesos sea mayor de 500 gramos. Cuando esto
ocurre, el bucle parar. Nosotros a veces llamamos este valor especial como Valor Centinela. El bucle se establece para que nosotros
miremos a este valor como clave,

PROGRAM USO_DO_WHILE
!Nosotros usaremos 500 como centinela
! Valor de control del loop
TOT = 0.0
NUM = 0
PESO =0.0
DO WHILE (PESO<=500.0)
PRINT*,"Ingrese peso"
READ*, PESO
TOT = TOT+PESO
NUM = NUM+1
END DO
PROME=(TOT-PESO)/(NUM-1)
PRINT*, "Promedio de Pesost=",PROME
END PROGRAM USO_DO_WHILE

Ingrese peso
100
Ingrese peso
200
Ingrese peso
300
Ingrese peso
400
Ingrese peso
500
Ingrese peso
600
Promedio de Pesos= 300.000000
Press any key to continue

LAS DECLARACIONES EXIT Y CYCLE


Fortran 90 tambin ofrece un propsito general que puede usarse como un contador o un bucle condicional, la forma general de la
sintaxis siguiente : ( lo que esta entre corchetes es opcional ).
DO [Control de estructura de enlace]
[ IF (Condicin es verdadera ) EXIT]
[ IF (Condicin es verdadera ) CYCLE]
END DO
Si la variable de control del bucle se incluye sobre la misma lnea como la sentencia DO, el bucle llega a ser un bucle contador. Pero si los
variables de control del bucle son fuera de la izquierda, el bucle llega a ser de tipo condicional.
En este caso, sin embargo, debe haber un medio de parar el bucle. Estos se hecho con dos nuevos comandos: EXIT y CYCLE.
Como sus nombres implican, la declaracin EXIT dentro del bucle ocasiona que dicho bucle termine, mientras el comando CYCLE ocasiona
que el bucle salte al prximo valor de LCV. En efecto, ambas declaraciones son los que sustituyen a la sentencia GOTO. El comando EXIT
es equivalente al declaracin GOTO a un punto fuera del bucle. Similarmente, el comando CYCLE es equivalente al GOTO al final del
bucle.

Ejemplo 2: Modificacin del ejemplo1 usando la sentencia EXIT


PROGRAM USO_DO_EXIT
!Nosotros usaremos 500 como centinela
Ingrese peso menor a 500
!Valor de control del loop
100
TOT = 0.0
Ingrese peso menor a 500
NUM = 0
200
PESO =0.0
Ingrese peso menor a 500
300
DO
Ingrese peso menor a 500
PRINT*,"Ingrese peso menor a 500"
500
READ*, PESO
Ingrese peso menor a 500
IF (PESO > 500.0) EXIT
600
TOT = TOT+PESO
Promedio de Pesos=
NUM = NUM+1
275.000000
Press any key to continue
END DO
PROME=TOT/NUM
PRINT*, "Promedio de Pesos=",PROME
END PROGRAM USO_DO_EXIT
Ejemplo3: Modificacin del ejemplo1 usando la sentencia CYCLE.
PROGRAM USO_DO_EXIT_CYCLE
!Nosotros usaremos 500 como centinela
!Valor de control del loop
TOT = 0.0
NUM = 0
PESO =0.0
DO
PRINT*,"Ingrese peso"
READ*, PESO
IF (PESO > 500.0) EXIT
IF (PESO<=0.0) THEN
PRINT*,"Error en ingreso de dato, ingrese nuevo valor"
CYCLE
ELSE
TOT = TOT+PESO
NUM = NUM+1
END IF

Ingrese peso
200
Ingrese peso
100
Ingrese peso
300
Ingrese peso
-100
Error en ingreso de dato, ingrese nuevo valor
Ingrese peso
400
Ingrese peso
600
Promedio de Pesos= 250.000000
Press any key to continue

END DO
PROME=TOT/NUM
PRINT*, "Promedio de Pesos=",PROME
END PROGRAM USO_DO_EXIT_CYCLE

PROBLEMAS RESUELTOS
1.- Elaborar un programa que lea 5 nmeros reales y obtenga el promedio.
PROGRAM Media
IMPLICIT NONE
! Clculo de la media de 5 valores ledos por teclado
Ingrese 5 numeros reales
! Declaracin de variables
NUMERO
1
REAL :: v, tot, med
12.5
INTEGER::I
NUMERO
2
tot = 0
! Leemos 5 datos por teclado y los vamos acumulando en la variable tot 10.2
NUMERO
3
PRINT*, "Ingrese 5 numeros reales"
20.3
DO I=1,5
NUMERO
4
PRINT*,"NUMERO ",I
11.4
READ*, v
NUMERO
5
tot = tot + v
9.5
END DO
La media es 12.78000
! Calculamos e imprimimos la media de los 5 datos
Press any key to continue
med = tot / 5.0
PRINT*, "La media es ",med
END PROGRAM Media
2.- Modifique el programa anterior de tal forma que el programa lea N
reales ingresados
PROGRAM PROMEDIO_N_NUMEROS
IMPLICIT NONE
! Clculo de la media de N valores ledos por teclado
! Declaracin de variables
REAL :: v, tot, med
INTEGER :: I,N
PRINT*, "Cuantos numeros vamos a ingresar"
READ*, N
tot = 0
! Leemos N datos por teclado y los vamos acumulando en la variable tot
PRINT*,"Dame ",N," numeros reales"
DO I=1,N
PRINT*,"NUMERO ",I
READ*, v
tot = tot + v
END DO
! Calculamos e imprimimos la media de los N datos
med = tot / N
PRINT*, "La media es ",med
END PROGRAM PROMEDIO_N_NUMEROS

nmeros y obtenga el promedio de los nmeros

Cuantos nmeros vamos a


ingresar
4
Dame
4 nmeros
reales
NUMERO
1
10.2
NUMERO
2
11.2
NUMERO
3
5.30
NUMERO
4
11.8
La media es 9.625000
Press any key to continue

3.-Elabore um programa donde visualice La tabla de multiplicar del nmero ingresado por teclado
PROGRAM TablaMultiplicar
IMPLICIT NONE
Ingrese el numero de la tabla a
! Calcular la tabla de multiplicar de un nmero
multiplicar
INTEGER :: n,i
5
PRINT*, "Ingrese el numero de la tabla a multiplicar"
5 x
1 =
5
READ*, n
5 x
2 =
10
DO i=1,12
5 x
3 =
15
PRINT*, n," x ",i," = ",n*i
5 x
4 =
20
END DO
5 x
5 =
25
END PROGRAM TablaMultiplicar
5 x
6 =
30
5 x
7 =
35
5 x
8 =
40
5 x
9 =
45
5 x
10 =
50
5 x
11 =
55
5 x
12 =
60
Press any key to continue
4.-El siguiente programa es un ejemplo de bucle anidad, es decir existe dos ciclos de repeticin uno dentro de otro, al
ejecutar nos mostrara un resultado.
PROGRAM Salida
IMPLICIT NONE
! Declaracin de variables
El valor de N es
32
INTEGER :: N, i, k
Press any key to continue
N=0
!Bucle anidado, por cada repeticion de i, el valor de k se ejecuta completamente

DO i=1,2,1
DO k=1,4
N=N+i+k

END DO
END DO
PRINT*, "El valor de N es ",N
END PROGRAM Salida
5.- Programa que muestra las salida para cada bucle de repeticin, analice la variable de control o ndice de repeticin
c1, c2, c3 y c4
PROGRAM Iteraciones
IMPLICIT NONE
c1
30
c3
INTEGER :: c1, c2, c3, c4
c1
1
28
c3
! Bucle 1
c1
2
DO c1=30, 1, -2
26
c3
PRINT*,c1 ,c1
c1
3
END DO
24
c3
print*
c1
4
! Bucle 2
22
c3
DO c2=30, 1, 2
c1
5
20
c3
PRINT*,c2 ,c2
c1
6
END DO
18
c3
print*
c1
7
! Bucle 3
16
c3
DO c3=1, 30
c1
8
PRINT*,c3 ,c3
c3
END DO
9
c3
print*
10
! Bucle 4
c3
DO c4=30, 1
11
PRINT*,c4 ,c4
c3
END DO
12
print*
c3
13
PRINT*,"c1= ",c1," c2=",c2," c3=",c3," c4=",c4
c1=
0 c2=
30 c3=
31
c3
END PROGRAM Iteraciones
c4=
30
14
c3
15
c3

Press any key to continue

6.-Programa que determina el factorial de un numero entero ingresado por teclado


PROGRAM Factorial
IMPLICIT NONE
! Clculo del factorial de un numero
Ingrese un numero (>=0)
! Declaracin de variables
6
INTEGER :: f,n,c
El factorial es
720
! Leer el numero hasta que sea positivo
Press any key to continue
n = -1
DO WHILE (n<0)
PRINT*, "Ingrese un numero (>=0)"
READ*, n
ENDDO
! Calcular el factorial
f=1
DO c=2,n
f=f*c
ENDDO
! Escribir resultado
PRINT*, "El factorial es ",f
END PROGRAM Factorial

7.program prob7
1
integer::I
3
I=1
5
do while(I<=9)
7
print *,I
9
I=I+2
hasta luego
end do
print*,"hasta luego" Press any key to continue
end program prob7

8.Program prob8
integer::suma, suma2, x
do
if(x==-1) exit
print*,"ingrese un numero o -1 para
terminar"
read*,x
suma=suma+x
end do
suma2=suma+1
print*,"la suma es", suma2
end program prob8

ingrese un numero o -1 para


terminar

11

ingrese un numero o -1 para


terminar

ingrese un numero o -1 para


terminar

55

ingrese un numero o -1 para


terminar

PROBLEMAS PROPUESTOS
1.- Elaborar un programa que sume todos los nmeros naturales desde el 1 hasta el 150, ambos incluidos.
2.- Sumar todos los nmeros naturales pares desde el 20 hasta el 200, ambos incluidos.
3.- Calcular el valor de aplicando la frmula: = 4* ( 1 1 / 3 +1 / 5 1/7) incluyendo hasta el trmino 1 / 99.
4.-Programa que pida la estatura (en metros) y sexo (V/M) de un nmero indeterminado de personas (mientras el
operador quiera).
Posteriormente escribir la estatura media de los varones y la estatura media de las mujeres.

10

También podría gustarte