Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIN EN FORTRAN
Superior
de
Ingenieros
Industriales
de
PRLOGO
El propsito de este libro es recopilar los aspectos bsicos del
lenguaje de programacin Fortran 90/95.
Est organizado en siete captulos de nivel de complejidad
creciente. Los captulos no son independientes entre s, de modo que
su lectura no puede realizarse en cualquier orden, sino en el que se
propone en este libro.
Cada captulo contiene una primera parte terica y otra parte
prctica que consta a su vez de una serie de ejercicios resueltos y
propuestos. Se pretende que, a la vista de la teora y los programas
que se presentan, el alumno sea capaz de construir programas de
dificultad similar, tales como los que se plantean en los ejercicios
propuestos.
Este libro est pensado para cualquier persona que quiera
iniciarse en el lenguaje de programacin Fortran. Lgicamente, es
imprescindible que el aprendizaje se lleve a cabo con un computador.
Todos los programas presentados funcionan en los entornos de
programacin Compaq Visual Fortran versin 6.5 y Plato 3 versin
3.20 de la Salford Software, Ltd 2005. Este ltimo entorno es de
distribucin gratuita en Internet para uso personal. Ambos permiten
compilar el lenguaje de programacin Fortran con formatos libre y fijo
y Plato 3 a su vez tambin compila otros lenguajes como Java, C++,
C#.
El libro sirve de gua bsica a los alumnos de primer curso de
Ingeniera Industrial y Qumica de la Universidad de Cantabria en la
asignatura de Fundamentos de Informtica para la parte de
programacin en el lenguaje Fortran. No obstante, en ningn caso,
pretende sustituir a un manual de referencia del lenguaje.
TABLA DE CONTENIDOS
0
INTRODUCCIN .................................................................. 11
0.1
Q U
0.2
CAMBIOS
0.3
P O R
0.4
E L E ME N T O S
ES
F O R T R A N ? ................................................................... 11
EN LOS DIFERENTES ESTNDARES
QU
F O R T R A N .................... 12
F O R T R A N ? ................................................................. 12
DEL LENGUAJE
........................................................ 13
1
TIPOS DE DATOS Y LOS PRIMEROS PASOS: LEER,
CALCULAR, ESCRIBIR................................................................. 15
1.1
JUEGO
1.2
ESTRUCTURA
1.3
PROGRAM.............................................................................. 16
1.4
STOP ...................................................................................... 16
1.5
EJEMPLO
1.6
1.7
FORMATO
1.8
TIPOS
1.9
CONSTANTES
DE CARACTERES
F O R T R A N ................................................ 15
DE UN PROGRAMA
DE USO DE
STOP ......................................................... 17
DE LAS LNEAS EN
DE DATOS
EN
F O R T R A N .................................... 15
F O R T R A N 90/95 ................................ 17
....................................................................... 18
F O RT R A N ......................................................... 19
1.9.1
CONSTANTES
ENTERAS
................................................... 20
1.9.2
CONSTANTES
REALES
1.9.3
CONSTANTES
L G I C A S ....................................................
20
1.9.4
CONSTANTES
C O M P L E J A S ................................................
21
1.9.5
CONSTANTES
CARCTER
..................................................... 20
................................................. 21
1.10 I D E N T I F I CA D O R E S ..................................................................... 21
1.11 V A R I A B L E S .............................................................................. 21
1.11.1
DECLARACIN
E X P L C I T A ..............................................
22
1.11.2
DECLARACIN
I M P L C I T A ..............................................
22
1.12 I N I CI A L I Z A C I N
DE VARIABLES
................................................... 23
1.13 C O N S T A N T E S
CON NOMBRE:
1.14 E X P R E S I O N E S
A R I T M T I C A S ........................................................
1.14.1
REGLAS
1.14.2
EJEMPLO
PARAMETER................................... 23
D E P R E C E D E N C I A D E O P E R A D O R E S A R I T M T I C O S ...
D E RE G L A S D E P RE C E D E N C I A
24
24
............................ 25
1.15 A R I T M T I C A
C O N T I P O S M E Z C L A D O S ............................................
25
1.16 A S I G N A C I N
A R I T M T I C A ...........................................................
27
Tabla de contenidos
1.17 F U N C I O N E S
I N T R N S E C A S
F O R T R A N ............................................. 27
2.1
EXPRESIONES
2.2
EJEMPLOS
2.3
EXPRESIONES
2.4
PRECEDENCIAS
2.5
SENTENCIA
2.6
B L O Q U E IF .............................................................................. 39
2.7
B L O Q U E IF
2.8
EJEMPLOS
D E BL O Q U E S
2.9
IF
............................................................................... 41
LGICO
L G I CA S R E L A C I O N A L E S
........................................ 35
D E E X P RE S I O N E S L G I C A S RE L A C I O N A L E S
L G I CA S C O M B I N A C I O N A L E S
..................... 36
.................................. 36
L G I C A S - A R I T M T I C A S ........................................
DE ASIGNACIN LGICA
CON NOMBRE
37
............................................ 38
........................................................... 40
IF.......................................................... 41
D E BL O Q U E
3.1
ESTRUCTURAS
3.2
REPETICIN
C O N T R O L A D A P O R C O N T A D O R O B U CL E
3.3
REPETICIN
3.4
B U C L E DO WHILE ................................................................... 59
3.5
S E N T E N C I A S EXIT
3.6
BUCLES
CO N N O M B R E ................................................................
3.7
BUCLES
ANIDADOS
3.8
BUCLES
DE REPETICIN
.................................................... 55
DO
ITERATIVO
. 55
WHILE 57
CYCLE ..................................................... 61
62
................................................................... 63
IF
Y V I C E V E R S A ........
64
Tabla de contenidos
ARRAYS ............................................................................... 75
4.1
I N T R O D U CC I N ......................................................................... 75
4.2
DECLARACIN
4.3
R E F E RE N CI A
4.4
I N I CI A L I Z A C I N
D E A R R A Y S ..........................................................
A L O S E L E M E N T O S D E U N A RR A Y
DE ARRAYS
75
............................... 76
....................................................... 77
4.4.1
I N I CI A L I Z A C I N
DE
ARRAYS
EN
SENTENCIAS
DE
D E C L A R A C I N D E T I P O .............................................................. 77
4.4.2
I N I CI A L I Z A C I N
DE
ARRAYS
EN
SENTENCIAS
DE
A S I G N A C I N ............................................................................
4.4.3
I N I CI A L I Z A C I N
D E A R R A Y S E N S E N T E N CI A S D E L E CT U R A
78
.... 79
4.5
OPERACIONES
S O B R E A R R A Y S CO M P L E T O S ....................................
4.6
OPERACIONES
81
.......................... 82
4.6.1
TRIPLETES
D E N D I CE S ....................................................
82
4.6.2
VECTORES
D E N D I CE S ....................................................
83
4.7
C O N S T R U C C I N WHERE ............................................................ 83
4.8
S E N T E N C I A WHERE .................................................................. 85
4.9
C O N S T R U C C I N FORALL .......................................................... 85
DINMICOS
.................................................................. 87
5.1
DISEO
5.2
F U N C I O N E S ............................................................................ 108
5.3
S U B R U T I N A S .......................................................................... 111
5.4
T R A N S F E RE N C I A
5.5
COMPARTIR
5.6
PROCEDIMIENTOS
M D U L O .......................................................
116
5.7
PROCEDIMIENTOS
C O M O A R G U M E N T O S .......................................
117
5.8
ATRIBUTO
5.9
PROCEDIMIENTOS
D E S C E N D E N T E .............................................................
DE ARRAYS A PROCEDIMIENTOS
......................... 113
D A T O S CO N M D U L O S .............................................
Y S E N T E N CI A
5.10 P R O C E D I M I E N T O S
107
114
INTERNOS
..................................................... 119
R E C U R S I V O S ..................................................
119
Tabla de contenidos
5.11 A R G U M E N T O S
O P C I O N A L E S Y CA M B I O S D E O R D E N
........................ 120
6.1
CARACTERES
6.2
EXPRESIN
6.3
ASIGNACIN
6.4
FUNCIONES
Y C A D E N A S .......................................................... 139
C A R C T E R .............................................................. 140
CARCTER
........................................................... 140
I N T R N S E C A S C A R C T E R
.......................................... 141
7.1
ENTRADA/SALIDA
7.2
SALIDA
7.3
ENTRADA
7.4
DESCRIPTORES
EN
F O R T R A N ................................................. 155
P O R P A N T A L L A ............................................................. 155
POR TECLADO
........................................................... 156
DE FORMATO
..................................................... 157
7.4.1
DESCRIPTOR I
D E F O R M A T O E N T E R O ................................ 158
7.4.2
DESCRIPTOR F
D E F O R M A T O R E A L ................................... 158
7.4.3
DESCRIPTOR E
DE FORMATO EXPONENCIAL
7.4.4
D E S C R I P T O R ES
7.4.5
DESCRIPTOR L
DE FORMATO LGICO
7.4.6
DESCRIPTOR A
D E F O R M A T O C A R C T E R ........................... 162
D E F O R M A T O C I E N T F I CO
...................... 159
........................ 160
............................... 161
7.4.7 D E S C R I P T O R E S X, T D E P O S I C I N H O R I Z O N T A L Y / D E
P O S I CI N V E R T I C A L ................................................................ 163
7.4.8
REPETICIN
7.5
PROCESAMIENTO
7.6
POSICIN
7.7
SALIDA
7.8
ENTRADA
.... 164
D E A R C H I V O S .................................................. 165
E N U N A R CH I V O ......................................................... 166
P O R A R C H I V O ............................................................... 167
P O R A R C H I V O ............................................................ 168
Tabla de contenidos
NDICE DE TABLAS
Tabla 1.1: Ejemplo de uso de STOP .................................................. 17
Tabla 1.2: Tipos de datos intrnsecos en Fortran ................................ 19
Tabla 1.3: Operadores aritmticos Fortran ......................................... 24
Tabla 1.4: Reglas de precedencia de operadores aritmticos ................ 25
Tabla 1.5: Ejemplo de reglas de precedencia de operadores aritmticos 25
Tabla 1.6: Orden de precedencia de los tipos Fortran .......................... 26
Tabla 1.7: Aritmtica con tipos mezclados ......................................... 26
Tabla 2.1: Operadores lgicos relacionales Fortran ............................ 35
Tabla 2.2: Ejemplos de expresiones lgicas relacionales ..................... 36
Tabla 2.3: Operadores lgicos combinacionales Fortran 90/95 ............. 37
Tabla 2.4: Tabla de verdad de los operadores lgicos combinacionales. 37
Tabla
2.5:
Orden
de
precedencia
de
operadores
lgicos
combinacionales Fortran ............................................................ 37
Tabla 2.6: Orden de precedencia de operadores Fortran ...................... 38
Tabla 7.1: Smbolos usados en los descriptores de formatos ............... 157
Tabla 7.2: Formatos de escritura de enteros ...................................... 158
Tabla 7.3: Formatos de lectura de enteros ......................................... 158
Tabla 7.4: Formatos de escritura de reales ........................................ 159
Tabla 7.5: Formatos de lectura de reales ........................................... 159
Tabla 7.6: Formatos de escritura de reales en formato exponencial ..... 160
Tabla 7.7: Formatos de lectura de reales en formato exponencial ........ 160
Tabla 7.8: Formatos de escritura de reales en formato cientfico ......... 161
Tabla 7.9: Formatos de lectura de reales en formato cientfico ........... 161
Tabla 7.10: Formatos de escritura de datos lgicos ............................ 162
Tabla 7.11: Formatos de lectura de datos lgicos .............................. 162
Tabla 7.12: Formatos de escritura de caracteres ................................ 163
Tabla 7.13: Formatos de lectura de caracteres ................................... 163
10
0 INTRODUCCIN
0.1 Qu es Fortran?
11
Introduccin
Es el lenguaje predominante
cientficas y de ingeniera.
12
en
aplicaciones
matemticas,
Introduccin
Las palabras
maysculas.
reservadas
del
lenguaje
se
escriben
en
13
Caracteres alfanumricos:
Cabecera:
PROGRAM nombre_programa
Parte de especificaciones:
Parte ejecutable:
de
cd igo
For tr an
co mp ilado
15
Parte de terminacin:
1.3 PROGRAM
Sintaxis:
[PROGRAM nombre_programa]
1.4 STOP
STOP [n]
16
DESCRIPCIN
STOP 7373
STOP 'ACABO'
STOP
Sintaxis:
Ej:
PROGRAM ejemplo
........
........
END PROGRAM ejemplo
O bien:
!Programa sin nombre
........
........
END PROGRAM
17
TIPO
ENTERO
DENOMINACIN
FORTRAN
INTEGER
18
INTERVALO
EN BYTES
OCUPADOS 4 VALORES
-2 3 2 - 1 =2147483648
232-11=2147483647
DE
-3.402823 10 + 3 9
-1.175495 10 - 3 9
REAL
REAL
Y
1.175495 10 - 3 9
3.402823 10 + 3 9
COMPLEJO
COMPLEX
IGUAL
REAL
LGICO
LOGICAL
.TRUE.
.FALSE.
len
CONJUNTO
DE
CARACTERES
ASCII DE 8-BITS
CHARACTER
CARCTER
[{(len=n
variab)|
caract
(n caract de variab)}]
de
QUE
O
Definicin de constante:
19
Ej:
Bsica.
Se compone de:
signo (opcional).
punto decimal.
carcter alfabtico E.
signo (opcional).
Ej:
+34.453E4
12.323E+03
-0.0034E-03
.89E-2
5.434E0
-4344.49E-5
20
.TRUE. Verdadero.
.FALSE. Falso.
1.10 Identificadores
Y no vlidos:
1.11 Variables
21
1.11.1
Declaracin explcita
Ej:
1.11.2
Declaracin implcita
I,J,K,L,M,N: entera.
NONE significa que no hay nada implcito. Por lo tanto, todas las
variables del programa deben declararse explcitamente.
22
Ej:
IMPLICIT NONE
!No hay nada implcito.
IMPLICIT LOGICAL (H-J)
!Variables que comiencen por H,I,J son lgicas.
TIPO:: var1=valor1[,var2=valor2]
23
Ej:
SUMA
RESTA
MULTIPLICACIN
DIVISIN
**
POTENCIA
OPERADORES UNARIOS
+
SIGNO POSITIVO
SIGNO NEGATIVO
Ej:
1.14.1
PRECEDENCIA
( )
MAYOR
**
24
+ , - (UNARIOS: SIGNOS)
* , /
+ , -
MENOR
T a b la 1 . 4 : R eg la s d e p r e c ed en cia d e o p e ra d o r e s a r itm t i c o s
1.14.2
EXPRESIN RESULTANTE
OP1=F-6.25
A*B+C+D**(E*(OP1+G))**SIN(H)
OP2=(OP1+G)
A*B+C+D**(E*OP2)**SIN(H)
OP3=(E*OP2)
A*B+C+D**OP3**SIN(H)
OP4=OP3**SIN(H)
A*B+C+D**OP4
OP5=D**OP4
A*B+C+OP5
OP6=A*B
OP6+C+OP5
OP7=OP6+C
OP7+OP5
25
TIPO
PRECEDENCIA
COMPLEX MAYOR
REAL
INTEGER
LOGICAL
MENOR
T a b la 1 . 6 : O rd en d e p r e c ed en c ia d e lo s t i p o s For t ra n
+,-,*,/,**
INTEGER REAL
REAL
REAL
Ej:
Sean:
a=8.0
b=4.0
c=3.0
(Reales)
i=8
j=4
k=3
(Enteros)
El resultado de:
a/b
2.0
(real)
j/a
0.5
(real)
i/j
(entero)
b/c
1.33333...
(real)
a/c
2.66667
(real)
j/k
(entero)
j/i
(entero)
j/c
1.33333...
(real)
26
variable = expresin_aritmtica
El funcionamiento es:
Se evala la expresin_aritmtica.
Ej:
27
28
EJERCICIOS RESUELTOS
Objetivos:
29
PROGRA M c ap 1_1
PROGRA M c ap 1_2
I N T E G ER : : a
R EA L : : b1, b 2 ,s ue ld o_ de l _u lt i mo _ mes
L OG IC A L : : d1 ,d 2
C O M PL E X : : e
CHARAC TER (LEN= 18) :: pal
CHARAC TER (LEN= 180) :: f rase_larga
a= - 12 3
b 1= - 2 . 98
b 2= 0 .9 E- 8
s ue l do_ del _ u lt i mo _me s= 28 50 .7 5
d 1= .t r ue .
d 2= .f a l se .
e= (2.3 ,3.7)
pal='CON STA NTE CARAC TER '
f rase_larga= '"C ONSTA NTE CARAC TER di vidida en dos lineas usando &
& e l ca racte r & a l f i na l de la pri m e ra y a l p r in c ip i o d e la s i gu ie nte "'
WR ITE ( * ,*) 'C ON STANTE EN TERA' ,a
W R IT E ( * ,*) ' C O N STA N T E S R EA L E S ( N OTAC NOR MAL Y EXPON) ' ,b1,b2
WR ITE ( * ,*) ' ID EN T IFICADOR D E VAR IABLE R EAL ( MA X. 31 letras)' ,&
s ue ld o_d e l_ u lt i mo_ m es ,' EU R O S'
30
PROGRA M c ap 1_3
IM PL IC IT NON E
I N T E G ER : : l , m ,r e s u l
PR INT*,' TECLEA 2 NU MER OS ENTER OS SEPARADOS CON IN TRO'
R EA D * , l , m
r es u l= l* * m
PR INT * ,' EL R ESU LTADO ES:'
PR INT * ,r es u l
STOP
E ND PROGRA M ca p1_ 3
31
z
4 para tres nmeros
4. Calcular el valor de la expresin
reales x, y, z ledos por teclado y escribir el resultado por pantalla.
3x 2 + 2 y
PROGRA M c ap 1_4
R EAL : : x ,y,z , r e su l
WR IT E( * ,* ) 'DA M E 3 NU MER O S R EAL E S'
R EAD ( * ,*) x , y,z
r es u l=3 *x** 2+ 2 * y- z / 4
W R IT E( * ,* ) ' E L R E SUL TA D O E S: ' , re su l
E ND PROGRA M ca p1_ 4
PROGRA M c ap 1_5
IM PL IC IT NON E
R EA L : : a ,b , c ,x1 , x2
WR IT E( * ,* ) 'DA M E A B Y C'
R EA D ( * ,*) a , b ,c
x 1=(- b+SQRT (b ** 2-4 *a *c) ) /(2 *a)
x2=(- b-SQRT(b**2-4*a*c) ) /(2*a)
W R IT E( * ,* ) ' E L R E SUL TA D O E S: ' , x1 ,x 2
E ND PROGRA M ca p1_ 5
32
6. Codifica la expresin
sen 2 ( x) + cos 2 ( x)
PROGRA M c ap 1_6
IM PL IC IT NON E
R EA L : : x ,p ep e
R EAL, PARA METER :: pi=3.14159
WR ITE( *,*) 'DA M E EL VALOR DEL AN GULO EN RAD IAN ES'
R EAD( *,*) x
p ep e=( SIN( x)* *2+COS(x )* *2) /pi
WR ITE( *,*) ' EL RESULTADO ES' ,pepe
E ND PROGRA M ca p1_ 6
33
EJERCICIOS PROPUESTOS
1) Programa que muestre FORTRAN y FORmula TRANslation en
lneas diferentes.
2) Programa que pida por teclado una longitud expresada en pulgadas
y la muestre convertida en centmetros (1" = 2.54 cm).
3) Programa que pida una cantidad en pesetas y la muestre en euros.
4) Programa que acepte por teclado el dimetro de una circunferencia,
muestre la longitud de la circunferencia (L=2R) y el rea del
crculo encerrado (A=R 2 ).
5) Programa que pida por teclado el radio de la base y la altura de un
1
cono. Calcula y escribe el valor de su volumen (V= R 2 H ).
3
6) Programa que pida por teclado el lado de un cuadrado. Calcula y
escribe los valores de su rea (A=L 2 ) y diagonal (Teor. Pitgoras).
7) Programa que pida el radio de una esfera y calcule y muestre su
4
superficie (S=4 R 2 ) y volumen (V= R 3 ).
3
8) Programa que pida los dos catetos de un tringulo rectngulo y
muestre su hipotenusa, el rea del rectngulo cuyos lados son los
dos catetos y los dos ngulos del tringulo expresados en grados
sexagesimales.
9) Programa que pida coordenadas polares de un punto (r,alfa) y
muestre sus coordenadas cartesianas o rectangulares (x,y).
10) Programa que pida coordenadas cartesianas de los extremos de
dos vectores origen y calcule el vector suma, mostrando sus
componentes, mdulo y ngulo en grados.
11) Programa que pida una cantidad en euros y muestre la cantidad
de monedas de cada tipo (2 euros, 1 euro, 50 cntimos, 20 cntimos,
10 cntimos, 5 cntimos, 2 cntimos y 1 cntimos).
34
2 ESTRUCTURAS DE CONTROL
CONDICIONALES
SIGNIFICADO
F77
F90/95
.EQ.
==
IGUAL
.NE.
/=
DISTINTO
.LT.
<
MENOR QUE
.LE.
<=
.GT.
>
MAYOR QUE
.GE.
>=
35
INTEGER :: i=3,j=5
OPERACIN
RESULTADO
3<=i
.TRUE.
j**2-1>=0
.TRUE.
i==j
.FALSE.
i/=10
.TRUE.
ANA<PEPE
.TRUE.
<=5
Falta operando1
8.44/='XYZ'
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.
OPERADOR TIPO
SIGNIFICADO
.NOT.
UNARIO
ES LO OPUESTO A OPERANDO2
.AND.
BINARIO
36
.OR.
BINARIO
.EQV.
.NEQV.
ES .TRUE. SI
BINARIO OPERANDOS
DISTINTOS
Y SLO SI
TIENEN
LOS DOS
VALORES
.NOT.B
.TRUE.
.TRUE.
.FALSE. .TRUE.
.TRUE.
.FALSE. .TRUE.
.FALSE. .TRUE.
A.AND.B A.OR.B
A.EQV.B A.NEQV.B
.TRUE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE. .FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.FALSE. .TRUE.
.FALSE.
Tabla 2 .4: Tabla de verdad de los o pe rado r es lg icos com b ina c ionale s
MAYOR
.NOT.
.AND.
.OR.
.EQV. , .NEQV.
MENOR
T a b la 2 . 5 : O rd en d e p r e c ed en c ia d e o p e ra d o r e s lg i cos c o mb i n a c ion a l es
Fo rt ran
37
PRIORIDAD
OPERADORES ARITMTICOS
**
*, /
+ , -
.AND.
.OR.
.EQV.,.NEQV.
variable_lgica = expresin_lgica
El funcionamiento es:
Se evala la expresin_lgica.
Ej:
LOGICAL :: log1
INTEGER :: i = 10
log1 = (i==10)
38
2.6 Bloque IF
39
[ELSE
bloque de sentencias n]
END IF
[ELSE [nombre]
bloque de sentencias n]
END IF [nombre]
2.9 IF lgico
Ej:
res=0
IF (a==b) res=a+b
res=res+10
41
valor
valormin: valormax
: valormax
valormin:
42
INTEGER :: valor
parimpar: SELECT CASE (valor)
CASE (1, 3, 5, 7, 9)
WRITE (*,*) el valor es impar
CASE (2, 4, 6, 8, 10)
WRITE (*,*) el valor es par
CASE (11:)
WRITE (*,*) el valor es demasiado grande
CASE DEFAULT
WRITE (*,*) el valor es negativo o cero
END SELECT parimpar
INTEGER :: temp
friocalor: SELECT CASE (temp)
CASE (:-1)
WRITE (*,*) por debajo de 0 Celsius
CASE (0)
WRITE (*,*) Est helando
CASE (1:10)
WRITE (*,*) Hace fro
CASE (11:20)
WRITE (*,*) templado
CASE (21:)
WRITE (*,*) Hace calor
END SELECT friocalor
43
EJERCICIOS RESUELTOS
Objetivos:
45
F
N>0
VISUALIZAR
VISUALIZAR
N POSITIVO
N NEGATIVO O CERO
PROGRA M c ap 2_1
R EAL : : nu m
W R IT E( * ,* ) ' D A M E U N N U MER O'
R EAD ( * ,*) n u m
IF (num > 0) THEN
W R IT E( * ,* ) ' E S P O S IT I V O '
ELSE
WR ITE( *,*)' ES NEGATIVO O CERO'
E N D IF
E ND PROGRA M ca p2_ 1
46
VISUALIZAR
N POSITIVO
N>0
F
N<0
VISUALIZA
N NEG
VISUALIZA
ES EL 0
PROGRA M c ap 2_2
R EAL : : nu m
WR ITE ( * ,*) 'DA M E UN NU MERO'
R EAD ( * ,*) n u m
IF (num > 0) THEN
W R IT E ( * , * ) ' E S P O S I T I VO '
ELSE IF (num < 0) THEN
W R IT E ( * , * ) ' E S N EG A T I VO'
ELSE
W R IT E ( * , * ) ' E S EL 0 '
E N D IF
E ND PROGRA M ca p2_ 2
47
PROGRA M c ap 2_4
IM PL IC IT NON E
R EA L : : a ,b , c ,d , r1 , r2,p r ,p i , r
48
WR ITE ( * ,*) ' IN TRODUC E A ,B ,C, CON A , B, C CUALQU IER VALOR '
R EA D ( * ,*) a , b ,c
d= b* *2- 4* a* c
e c2: IF (a /= 0) TH EN
discriminante: IF (d == 0) THEN
r1=-b/(2*a)
r2=r1
W R IT E ( * , * ) ' S O L U C . R EALES DOB LES, R1=R 2=' ,r1,r2
E L S E IF( d > 0 ) T H EN d i s c r im in a n t e
r1=(-b+ SQR T(d) )/(2*a)
r2=(-b-SQR T(d) ) /(2*a)
WR ITE ( * ,*) 'LA S RA IC ES DEL POLINOMIO SON:'
WR IT E ( * ,*) 'R1=',r 1 ,'R2= ' ,r2
ELSE discriminante
pr=-b/(2*a)
p i= SQ R T ( A B S(d ) ) /( 2 * a )
W R IT E ( * ,*) ' S O L U C ION E S C O M PL EJ A S'
W R IT E ( * ,*) ' PA R T E R EA L : ' ,p r
W R IT E ( * ,*) ' PA R T E I M A G IN A R IA: ' , p i
E N D IF d is cr i m in ante
E L S E IF ( b / = 0 ) T H EN e c 2
r= -c/b
WR IT E (* ,*) ' SOLUC ION UN ICA , R=' ,r
E L S E IF ( c / = 0 ) T H EN e c 2
WR ITE (*,*) ' ECUAC ION IMPOSIB LE'
ELSE
WR ITE (*,*) ' ECUAC ION IND ETER M INADA'
END IF ec2
E ND PROGRA M ca p2_ 4
0 Nota < 5
Suspenso
5 Nota < 7
Aprobado
la
correspondiente
49
7 Nota < 9
Notable
Matricula de Honor
PROGRA M c ap 2_5
R EAL : : no ta
WR IT E ( * ,*) 'DA M E UNA NO TA'
R EAD ( * ,*) nota
IF (nota < 0 .OR. nota > 10) THEN
WR ITE ( *,*) 'NOTA INCORR ECTA '
E L S E IF ( n o t a < 5 ) T H EN
W R IT E ( * , * ) ' SU SP EN SO '
E L S E IF ( n o t a < 7 ) T H EN
WR ITE ( *,*) 'A PROBADO'
E L S E IF ( n o t a < 9 ) T H EN
W R IT E ( * , * ) ' N O T A B L E '
E L S E IF ( n o t a < 1 0 ) T H EN
W R IT E ( * , * ) ' SO B R ES A L I EN T EE '
ELSE
WR ITE ( *,*) 'MA TR ICU LA DE HON OR'
E N D IF
E ND PROGRA M ca p2_ 5
PROGRA M c ap 2_6
R EA L : : a ,b , c
CHARAC TER (LEN= 1) :: oper
WR IT E ( * ,*) 'DA M E 2 NU MER O S '
R EAD ( * ,*) a , b
WR IT E ( * ,*) 'DA M E UNA O PERAC ION (+ , - , * , /)'
R EAD ( * ,*) o pe r
IF (oper == '+ ') TH EN
50
PROGRA M c ap 2_7
R EAL : : nu m
WR ITE ( * ,*) 'DA M E UN NU MERO'
R EAD ( * ,*) n u m
IF (num >= 0 .AND. nu m <= 10) TH EN
WR IT E ( *,* ) n um,' PERT EN ECE AL IN T ER VAL O [0-1 0]'
ELSE
W R IT E ( * , * ) n u m , ' N O P ER TENE C E A L INT ER VA L O [ 0 - 1 0 ] '
E N D IF
E ND PROGRA M ca p2_ 7
51
PROGRA M c ap 2_8
INTEGER :: num
WR IT E ( * ,*) 'DA M E UNA O PC ION'
WR ITE ( * ,*) ' 1 PARA EJECU TAR BLOQU E 1'
WR ITE ( * ,*) ' 2 PARA EJECU TAR BLOQU E 2'
WR IT E ( * ,*) ' 3 PARA SAL IR '
R EAD ( * ,*) n u m
S E L ECT C A S E ( n u m)
CASE (1)
WR ITE ( * ,*) ' SE HACE BLOQU E 1'
CASE (2)
WR ITE ( * ,*) ' SE HACE BLOQU E 2'
CASE (3)
WR IT E ( * ,*) 'AD IO S'
CA S E D EFAU LT
WR IT E ( * ,*) ' O PC ION INCORR ECTA '
E N D SEL EC T
E ND PROGRA M ca p2_ 8
52
EJERCICIOS PROPUESTOS
1) Programa que acepte el nmero del ao, y muestre "PRESENTE" si
el nmero es el ao actual, "PASADO" si es menor o "FUTURO" si
es mayor.
2) Programa que pida un nmero natural y muestre si es par o impar.
3) Programa que pida una temperatura y su escala (Celsius/Fahrenheit)
y muestre su valor en la otra escala (0 C=32 F y 100 C=212 F).
5
Ecuacin de conversin: C= (F 32)
9
4) Programa que acepte el nmero de un ao e indique si es bisiesto o
no. Un ao es bisiesto si es mltiplo de cuatro, pero no de cien.
Excepcin a la regla anterior son los mltiplos de cuatrocientos que
siempre son bisiestos. Son bisiestos: 1600,1996, 2000, 2004. No son
bisiestos: 1700, 1800, 1900, 1998, 2002.
5) Programa que pida la longitud de los lados de un tringulo,
compruebe si los datos son correctos, muestre si es equiltero,
issceles o escaleno, y el valor de sus ngulos en grados. A saber:
los lados de un tringulo son correctos si cada uno de ellos es
menor que la suma de los otros dos. Un tringulo es equiltero si
sus tres lados son iguales, issceles si dos lados son iguales y
escaleno si sus 3 lados son distintos. Teorema del coseno a 2 =b 2 +c 2 2bc cos(b,c).
6) Programa que pida coordenadas cartesianas de un punto e indique
en qu cuadrante se encuentra dicho punto, en qu eje o si se trata
del origen de coordenadas.
53
nmero
Cuerpo
END DO
ndice es una variable entera que se usa como contador del bucle.
55
56
Precauciones:
INTEGER :: i
DO i=1,5
sentencia
END DO
WRITE (*,*) i
Aplicando la ecuacin 3-1, se obtiene que sentencia se ejecuta 5
veces. La variable ndice i toma los valores 1, 2, 3, 4 y 5. A
continuacin, el control vuelve a la sentencia DO, i toma el valor 6,
pero 6*1 > 5*1 y se salta a la sentencia WRITE, escribindose 6 por
monitor.
INTEGER :: i
DO i=5,0,-2
sentencia
END DO
Aplicando la ecuacin 3-1, se obtiene que sentencia se ejecuta 3
veces, para los valores de i: 5, 3, y 1. A continuacin, el control
vuelve a la sentencia DO, i toma el valor -1, pero (-1)*(-2) > 0*(-2) y
se salta a la sentencia siguiente a END DO.
DO i=1, 10
WRITE (*,*) HOLA
END DO
En este caso, el ndice del bucle se usa nicamente para indicarnos
cuntas veces se ejecuta el cuerpo.
acum=0
DO k = 2, 10,2
acum=acum+k
END DO
WRITE (*,*) acum
En este caso, el ndice del bucle interviene en el cuerpo del mismo.
57
DO
sentencia_1
[sentencia_2]
IF (expresin_lgica) EXIT
sentencia_3
[sentencia_4]
END DO
i=1
DO
IF (i>10) EXIT
WRITE (*,*) HOLA
i=i+1
END DO
i=2
acum=0
DO
58
IF (i>10) EXIT
acum=acum+i
i=i+2
END DO
WRITE (*,*) acum
INTEGER :: num,cont=0
DO
WRITE (*,*)
WRITE (*,*) "Dame un numero de 0 a 10"
READ (*,*) num
cont=cont+1
IF (num>=0.AND.num<=10) EXIT
WRITE (*,*) "Has tecleado",num
WRITE (*,*) "El numero debe estar entre 0 y 10"
WRITE (*,*) "Vuelve a intentarlo"
END DO
WRITE (*,*) "*****ENHORABUENA*****"
WRITE (*,*) "lo conseguistes en",cont,"veces"
DO WHILE (expresin_lgica)
sentencia_1
[sentencia_2]
Cuerpo
END DO
59
i=1
DO WHILE (i<=10)
WRITE (*,*) HOLA
i=i+1
END DO
i=2
acum=0
DO WHILE (i<=10)
acum=acum+i
i=i+2
END DO
WRITE (*,*) acum
INTEGER :: num,cont=1
WRITE (*,*) Dame un numero de 0 a 10
READ (*,*) num
DO WHILE (num<0.OR.num>10)
WRITE (*,*) "Has tecleado",num
WRITE (*,*) "El numero debe estar entre 0 y 10"
WRITE (*,*) Vuelve a intentarlo
WRITE (*,*) Dame un numero de 0 a 10
60
INTEGER :: num,cont=0
DO
WRITE (*,*)
WRITE (*,*) "Dame un numero de 0 a 10"
READ (*,*) num
cont=cont+1
IF (num>=0.AND.num<=10) EXIT
IF (cont<3) CYCLE
WRITE (*,*) "Has tecleado",num
WRITE (*,*) "El numero debe estar entre 0 y 10"
WRITE (*,*) "Vuelve a intentarlo"
END DO
WRITE (*,*) "*****ENHORABUENA*****"
WRITE (*,*) "lo conseguistes en",cont,"veces"
61
[nombre:] DO
sentencia_1
[sentencia_2]
END DO [nombre]
La sintaxis general de un bucle iterativo con un nombre aadido es:
Cuerpo
END DO [nombre]
62
Los ndices
distintos.
de
bucles
anidados
deben
tener
identificadores
[externo:] DO
bloque_de_sentencias1
[IF (expresin_lgica) CYCLE [externo]]
bloque_de_sentencias2
IF (expresin_lgica) EXIT [externo]
bloque_de_sentencias3
[interno:] DO
bloque_de_sentencias4
[IF (expresin_lgica) CYCLE [interno]]
bloque_de_sentencias5
IF (expresin_lgica) EXIT [interno]
bloque_de_sentencias6
END DO [interno]
bloque_de_sentencias7
END DO [externo]
63
numero: DO i=3,6
fact=1
factorial_de_numero: DO j=1,i
fact=fact*j
END DO factorial_de_numero
WRITE (*,*) FACTORIAL DE ,i,=,fact
END DO numero
Para cada valor de i, j toma todos los valores desde 1 hasta esa i,
multiplicndolos entre s para calcular el factorial de ese nmero i.
Ejemplo:
64
EJERCICIOS RESUELTOS
Objetivos:
65
PROGRA M c ap 3_1
IM PL IC IT NON E
INTEG ER : : i
DO i= 1 ,100
W R IT E ( * , * ) ' H O L A A T O D O S'
END DO
E ND PROGRA M ca p3_ 1
PROGRA M c ap 3_2
IM PL IC IT NON E
I N T E G ER : : s u ma= 0, i
DO i= 1 ,100
suma=suma+ i
! W R I T E ( * , * ) ' i ,s u ma ' , i , s u ma
END DO
WR ITE( *,*) ' EL RESULTADO ES' ,suma
E ND PROGRA M ca p3_ 2
66
Activa la sentencia
significado.
comentada
del
programa
estudia
su
PROGRA M c ap 3_3
IM PL IC IT NON E
INTEGER : : su ma p ar= 0, i
DO i= 100 ,1 0 ,-2
s u map ar=s u map ar+ i
W R IT E( * ,* ) ' i ,s u mapa r' , i ,s u map ar
END DO
WR ITE( *,*) ' EL RESULTADO ES' ,suma par
E ND PROGRA M ca p3_ 3
PROGRA M c ap 3_4
IM PL IC IT NON E
I N T E G ER : : s i g n o , i
R EAL : : p ic
p i c=0
s ign o=1
D O i= 1 ,99,2
p i c=p i c+1 . 0 / i*s i gn o
s ign o=-s ig no
END DO
W R IT E( * ,* ) ' E L R E SUL TA D O E S' , 4* p ic
E ND PROGRA M ca p3_ 4
67
PROGRA M c ap 3_5
I N T E GER : : c on t = 0
R EAL : : nu m,acu m=0
CHARAC TER (LEN= 2) :: seguir
DO
WR ITE( *,*) 'DAME UN NU MERO'
R EAD (* ,* ) n um
c ont= co nt+ 1
acum=acum+ num
W R IT E( * ,* ) ' O TRO N U MER O?'
W R IT E( * ,* )
' T ECLEA
A PO STR OF E S'
SI
NO
EN
M A YU SC U L A S
ENTRE
R EA D ( * ,* ) s e g u i r
I F ( s e g u ir /= ' S I') EXI T
END DO
WR IT E( * ,* ) ' LA M ED IA E S:' ,a cum/c ont
E ND PROGRA M ca p3_ 5
68
PROGRA M c ap 3_6
IM PL IC IT NON E
I N T E GER : : c on t
R EAL : : num,acum
CHARAC TER (LEN= 2) :: seguir,mas_medias
e xt e rn o: D O
c ont= 0
a c u m= 0
interno: DO
WR ITE(*,*) 'DA M E UN NU MERO'
R EA D ( * , * ) n u m
c ont= con t+1
acum=acum+num
WRIT E(*,*) ' OTR O NU MER O?'
WR IT E(* ,*) ' TECL EA
A PO STR OF E S'
SI
NO
EN
MA YUSCULA S
EN TR E
EN
M A YU SC U L A S
ENTRE
R EA D ( * , * ) s e g u i r
I F ( s e g u i r /= ' S I') E X I T i nt e rn o
END DO in t ern o
WR IT E( * ,* ) 'LA M EDIA ES:' ,a cu m/co nt
WR IT E( * ,* ) 'O TRA M ED IA ?'
W R IT E( * ,* )
' T ECLEA
A PO STR OF E S'
SI
NO
69
hacerse antes de entrar al bucle interno WHILE, para que cada vez
que se calcule otra media se vuelvan a poner a cero sus valores.
Si el nmero de elementos de la lista y el nmero de listas es
conocido a priori, Cmo cambia el cdigo del programa? Sustituye
los bucles WHILE por dos iterativos.
7. Calcula y escribe por pantalla la cantidad de nmeros positivos que
hay en una lista dada de N elementos. El proceso se repite todas las
veces que el usuario quiera.
PROGRA M c ap 3_7
e xt e rn o: D O
WR IT E( * ,* ) ' "DAM E EL NU M ERO D E EL EM EN TO S DE LA L ISTA "'
R EAD (* ,* ) n
pos= 0 ! IMPORTANTE, IN IC IALIZAR PARA CADA LISTA
int e rno: DO i= 1,n
WR ITE(*,*) ' IN TRODUC E NUMER O' ,i
R EA D ( * , * ) n u m
I F ( n u m > 0 ) T H EN
pos= pos+1
E N D IF
END DO in t ern o
WR ITE( *,*) 'CANTIDAD D E POSITIVOS DE LOS' ,n,' LEID OS ES:' ,pos
WR IT E( * ,* ) 'QU I ER ES S E GU IR CON OTRA L I S TA ( S /N) ?'
R EA D ( * ,* ) s e g u i r
IF (seguir /= 'S') EXIT externo
END DO externo
E ND PROGRA M ca p3_ 7
70
PROGRA M c ap 3_8
IM PL IC IT NON E
L O G IC A L : : p o s i t i v
R EAL : : nu m
DO
WR ITE( *,*) 'DAME UN NU MERO POSITIVO'
R EAD (* ,* ) n um
IF (num > 0) THEN
posit i v= . T RUE .
ELSE
p o s it i v= . F A L S E .
E N D IF
I F ( .N O T . p o s it i v) E X I T
END DO
W R IT E( * ,* ) n u m ,' N O E S P O S IT IV O '
E ND PROGRA M ca p3_ 8
PROGRA M c ap 3_9
IM PL IC IT NON E
71
72
EJERCICIOS PROPUESTOS
1) Programa que sume y muestre por pantalla todos los nmeros
naturales del 1 hasta el 5, ambos incluidos. Lo mismo pero de 1 a
50; lo mismo pero de 1 a 500.
2) Programa que sume el nmero 5 y sus mltiplos hasta el 100
inclusive y muestre el resultado por pantalla.
3) Realizar un programa que calcule y muestre la suma de los
mltiplos de 5 comprendidos entre dos valores A y B. El programa
no permitir introducir valores negativos para A y B y verificar
que A es menor que B. Si A es mayor que B, intercambiar sus
valores.
4) Programa que calcule y muestre e x utilizando los cuatro primeros
trminos de la serie: e x = 1 + x /1! + x 2 /2! + x 3 /3!. El valor exacto
se puede obtener con la funcin intrnseca EXP(argumento).
5) Programa que lea un nmero natural y diga si es o no es triangular .
A saber: un nmero N es triangular si, y solamente si, es la suma de
los primeros M nmeros naturales, para algn valor de M. Ejemplo:
6 es triangular pues 6 = 1 + 2 + 3. Una forma de obtener los
n(n + 1)
nmeros triangulares es aplicando la frmula:
n N .
2
6) Programa que encuentre un nmero natural n y otro m tal que se
cumpla: 1 2 + 2 2 + 3 2 + 4 2 + + m 2 = n 2 . Solucin: 1 2 + 2 2 + 3 2 + 4 2
+ + 24 2 = 70 2 .
7) Programa que muestre la serie de Fibonacci 0, 1, 1, 2, 3, 5, 8, 13,
21,Los primeros trminos son 0 y 1, los siguientes suma de los
dos anteriores.
8) Programa que verifique si un nmero es reproductor de Fibonacci.
A saber: un nmero n se dice reproductor de Fibonacci si es capaz
de reproducirse a s mismo en una secuencia generada con los m
dgitos del nmero en cuestin y continuando en la serie con un
nmero que es la suma de los m trminos precedentes. Ejemplo: 47
es un nmero reproductor de Fibonacci pues la serie: 4, 7, 11, 18,
29, 47, contiene el 47.
9) Retoma el ejercicio anterior y explora todos los nmeros
reproductores de Fibonacci de 2 y de 3 dgitos. Soluciones para dos
dgitos: 14, 19, 28, 47, 61, 75. Soluciones para tres dgitos: 197,
742.
10) Programa que pida por teclado la nota de examen, mientras sea
suspenso.
73
74
4 ARRAYS
4.1 Introduccin
Array s
Ejemplos:
X(-1,1)
X(-1,2)
X(-1,3)
X( 0,1)
X( 0,2)
X( 0,3)
X( 1,1)
X( 1,2)
X( 1,3)
76
Array s
En sentencias de asignacin.
Ejemplo:
mat1 =
2
4
6
77
Array s
Ejemplos:
0, 0, 0, 0, 5, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 20
Ejemplo:
v1 = (/ 1, 2, 3, 4, 5/)
v2 = (/ (i, i= 10, 6, -1) /)
mat1 = RESHAPE ( (/ 1, 2, 3, 4, 5, 6/) , (/2,3/) )
Tambin se pueden inicializar arrays usando bucles DO iterativos.
Por ejemplo, sean las declaraciones de arrays:
INTEGER :: i,j,k=0
INTEGER, DIMENSION (5) :: v1,v2
INTEGER, DIMENSION (2,3) :: mat1
DO i=1,5
v1(i)=i
END DO
78
Array s
DO i=10,6,-1
v2(11-i)=i
END DO
externo : DO j=1,3
interno :DO i=1,2
k=k+1
mat1(i,j)=k
END DO interno
END DO externo
Ejemplo:
INTEGER :: i,j
INTEGER, PARAMETER :: TM=5,TMF=2,TMC=3
INTEGER, DIMENSION (TM) :: v1,v2
INTEGER, DIMENSION (TMF,TMC) :: mat1
DO i=1,TM
WRITE (*,*) DAME ELEMENTO,i,DE v1 Y v2
READ (*,*) v1(i),v2(i)
END DO
DO i=1,TMF
DO j=1,TMC
WRITE (*,*) DAME ELEMENTO,i,j,DE mat1
READ (*,*) mat1(i,j)
79
Array s
arg1 y los dems argumentos, si los hay, son los argumentos que se
van a leer.
Ejemplos:
Ejemplo:
Array s
Todas las formas anteriores usadas para leer arrays son tambin
vlidas para escribir arrays, sin ms que sustituir la palabra
reservada READ por WRITE, en las instrucciones correspondientes.
dos
veces
exponencial
de
v3,
v3,
81
Array s
INTEGER :: i
INTEGER, DIMENSION (5) :: v1 =(/ 9,8,7,6,5 /),&
v2 =(/ -9,-8,-7,-6,-5 /),v3,v4
DO i=1,5
v3(i)=v1(i)+v2(i)
v4(i)=v1(i)*v2(i)
WRITE (*,*) v3(i), 2*EXP(REAL(v3(i)))
WRITE (*,*) v4(i), ABS(v4(i))
END DO
un triplete de ndices o
un vector de ndices .
Sea la declaracin:
82
Array s
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
10
12
.
las filas impares y columnas pares es: matriz(1:3:2,2:4:2)=
Array s
[ELSEWHERE [nombre]
bloque n de sentencia(s) de asignacin de arrays]
END WHERE [nombre]
Su funcionamiento es el siguiente:
WHERE (mati>0)
matf=SQRT(mati)
ELSEWHERE
matf=0
END WHERE
La expresin mscara mati>0 produce un array lgico cuyos elementos
son cierto cuando los elementos correspondientes de mati son
positivos y falso cuando los elementos correspondientes de mati son
negativos o cero.
84
Array s
85
Array s
Ejemplo:
86
Array s
ALLOCATE ( arr1(
[,STAT=estado] )
d1
,d2]
...
[,
arr2(
d1
,d2]]
...)
87
Array s
Ejemplo:
88
EJERCICIOS RESUELTOS
Objetivos:
89
Array s
PROGRA M c ap 4_1
IM PL IC IT NON E
INTEG ER : : i
R EAL : : me d ia=0
R EA L ,D I M E N S IO N ( 5 ) : : v
D O i= 1 ,5
WR ITE( *,*) 'DAME COMPON ENTE' ,i
R EA D ( * , * ) v( i )
END DO
D O i= 1 ,5
m e d ia= me d ia+ v( i )
END DO
m e d ia= med i a /5
WR IT E( * ,* ) ' LA M ED IA E S:' , med i a
E ND PROGRA M ca p4_ 1
90
Array s
WRIT E( *,*) 'DAME EL VALOR DE X1 Y X2'
R EAD( *,*) x(1) ,x(2)
DO i= 3 , n
x( i)=x( i- 1)+ 3*x ( i-2)+4 .0 /3
WR ITE( *,*) ' X(' ,i,' ):',x( i)
END DO
E ND PROGRA M ca p4_ 2
PROGRA M c ap 4_3
INTEGER :: x,sw itch=0,i
I N T E GER , D IM EN S ION ( 6) : : v= ( /1 7 ,3 ,2 2 ,11 ,3 3 ,19 / )
WR ITE( *,*) 'DA M E UN NU MER O'
R EAD( *,*) x
D O i= 1 ,6
I F ( x = = v( i)) T H EN
WR ITE(*,*) ' ENC ONTRADO EN POSIC ION' ,i
sw itch=1
E N D IF
END DO
IF (sw itch == 0) TH EN
WR ITE( *,*) 'NO ENCON TRADO'
E N D IF
E ND PROGRA M ca p4_ 3
91
Array s
PROGRA M c ap 4_4
I N T E G ER : : n u m , i ,c h iva t o = 0
INTEGER ,PARAMETER :: NC=5
I N T E GER , D IM EN S ION ( N C ) : : vec= ( / 1 ,1 ,6 , 6,7 /)
WR ITE( *,*) 'DA M E UN NU MER O'
R EAD( *,*) num
DO i= 1,NC
I F ( ve c( i) == n u m) TH EN
WR IT E(* , *) ' PR I MERA CO INC ID ENC IA E N PO S IC ION ' , i ,'D EL V E CTOR '
c hiva t o = 1
EXIT
E N D IF
END DO
IF (chiva to == 0) THEN
W R IT E( * ,* ) ' N O E X IS T E EL N U M ER O EN E L V EC T O R '
E N D IF
E ND PROGRA M ca p4_ 4
92
Array s
WR ITE( *,*) ' ENCONTR ADO EN POSIC ION' ,i
ELSE
WR ITE( *,*) 'NO ENCON TRADO'
E N D IF
E ND PROGRA M ca p4_ 5
PROGRA M c ap 4_6
I N T E GER : : x , iz q=1 , de r=7 , cen
INT EGER , D IM EN SION( 7):: v= ( /-2 ,0 ,4 ,6 ,8 ,19 ,23 /)
WR ITE( *,*) 'DA M E UN NU MER O'
R EAD( *,*) x
c en=( iz q+ d er ) / 2
W R IT E( * ,* ) ' C EN TRO', c en
DO WH ILE (x/= v( ce n).AND .izq<der)
IF (x> v(cen)) THEN
izq= cen+1
ELSE
der= cen-1
E N D IF
c en=( iz q+ d er ) / 2
WR IT E( * ,* ) 'C ENTRO ' ,ce n
END DO
IF (x== v( ce n)) THEN
WR ITE( *,*) ' ENCONTR ADO EN POSIC ION' ,cen
ELSE
WR ITE( *,*) 'NO EXISTE EL VALOR BU SCADO'
E N D IF
93
Array s
E ND PROGRA M ca p4_ 6
PROGRA M c ap 4_7
INTEGER::aux,i,j
INTEGER , PARAMETER ::NC= 6
I NT E GER , D IM EN S ION(NC) :: ve c
ve c = ( / 8 ,5 ,1 5 ,2 ,- 19 ,0 /)
c ant i da d_p ar e jas : D O i=N C - 1 ,1,- 1
p a r e ja: D O j= 1 , i
o rd en ar_ pa re ja : IF ( ve c( j ) > ve c( j+1) ) TH EN
aux= ve c(j)
ve c ( j)= ve c ( j+ 1)
ve c ( j+1 ) = a u x
E N D IF o rd en ar _pa re j a
END DO p ar e ja
END DO ca nt id ad _pa re jas
WR ITE( *,*) ' EL VEC TOR ORDENADO ES'
! $$$ $$$ DO i= 1 ,NC
! $$$ $$$
WR IT E( * ,* ) ve c ( i)
94
Array s
PROGRA M c ap 4_8
IM PL IC IT NON E
INTEGER::i,j
I NT E GER , D IM EN S ION( 2 ,3):: ma t
W R IT E( * ,* ) ' D A M E LAS C O MPON ENT ES DE LA MATR IZ '
R EAD( *,*) mat
f ila s: DO i=1 ,2
c o lu m nas : D O j=1 ,3
W R IT E(* , * ) ' C O M PON EN T E ' , i, j , ' : ' ,ma t ( i ,j) , LOC ( mat ( i , j) )
END DO c o lu mnas
E N D D O f i la s
E ND PROGRA M ca p4_ 8
MAT
MAT(1,1)
MAT(2,1)
MAT(1,2)
MAT(2,2)
MAT(1,3)
MAT(2,3)
PROGRA M c ap 4_9
95
Array s
I NT E GER ,D IM EN S ION( 2 ,3):: ar=&
R E SHA PE ( ( /1 , 1 ,2 ,2 , 3 ,3 /) , ( /2 ,3 /) )
c o lu mnas: DO j= 1 ,3
f i la s : D O i = 1 , 2
W R IT E(* , * )
WRIT E(*,*) 'COM PONENT E ' , i, j , ' = ', a r ( i , j )
W R IT E(* , * )
WR IT E(* ,*) 'D IR ECC ION DE MEMORIA',LOC(ar(i,j))
END DO filas
END DO co lu mn as
E ND PROGRA M ca p4_ 9
P R OGRA M c ap 4_1 0
INTEGER::x,sw ,i,j
INTEGER , PARAMETER:: N F=3,NC=5
INTEGER , D IMEN SION(N F ,NC):: mat
WR IT E( * ,* ) ' da me la mat r iz p or c o lu mnas'
R EAD( *,*) (( mat( i,j) ,i=1,N F) ,j=1,NC)
sw =0
WR ITE( *,*) 'DA M E UN NU MER O'
R EAD( *,*) x
W R IT E( * ,* ) ' LA MA TRI Z E S'
!.............................
DO i= 1,NF
W R IT E( * ,* ) ( ma t ( i , j) , j = 1 ,N C )
END DO
!............................
!WR ITE(*,*) ma t
!..............................
! f i l a s : D O i = 1 ,N F
! c o lu mnas : DO j=1 ,NC
!
96
W R IT E(* , * ) ma t ( i , j)
Array s
! END DO c o lu mnas
! END DO f ilas
!.............................
f ila s: DO i=1 ,N F
c o lu mnas : DO j=1 ,NC
c o inc i d ir : IF ( x = = m a t ( i, j ) ) T H EN
sw =1
WR ITE( *,*) 'ENCON TRADO EN FILA:' ,i,'C OLU MNA:' ,j
END IF c o in c id ir
END DO c o lu mnas
E N D D O f i la s
IF (sw ==0) WR ITE( *,*) 'N O EXISTE EL VA LOR BU SCADO'
E ND PROGRA M ca p4_ 10
P R OGRA M c ap 4_1 1
INTEGER:: j,k
INTEGER , PARAMETER:: NC= 4
R EAL : : mo du
R EA L ,D I M E N S IO N ( N C ) : : v1 = - 1 ., v2 = 2 . , v3 = - 3 . , s
DO j= 1,NC
s ( j ) = v1 ( j ) + v2 ( j)+ v3 ( j)
W R IT E( * ,* ) ' C O M PON EN T E' , j , ' D EL V EC T O R SU M A : ' , s ( j)
END DO
! $$$ $$$ s=v1 + v2 + v3
! $$$ $$$ WR IT E( * ,* ) 'VECTOR SU MA:' ,s
mo du= 0
DO k=1,NC
mo du= mo du+ s(k) **2
END DO
mo du= SQRT ( mod u)
97
Array s
W R IT E( * ,* ) ' E L MOD U L O D EL VEC T OR SUM A E S: ' ,mo du
E ND PROGRA M ca p4_ 11
P R OGRA M c ap 4_1 1
INTEGER , PARAMETER:: NC= 4
R EAL : : mo du
R EA L ,D I M E N S IO N ( N C ) : : v1 = - 1 ., v2 = 2 . , v3 = - 3 . , s
s= v1 + v2 + v3
W R IT E( * ,* ) ' V ECT OR S U MA : ' ,s
modu= SQRT(SUM( s**2))
W R IT E( * ,* ) ' E L MOD U L O D EL VEC T OR SUM A E S: ' ,mo du
E ND PROGRA M ca p4_ 11
componentes de los
PARAMETER usado
en el programa, los
mismo se reducen a
P R OGRA M c ap 4_1 2
INTEGER:: i,j
INTEGER ,PARAMETER::N= 3 ,M=4
R EAL : : mo du
R EAL,D IMEN SION(N ,M):: a
R EA L ,D I M E N S IO N ( M ) : : s
!NU M ERO D E F I LA S D E A ES N DE V ECTOR E S A SU MAR
!NU M ERO D E COLUMNA S D E A ES N D E ELEM. DE CADA VECTOR
f ila s: DO i=1 ,N
c o lu mnas : DO j=1 ,M
WR ITE(*,*) ' IN TRODUC E LA CO M PON ENTE ', i ,j , ' D E LA M A TR IZ A '
R EA D ( * ,* ) a ( i , j)
END DO c o lu mnas
98
Array s
E N D D O f i la s
DO i= 1,M
s(i)=0
END DO
c o lu mnas: DO j= 1 ,M
f i la s : D O i = 1 ,N
s(j)=s(j)+a(i,j)
END DO filas
W R IT E( * ,* ) ' C O M PON EN T E' , j , ' D EL V EC T O R SU M A : ' , s ( j)
END DO co lu mn as
s u mcu ad=0
DO k=1,M
s u mcu ad=s u mcu ad+s ( k) **2
WR ITE( *,*) ' SUMA D E CUADRADOS D E COMP. DE S ES:' ,sumcuad
END DO
mo du= SQRT (su mcua d)
W R IT E( * ,* ) ' E L MOD U L O D EL VEC T OR SUM A E S: ' ,mo du
E ND PROGRA M ca p4_ 12
P R OGRA M c ap 4_1 2
INTEGER:: j
INTEGER ,PARAMETER::N= 3 ,M=4
R EAL : : mo du
R EAL,D IMEN SION(N ,M):: a
R EA L ,D I M E N S IO N ( M ) : : s
!NU M ERO D E F I LA S D E A ES N DE V ECTOR E S A SU MAR
!NU M ERO D E COLUMNA S D E A ES N ELEM. D E CADA VECTOR
WR IT E( * ,* ) 'DA M E LA MA TR IZ POR F ILA S'
R EA D ( * ,* ) ( ( a ( i , j) , j=1 ,M ) , i= 1 ,N)
c o lu mnas: DO i= 1 ,M
s(i)=SUM(a(1:N,i))
W RIT E( *,*) ' el em en t o ' , i ,' d e l vec t o r su m a: ' , s( i)
END DO co lu mn as
modu= SQRT(SUM( s**2))
W R IT E( * ,* ) ' E L MOD U L O D EL VEC T OR SUM A E S: ' ,mo du
E ND PROGRA M ca p4_ 12
99
Array s
P R OGRA M c ap 4_1 3
INTEGER:: i,j
INTEGER ,PARAMETER::N= 3 ,M=2
R EAL ,D IMEN SION(N ,M ):: mat 1 ,mat 2 ,s uma
!***LECTURA DE LAS MATRICES, POR FILAS
f ila s: DO i=1 ,N
c olu mnas: DO j=1,M
WRIT E(*,*) 'ELEME N T O ' , i , j ,' D E M A T 1 Y M A T 2 '
R EA D ( * ,* ) mat 1 ( i, j ) , m a t 2 ( i , j)
END DO c o lu mnas
E N D D O f i la s
! ***CALCULO D E LA MATR IZ SU MA , POR FILA S
DO i= 1,N
DO j= 1,M
s u ma( i , j) = ma t 1 ( i , j) + mat 2 ( i , j)
END DO
END DO
! $$$ $$$ suma= ma t1+mat 2 !o pe ra nd o c on la s mat r ices co mp leta s
! ***VISUALIZAC ION D E LA M A T R I Z SUM A , POR F IL A S
P R INT *
W R IT E( * ,* ) ' MA TR I Z S U MA '
P R INT *
DO i= 1,N
W R IT E( * ,* ) ( s u ma ( i ,j ) , j= 1 , M )
END DO
E ND PROGRA M ca p4_ 13
P R OGRA M c ap 4_1 3
IM PL IC IT NON E
INTEGER , PARAMETER:: N F=3,NC=2,N M=2
100
Array s
R EAL , D I MEN S ION(NF ,NC ,N M) :: x
R EAL , D I MEN S ION(NF ,NC ):: s uma= 0
INTEGER:: i,j,k
!***LECTURA DE LAS MATRICES, POR FILAS
mat r iz: DO k= 1 ,NM
f i la s : D O i = 1 ,N F
c o lu mna s : D O j=1 ,N C
W R IT E( * ,* ) ' E L EM E N T O ' , i , j ,' D E M A T R IZ ' ,k
READ(*,*) x(i,j,k)
END DO colu mnas
END DO filas
E N D D O ma t r iz
! ***CALCULO D E LA MATR IZ SU MA
f ila s: DO i=1 ,N F
colu m n as: DO j=1,NC
m a t r iz: D O k = 1 ,N M
su m a( i, j ) = su ma( i ,j ) + x( i , j ,k )
END DO matriz
END DO c o lu mnas
E N D D O f i la s
! ** * VISUAL IZAC ION D E EL EM ENT O S DE LA MATR IZ SU MA , POR F ILA S
P R INT *
PR INT * ,' MAT RIZ SUM A'
P R INT *
DO i= 1,NF
W R IT E( * ,* ) ( s u ma ( i ,j ) , j= 1 ,NC )
END DO
E ND PROGRA M ca p4_ 13
101
Array s
MAT 2 = 2 5
3 6
P R OGRA M c ap 4_1 4
INTEGER:: i,j,k
INTEGER ,PARAMETER::N= 2 ,M=3,L=2
R EAL,D IMEN SION(N ,M):: mat 1
R EA L ,D I M E N S IO N ( M , L ) : : mat 2
R EAL,D IMEN SION(N ,L)::prod
m at 1= R ESHA P E(( /1 , 1,2 , 2 ,3 ,3 /) , ( /N ,M / ) )
mat 2=R ESHA P E(( /- 1,- 2,-3 ,-4 , -5 ,- 6/) ,( /M , L /))
! ** *C A LC U L O D E LA M A TR IZ PROD U C TO * * *
DO i= 1,N
DO j= 1,L
prod(i,j)=0
DO k= 1,M
prod(i,j)= prod(i,j)+ mat1(i,k)*mat2(k,j)
END DO
END DO
END DO
! $$$ $$$ pro d= mat mul( ma t1 ,mat2 ) !fu nc ion int r ins ec a tr an sfor mac iona l
!***VISUAL. DE MATRIZ PR ODUCTO,POR FILAS
W R IT E( * ,* )
WR ITE( *,*) ' MATR IZ PRODUC TO'
W R IT E( * ,* )
DO i= 1,N
W R IT E( * ,* ) ( p r o d ( i , j) , j=1 , L )
END DO
E ND PROGRA M ca p4_ 14
102
Array s
P R OGRA M c ap 4_1 5
I NT E GER , AL LOCA TAB LE , D I MEN S ION(:) :: ve c to r
I N T E G ER : : e r r o r
R EAL :: med i a
W R IT E( * ,* ) ' D A M E N U M ER O D E E L E M EN T O S D EL VEC T O R '
R EAD( *,*) num
AL LOCA TE ( ve ct or(1 :nu m) ,STAT= er ro r)
IF (error /= 0) THEN
WR IT E( * ,* ) 'NO SU FIC IENT E ESPAC IO MEM OR IA'
STOP
E N D IF
WRIT E( *,*) 'DAME EL VECTOR'
R EAD( *,*) vect or
m e d ia= SUM ( ve cto r) /R EA L ( nu m)
WR IT E( * ,* ) ' LA M ED IA E S' , me dia
D EAL LOCAT E ( ve c to r ,STA T=er r or)
IF (error /= 0) THEN
WR ITE( *,*) ' ERROR AL LIB ERAR LA MEMOR IA'
STOP
E N D IF
E ND PROGRA M ca p4_ 15
103
Array s
104
Array s
EJERCICIOS PROPUESTOS
1) Programa que pida el grado de un polinomio (inferior a diez), sus
coeficientes y un valor de x para evaluarlo.
2) Programa que pida los grados de dos polinomios (inferior a diez y
no tienen porqu ser iguales), sus coeficientes y muestre por
pantalla el polinomio suma.
3) Programa que pida los grados de dos polinomios (inferior a diez y
no tienen porqu ser iguales), sus coeficientes y muestre el
polinomio producto.
4) Programa que pida coordenadas cartesianas de los extremos de dos
vectores, escriba el ngulo que forman (en grados) y su producto
escalar utilizando el coseno del ngulo comprendido entre ambos.
5) Programa que pida coordenadas cartesianas de los extremos de dos
vectores, escriba por pantalla el ngulo que forman (en grados) y el
mdulo de su producto vectorial utilizando el seno del ngulo
comprendido entre ambos.
6) Programa que pida las temperaturas de los das de la semana.
Posteriormente escribir los nmeros de los das que superen la
temperatura media.
7) Programa que calcule el mximo y el mnimo de un vector de
nmeros de dimensin variable, como mucho 10.
8) Programa que lea un nmero natural por teclado, almacenando cada
dgito del mismo en un elemento de un vector y compruebe si es
narcisista . A saber: un nmero de n dgitos es narcisista si coincide
con la suma de las potencias de orden n de sus dgitos. Ejemplo:
153, pues 1 3 +5 3 +3 3 = 1+125+27=153. Los nmeros 370 y 371 son
tambin narcisistas. Cmo buscaras todos los nmeros narcisistas
de dos y de 4 dgitos?
9) Programa que lea por teclado una matriz 3x3 y muestre su matriz
traspuesta.
10) Programa que obtenga la recta de regresin y=mx+b de n parejas
de valores (x,y) y el coeficiente de correlacin lineal r .
y x x xy
n x ( x )
n xy x y
( n x ( x ) )( n y ( y ) )
n xy x y
m = 2 2 b =
n x ( x )
r=
105
Array s
11) Programa que lea por teclado una matriz M(3x3) y muestre las
matrices M+M y MxM.
12) Programa que calcule el mximo de cada columna par y el
mnimo de cada columna impar de una matriz de 5 filas por 6
columnas.
13) Programa que compruebe si una matriz A es idempotente de
grado 2, es decir, si A=A 2 .
14)
96
39
84
23
106
64
43
76
59
37
98
25
82
45
62
57
78
5 PROCEDIMIENTOS
5.1 Diseo descendente
Permite
usar
programadores.
procedimientos
construidos
por
otros
107
Procedimientos
5.2 Funciones
Cabecera de funcin
Seccin de especificaciones
Seccin de ejecucin
Terminacin de la funcin
A continuacin, se explica en detalle la estructura anterior.
108
nombre_funcion = expresion
109
Procedimientos
PROGRAM conversion
REAL:: cent, x,var1,var2
110
PROGRAM ejemplo
INTEGER:: i, n, factorial
! argumento actual y variable local a la unidad de programa principal
WRITE (*,*) Teclee un numero entero:
READ (*,*) i
n = factorial (i)
..
END PROGRAM ejemplo
5.3 Subrutinas
Procedimientos
Cabecera de subrutina
Seccin de especificaciones
Seccin ejecutable
Terminacin de subrutina
112
PROGRAM principal
INTEGER :: g,m,s
REAL:: n,gd
Ejemplo:
INTENT(IN),
DIMENSION(d1,d2)::matriz
perfil
Procedimientos
Ejemplo:
MODULE mod1
CONTAINS
SUBROUTINE sub1 (matriz)
INTEGER,
asumido
INTENT(INOUT),
DIMENSION(:,:)::matriz
perfil
MODULE nombre_modulo
[SAVE]
Declaracin e inicializacin datos compartidos
USE nombre_modulo1[,nombre_modulo2],
114
MODULE comparte_datos
IMPLICIT NONE
SAVE
INTEGER, PARAMETER:: TM=5
INTEGER:: i
INTEGER, DIMENSION(TM) :: v1=1,v2=(/ (i, i=10,14) /)
INTEGER, DIMENSION(TM,2) :: m
END MODULE comparte_datos
PROGRAM principal
USE comparte_datos
IMPLICIT NONE
INTEGER :: j
WRITE(*,*) 'v1',v1
WRITE(*,*) 'v2',v2
v1=v1+v2
WRITE(*,*) 'v1',v1
CALL sub
WRITE(*,*) 'm'
DO i=1,TM
WRITE(*,*) (m(i,j),j=1,2)
END DO
END PROGRAM principal
SUBROUTINE sub
USE comparte_datos
IMPLICIT NONE
m( : , 1 ) = v1
m( : , 2 ) = v2
END SUBROUTINE sub
115
Procedimientos
MODULE nombre_modulo
[SAVE]
Declaracin e inicializacin datos compartidos
CONTAINS
Estructura general procedimiento1
[Estructura general procedimiento2]
USE nombre_modulo1[,nombre_modulo2]
MODULE mod1
CONTAINS
SUBROUTINE sub1 (a, b, sumar)
IMPLICIT NONE
INTEGER, INTENT(IN):: a,b
INTEGER, INTENT(OUT):: sumar
sumar=a+b
116
Ejemplo:
PROGRAM principal
IMPLICIT NONE
INTEGER:: a=5, b=7
REAL, EXTERNAL:: fun
REAL:: x
CALL sub (fun, a, b, x)
WRITE(*,*) resultado,x
END PROGRAM principal
SUBROUTINE sub (f, a,b,res)
117
Procedimientos
IMPLICIT NONE
REAL, EXTERNAL:: f
INTEGER, INTENT(IN):: a,b
REAL, INTENT(OUT):: res
res=f(a)+b**2
END SUBROUTINE sub
REAL FUNCTION fun(a)
INTEGER, INTENT(IN):: a
fun=(2.*a-5.)/7.
END FUNCTION fun
EXTERNAL:: nombre_subrutina
Ejemplo:
118
119
Procedimientos
FUNCTION
nom_fun
([List
arg
form])
RESULT
120
nombre_argumento_formal= argumento_actual
MODULE mod
CONTAINS
FUNCTION calcula (primero, segundo, tercero)
Ejemplo:
MODULE mod
CONTAINS
SUBROUTINE sub (arg1, arg2, arg3)
INTEGER, INTENT(IN), OPTIONAL:: arg1
INTEGER, INTENT(IN):: arg2
INTEGER, INTENT(OUT):: arg3
121
Procedimientos
122
EJERCICIOS RESUELTOS
Objetivos:
123
Procedimientos
PROGRA M c ap 5_1
IM PL IC IT NON E
I N T E GER : : a , b ,s u ma
W R IT E( * ,* ) ' D A M E 2 N U MER O S'
R EAD( *,*) a,b
W R IT E( * ,* ) ' LA SUMA E S ' ,s u ma(a , b)
E ND PROGRA M ca p5_ 1
PROGRA M c ap 5_2
IM PL IC IT NON E
I N T E GER : : n ,m
INT EGER :: f act
R EAL : : res u l
W R IT E( * ,* ) ' D A M E 2 N U MER O S'
R EAD( *,*) m,n
124
Procedimientos
I F ( m< n) T H EN
WR IT E( * ,* ) 'NO SE PU ED E'
ELSE
resul=fact( m) /( fact(n)*f act( m-n))
W R IT E( * ,* ) ' R E SU LTA D O' , resu l
E N D IF
E ND PROGRA M ca p5_ 2
FU NCTION fact( x)
IM PL IC IT NON E
I N T E G ER , I N T EN T ( IN ) : : x
I N T E G ER : : i ,f a c t
f act=1
D O i= 1 ,x
fact=fact*i
END DO
END FUNCTION fact
PROGRA M c ap 5_3
IM PL IC IT NON E
CHARAC TER (LEN= 1) :: seguir
I N T E G ER : : f a c t , i , n
R EAL : : sumat or
DO
WR IT E( * ,* ) 'NUM ERO D E EL EM EN TO S DEL SU MATOR IO?'
125
Procedimientos
R EAD( *,*) n
s u mat or=0
DO i= 1,n
s u mat or =su mato r+1 ./f act( i)
END DO
WR IT E( * ,* ) ' EL R ESUL TADO ES:' ,su mat or
WR ITE( *,*) 'D ESEA CON T INUAR ( S/N) ?'
R EAD( *,*) s eg u ir
I F ( s e g u ir /= ' S' ) E XI T
END DO
E ND PROGRA M ca p5_ 3
FU NCTION fact( x)
IM PL IC IT NON E
I N T E G ER , I N T EN T ( IN ) : : x
I N T E G ER : : f a c t , i
f act=1
D O i= 1 ,x
fact=fact*i
END DO
END FUNCTION fact
PROGRA M c ap 5_4
IM PL IC IT NON E
R EAL : : me d ia
R EAL , D I MEN S ION(5 ):: ve c to r
INTEG ER : : i
D O i= 1 ,5
WR IT E( * ,* ) 'DAM E CO M PON ENT E' ,i,'D EL VEC TOR'
R EAD( *,*) ve ct or (i)
END DO
WR IT E( * ,* ) ' LA M ED IA E S:' , med i a( ve ct or,5)
126
Procedimientos
E ND PROGRA M ca p5_ 4
PROGRA M c ap 5_5
IM PL IC IT NON E
I N T E GER : : a , b ,s
W R IT E( * ,* ) ' D A M E 2 N U MER O S'
R EAD( *,*) a,b
CA LL s u ma (a ,b ,s)
W R IT E( * ,* ) ' LA SUMA E S ' ,s
E ND PROGRA M ca p5_ 5
127
Procedimientos
z=x+ y
END SUBROU T IN E suma
PROGRA M c ap 5_6
IM PL IC IT NON E
INT EGER :: a= 5 ,b= 10
WR IT E( * ,* ) 'AN T ES DEL CA MB IO '
WR IT E( * ,* )' A= ' ,a ,' B= ' , b
C A LL c a mb i a(a , b)
WR IT E( * ,* ) 'D ESPU ES D EL CAM BIO EN PR INC IPAL '
WR IT E( * ,* ) ' A= ',a ,' B= ' , b
E ND PROGRA M ca p5_ 6
SUBROU T IN E cambia( x, y)
IM PL IC IT NON E
INTEGER, INTENT(IN OUT) :: x
I N T E G ER , I N T EN T ( IN O U T ) : : y
I N T E GER : : a ux
a ux= x
x= y
y= a u x
WR ITE( *,*) 'D ESPU ES D EL CAMBIO EN SUBRU TINA'
WR IT E( * ,* ) ' X= ' , x ,' Y = ' , y
END SUBROU T IN E cambia
128
Procedimientos
PROGRA M c ap 5_7
IM PL IC IT NON E
R EAL : : res u l
R EAL , D I MEN S ION(5 ):: ve c to r
INTEGER : : i
W R IT E( * ,* ) ' D A M E V EC T OR'
R EAD( * ,*) ( ve ct or ( i) , i=1 , 5)
C A LL me dia( ve c t o r ,re su l ,5 )
WR IT E( * ,* ) ' LA M ED IA E S:' , resu l
E ND PROGRA M ca p5_ 7
SUBROU T IN E media(num,solu,d1)
IM PL IC IT NON E
INTEGER, I NT ENT ( IN) : : d 1
R EAL, D IMEN SION( d1),IN TENT(IN) :: num !perfil explicit o
R EAL, IN TENT( OUT) :: solu
R EAL : : suma
INTEGER : : i
s u ma= 0
DO i= 1,d1
s u ma=s uma+ nu m( i)
END DO
s o lu= su ma / d1
END SUBROU T IN E me dia
PROGRA M c ap 5_8
129
Procedimientos
IM PL IC IT NON E
INTEGER , PARAMETER:: TM=10
I NT E GER , D IM EN S ION( TM , TM) :: mat
I N T E GER : : f i la , co l u mn a ,p os , neg , ce ros
CA LL le er(mat ,fila,c olumna,TM)
CA LL c uen ta( ma t,f ila ,co lumna,p os ,ne g,ce ro s)
WR IT E( * ,* ) ' EL NUM ERO D E POSIT IVO S ES:' ,po s
WR IT E( * ,* ) ' EL NUM ERO D E N EGA T IVO S ES:' ,neg
W R IT E( * ,* ) ' E L N U M ERO D E C ERO S E S:' ,c er os
E ND PROGRA M ca p5_ 8
: : f i l ,c o l
I N T E G ER : : k , j
DO
WR IT E( * ,* ) 'N D E F ILA S? '
R EA D ( * , * ) f i l
WR ITE( *,*)'N D E COLUMNAS?'
R EAD( *,*) c o l
IF (fil<=10 .AND. col<=10) EXIT
END DO
DO k=1,f il
DO j= 1,col
WRIT E(*,*) 'ELEME NTO',k ,j,'DE LA MATRIZ'
R EA D ( * ,* ) mat ( k ,j )
END DO
END DO
END SUBROU T IN E leer
130
Procedimientos
DO k=1,f il
DO j= 1,col
I F ( m a t ( k , j) < 0 ) T H EN
neg= neg+1
E L S E IF ( ma t ( k , j) = = 0 ) T H EN
cer=cer+ 1
ELSE
pos=pos+ 1
E N D IF
END DO
END DO
END SUBROU T IN E cuenta
PROGRA M c ap 5_9
IM PL IC IT NON E
I N T E GER : : s ue rt e , n2 , n , int ento
n= su ert e()
WR ITE( *,*) "SE HA GEN ERADO UN NU MERO EN TRE 1 Y 100"
WR ITE( *,*) "INTENTA AD IVINARLO"
intento=0
DO
WR ITE(*,*) 'DA M E UN NU MERO'
R EA D ( * ,* ) n 2
intento= in tento+1
I F ( n 2 = = n ) T H EN
W R IT E( * ,* ) ' A C ER T A S T ES ! '
W R IT E( * ,* ) ' H A S N EC E SIT A D O ' , int e n t o , '
INT EN T O S! '
EXIT
E N D IF
C A L L p is t a( n,n2)
131
Procedimientos
END DO
E ND PROGRA M ca p5_ 9
132
Procedimientos
WR ITE( *,*) ' PERD IDA D E CALOR: ' ,h*area( r,al) *dt
E ND PROGRA M ca p5_ 10
la
elaboracin
del
programa.
P R OGRA M c ap 5_1 1
IM PL IC IT NON E
INTEGER , PARAMETER:: d1=25,d2=3
R EAL : : x ,y,t , b u sca t ,d i fm
R EAL , D I MEN S ION( d1 , d2): : mat
R EAL, EXTERNAL:: media
133
Procedimientos
C A LL le ctu ra ( m at ,d 1, d 2)
WR ITE( *,*) 'DA M E UN PUNTO'
R EAD( *,*) x, y
W R IT E( * ,* ) ' T EM P ER A T U R A EN E S E PU N T O ES' ,b u s c a t ( x , y, m a t , d 1 , d 2 )
WR ITE( *,*) 'DA M E UNA TEMPERATURA'
R EAD( *,*) t
C A LL p un t o s( mat ,t , d1 , d2)
W R IT E( * ,* ) ' D E S V M A X R ES P EC T O T E M P . M ED IA ' , d if m( ma t ,me d i a ,d 1 ,d 2 )
! LA FUNCIN MED IA ES UN ARGU M ENTO AC TUAL
E ND PROGRA M ca p5_ 11
134
Procedimientos
135
Procedimientos
END DO
m e d ia= med i a /d 1
END FUNCTION media
136
Procedimientos
EJERCICIOS PROPUESTOS
1) Programa que pida dos nmeros naturales y use una funcin lgica
para saber si ambos son cuadrones pares o no. A saber: dos
nmeros son cuadrones pares si al sumarlos y restarlos se obtienen
cuadrados perfectos. Ejemplo: 10 y 26 son cuadrones pares pues:
10+26 =36 (cuadrado perfecto) y 26-10 = 16 (cuadrado perfecto).
2) Modifica el ejercicio anterior para obtener todos los nmeros
cuadrones pares hasta 1000.
3) Programa que lee por teclado una matriz 3x3 y calcula su
determinante. Utilizar la funcin siguiente para calcular adjuntos:
137
Procedimientos
138
6 CARACTERES Y CADENAS
6.1 Caracteres y cadenas
139
Caracteres y cadenas
nombre(2:4)
nombre(:)
var1_caracter // var2_caracter
variable_carcter = expresin_carcter
El funcionamiento es:
140
C a r a c t ere s y c ad en as
Ejemplo.
CHARACTER (len=10)::pal1=raton
WRITE(*,*) IACHAR(A),IACHAR(Z),IACHAR(a),IACHAR(z)
!se escribe por pantalla 65,90,97,122
141
Caracteres y cadenas
WRITE(*,*) ACHAR(65),ACHAR(90),ACHAR(97),ACHAR(122)
!se escribe por pantalla A,Z,a,z
WRITE(*,*) LEN(pal1),LEN_TRIM(pal1)
!se escribe por pantalla 10
WRITE(*,*) pal1,TRIM(pal1)
!se escribe por pantalla raton_____raton
WRITE(*,*) INDEX(pal1,a)
!se escribe por pantalla 2
142
C a r a c t ere s y c ad en as
LOGICAL:: result1,result2
pal1=Begoa
pal2=Paula
result1=pal1<pal2
result2=LLT(pal1,pal2)
El valor de result1 puede variar de procesador a procesador, pero el
valor de result2 es siempre .TRUE. en cualquier procesador.
143
EJERCICIOS RESUELTOS
Objetivos:
145
Caracteres y cadenas
PROGRA M c ap 6_1
IM PL IC IT NON E
CHARAC TER (LEN= 10) :: nom, apel
CHARAC TER (LEN= 20) :: nomc
INTEGER :: long1,long2= 0,i,conta=0
lo ng 1= le n_ tr im( no m)
WR IT E( * ,* ) ' no m,' t ien e ' ,lo ng 1 ,c ar acte res
! otr o mo do de ca lc ula r la longit ud de u na ca den a
DO i= 1,LEN( nom)
I F (no m( i: i) /= ' ') TH EN
long2= lo ng2+1
E N D IF
END DO
WR IT E( * ,* )' no m,' t iene ' ,lon g2 ,c ar acte re s
!.............................................
W R IT E( * ,* ) ' D A M E TU A P EL L ID O '
R EA D ( * ,*) a pe l
E ND PROGRA M ca p6_ 1
146
Caracteres y cadenas
PROGRA M c ap 6_2
IM PL IC IT NON E
CHARAC TER (LEN= 27) :: abc='ABCD EFGH IJK LMNOPQR STUVW XYZ' ,&
a bc m= ' abcd efg h i jk l mn o pq rst uvw x yz '
INTEGER:: i
W R IT E( * ,* ) ' N A SC I I
LETRA
N A SC I I
LETRA'
DO i= 1 ,27
WR ITE( *,100) IACHAR( abc( i: i)) ,abc( i: i) ,IACHAR( abcm( i:i)) ,abcm( i:i)
PAUSE
END DO
1 00 FOR MA T ( 2 X , I4 ,8X , A 2 ,8 X , I 4 , 6 X ,A 2 )
E ND PROGRA M ca p6_ 2
PROGRA M c ap 6_3
IM PL IC IT NON E
147
Caracteres y cadenas
CHARAC TER (LEN= 20) :: nom=' ' ,nom_ma yu s
I N T E GER : : nu m ,n u m_ m a yu s , i
WR ITE( *,*) 'DA M E UN NOMBR E EN MA YU SCU LAS'
R EA D ( * ,*) n o m_ ma yu s
W R IT E( * ,* ) ' E L N OMBR E T EC LEA D O E S ' ,n o m_ ma yu s
D O i= 1 ,L EN _ TR IM( no m _ ma yu s )
num_ma yus=IACHAR( nom_ma yu s( i: i))
I F ( nu m_ m a yu s > = 6 5 .A N D .nu m _ ma yu s < = 9 0) THE N
n u m= nu m _ ma yu s + 3 2
nom( i:i)=ACHAR(num)
ELSE
nom( i: i ) = ACHAR( n u m_ma yus )
E N D IF
END DO
WR ITE( *,*) ' EL NOMBR E EN MINU SCULA S ES ' ,nom
E ND PROGRA M ca p6_ 3
PROGRA M c ap 6_4
IM PL IC IT NON E
CHARAC TER (LEN= 20) :: nom,nom_ma yus= ' '
I N T E GER : : nu m ,n u m_ m a yu s , i
WR ITE( *,*) 'DA M E UN NOMBR E EN MINU SCU LAS'
R EAD( *,*) nom
W R IT E( * ,* ) ' E L N OMBR E T EC LEA D O E S ' ,n o m
DO i= 1,LEN_TR IM( nom)
num= IACHAR( nom( i: i))
IF (nu m >= 9 7 .AND . n u m <= 12 2) TH EN
num_ma yus= num-32
nom_ma yus( i: i)=ACHAR( num_ma yu s)
ELSE
148
Caracteres y cadenas
nom_ma yus( i: i)=ACHAR( num)
E N D IF
END DO
WR ITE( *,*) ' EL NOMBR E EN MAYU SCULAS ES ' ,nom_ma yu s
E ND PROGRA M ca p6_ 4
PROGRA M c ap 6_5
IM PL IC IT NON E
CHARAC TER (LEN= 50) :: nombre
INTEGER :: long,i= 0
WR ITE( *,*) 'DA M E UN NOMBR E'
R EA D ( * ,*) n o mb re
DO
i = i+1
IF (nombre(i: i) == ' ') EXIT
END DO
WR ITE( *,*) ' LA PALABRA TIENE' ,i- 1 ,' CARAC TER ES'
long= i-1
CA LL in ve r t ir( no mbre ,lon g)
WR ITE( *,*) ' LA PALABRA IN VERTID A ES ' ,nombre
E ND PROGRA M ca p6_ 5
149
Caracteres y cadenas
j= lo ng
c en= l on g /2
DO i= 1 ,cen
a ux= no mb re (i: i)
n o mb re( i: i)= no m bre ( j : j)
n o mb re( j: j)= aux
j = j-1
W R IT E( * ,* ) ' N O MB R E ' , no mb re
END DO
END SUBROU T IN E inve rt ir
PROGRA M c ap 6_6
IM PL IC IT NON E
CHARAC TER (LEN= 6) :: sil=' '
CHARAC TER (LEN= 30) :: pal=' '
WR ITE( *,*) ' PA LABRA'
R EAD( *,*) pal
WR ITE( *,*) ' SILABA'
R EAD( *,*) sil
W RIT E( * ,*) I NDE X(p al,T RI M ( si l ) )
E ND PROGRA M ca p6_ 6
PROGRA M c ap 6_7
IM PL IC IT NON E
150
Caracteres y cadenas
CHARAC TER (LEN= 15), D IMENSION( 4) :: &
n o m= ( /' P EP E G O T ER A ' , ' R O M P ET ECH O S ' ,'M ORTAD EL O ' ,' F IL EM ON
' /)
PROGRA M c ap 6_8
IM PL IC IT NON E
INTEGER:: i
CHARAC TER (LEN= 1) :: resp
151
Caracteres y cadenas
CHARAC TER(LEN= 2):: cod
CHARAC TER (LEN= 2) , D IMEN SION( 10) : : &
t cod= ( /'A ','A L' ,'A V' ,'B ' ,'BA' ,'C ' ,'CA' ,'CC','C O' ,'C S' /)
CHARAC TER (LEN= 9) ,D IMEN SION( 10) : : &
t nom=( /'ALICA NTE ','A LMER IA
'&
,'C ORUA
' ,'CAD IZ
DO
WR ITE( *,*) 'DAME UN COD IGO D E PROVINC IA'
R EAD( *,*) cod
! ***BU SQU EDA EN EL ARRA Y
i=0
DO
i = i+1
I F (co d == t cod ( i) .OR . i == 1 0) E X I T
END DO
IF (cod /= tcod( i)) TH EN
W R IT E(* , * ) ' ER R OR. NO EXISTE ESE CODIGO'
ELSE
WR IT E(* , *) ' LA PRO V INC IA ES ' ,t no m( i)
E N D IF
WR ITE( *,*) 'CON TINUAR( S/N) ?'
R EAD( *,*) res p
IF (re sp /= ' S' .AND . r es p /= 's ') EXIT
END DO
E ND PROGRA M ca p6_ 8
PROGRA M c ap 6_9
IM PL IC IT NON E
INTEGER , PARAMETER::N= 3
CHARAC TER (LEN= 20), D IMENSION(N) :: nom
INTEGER:: i
CA LL le er(n o m,N)
C A LL o rd en ar ( no m ,N )
WR ITE( *,*) ' LA LISTA ORD ENADA A SC ENDENTEMENTE ES'
WR IT E( * ,* ) ( no m( i) , i=1 ,N )
152
Caracteres y cadenas
E ND PROGRA M ca p6_ 9
SUBROU T IN E ordenar(x,n)
IM PL IC IT NON E
I N T E GER , I N T EN T( IN ) : : n
CHARAC TER (LEN= *) , D IMEN SION( n) , IN TENT( IN OUT) :: x
CHARAC TER (LEN= 20)::aux
INTEGER:: i,j
DO i= n - 1, 1,- 1
DO j= 1,i
I F ( LG T( x( j) ,x( j+ 1))) TH EN
aux=x(j)
x(j)= x(j+1)
x(j+ 1)=aux
E N D IF
END DO
END DO
END SUBROU T IN E ordenar
153
Caracteres y cadenas
EJERCICIOS PROPUESTOS
1) Programa que codifica la frase 'EXAMEN DE INFORMATICA'.
2) Programa que descodifica la frase codificada en el ejercicio
anterior. Utiliza una subrutina para codificar y descodificar la frase.
3) Programa que lea dos palabras y las muestre ordenadas
alfabticamente. (No usar ningn mtodo de ordenamiento).
4) Programa que pida una frase y cuente el nmero de palabras.
5) Programa que lea una palabra y verifique si es un palndromo o no.
Utilizar el programa cap6_5 para invertir la palabra. Usar una
funcin lgica para determinar si la palabra dada es un palndromo
o no.
6) Programa que lea una frase y cuente el nmero de vocales de cada
palabra mostrando la de mayor nmero por pantalla. Usa una
subrutina para leer la frase y otra para determinar la palabra que
contiene ms vocales.
7) Programa que lea una palabra aguda y diga si requiere tilde o no
segn las reglas de acentuacin. El programa se ejecuta hasta que el
usuario introduzca la palabra FIN. Usa programacin modular para
la construccin del programa.
8) Programa que lea una palabra y el idioma en que est escrita
(ingls/castellano) y muestre su traduccin (castellano/ingls).
Suponer que el diccionario est formado por las palabras siguientes:
Computador, raton, pantalla, teclado, programa, ejecutar. Computer,
mouse, screen, keyboard, program, execute. Usa programacin
modular para la construccin del programa.
154
7 FORMATOS Y ARCHIVOS
7.1 Entrada/salida en Fortran
la
o la sentencia:
155
Formatos y archivos
o la sentencia:
Formatos y Archivos
SMBOLO
SIGNIFICADO
nmero de columna
mnimo n de dgitos
n de espacios saltados
anchura
del
campo:
n
caracteres de entrada/salida
de
157
Formatos y archivos
[r]Iw[.m]
[r]Iw
Ejemplos de salida:
DESCRIPTOR VALOR INTERNO SALIDA
I4
452
452
I2
6234
**
I5
-52
-52
I4.3
003
I2.0
Ejemplos de entrada:
DESCRIPTOR CAMPO ENTRADA VALOR LEDO
I4
I2
-1
-1
I4
-123
-123
I3
12
12
I2
123
12
[r]Fw.d
158
Formatos y Archivos
Ejemplos de salida:
DESCRIPTOR VALOR INTERNO SALIDA
F9.3
25.338
25.338
F5.1
0.35247
0.4
F6.2
0.089235
0.09
F8.3
732.56
732.560
F4.3
-12.345
****
Ejemplos de entrada:
DESCRIPTOR CAMPO ENTRADA VALOR LEDO
F6.3
49.225
49.225
F6.2
49.225
49.23
F7.1
-1525.1
-1525.1
159
Formatos y archivos
[r]Ew.d
Los mismos criterios que operan sobre un dato real con formato F
se aplican a ese dato real con formato exponencial.
Ejemplos de salida:
DESCRIPTOR VALOR INTERNO SALIDA
E8.2
83.456
0.83E+02
E7.2
83.456
*******
E10.3
8.3974
0.840E+01
E10.4
0.83E2
0.8300E+02
Ejemplos de entrada:
DESCRIPTOR CAMPO ENTRADA VALOR LEDO
E11.2
43.258E+03
0.43E+05
E11.5
43.258E+03
0.43258E+05
E11.3
0.43E-02
0.430E-02
160
Formatos y Archivos
[r]ESw.d
Los mismos criterios que operan sobre un dato real con formato F
se aplican a ese dato real con formato cientfico.
Ejemplos de salida:
DESCRIPTOR VALOR INTERNO SALIDA
ES8.2
83.456
8.35E+01
ES7.2
83.456
*******
ES10.3
8.3974
8.397E+00
E11.4
0.83ES2
8.3000ES+01
Ejemplos de entrada:
DESCRIPTOR CAMPO ENTRADA VALOR LEDO
ES11.2
43.258E+03
4.33ES+04
ES11.5
43.258E+03
4.32580ES+04
ES11.3
0.43E-02
4.300ES-01
Tab la 7 .9: Fo r matos de lect ura de rea les e n fo rmato c ien tf ico
[r]Lw
161
Formatos y archivos
Ejemplos de salida:
DESCRIPTOR VALOR INTERNO SALIDA
L5
.FALSE.
L4
.TRUE.
L1
.TRUE.
L2
.FALSE.
Ejemplos de entrada:
DESCRIPTOR CAMPO ENTRADA VALOR LEDO
L5
.TRUE.
L2
F1
.FALSE.
L4
XT
ERROR
[r]A[w]
162
Formatos y Archivos
Ejemplos de salida:
DESCRIPTOR
VALOR
LONGITUD
DE
LA
SALIDA
INTERNO VARIABLE CARACTER
ABCDEF
ABCDEF
A8
ABCDEF
ABCDEF
A4
ABCDEF
ABCD
Ejemplos de entrada:
DESCRIPTOR
CAMPO
ENTRADA
LONGITUD DE
VARIABL
CARACTER
LA
ABCDEFGH
ABCDEF
ABCDEFGH
ABCDEFGH
A8
ABCDEFGH
EFGH
A4
ABCDEFGH
ABCD
VALOR
LEDO
nX
Tc
163
Formatos y archivos
/[/][]
INTEGER:: a,b,c,d
READ (*,30) a,b,c,d
30 FORMAT (2I2,//, 2I2)
Si los datos de entrada son:
123
456
789
Se leen a, b, c, d con los valores 1, 2, 7 y 8, respectivamente.
Ejemplo:
164
Formatos y Archivos
OPEN (lista_open)
165
Formatos y archivos
INTEGER:: error_de_apertura
OPEN(UNIT=12,FILE=datos,STATUS=OLD,ACTION=READ,&
IOSTAT=error_de_apertura)
INTEGER:: error_de_apertura
OPEN(UNIT=9,FILE=resultado,STATUS=NEW,ACTION=WRITE
,&IOSTAT=error_de_apertura)
CLOSE (lista_close)
[UNIT= ]unidad
REWIND unidad
BACKSPACE unidad
166
Formatos y Archivos
Ejemplos:
REWIND 10
BACKSPACE 30
WRITE
([UNIT
=]
unidad,
error_de_escritura][,]) lista_de_variables
formato[,IOSTAT
167
Formatos y archivos
INTEGER:: error_de_escritura
INTEGER:: error_de_lectura
168
Formatos y Archivos
PROGRAM temperaturas
! Lee una serie de temperaturas de un archivo y
! calcula el valor medio
IMPLICIT NONE
CHARACTER (LEN=20):: archivo
INTEGER:: cuenta, error_de_apertura, error_de_lectura
REAL:: temperatura, suma, media
! Abrir archivo como unidad 15
WRITE( *, *)
ACTION=READ,&
END DO
! Calcular temperatura media
media = suma/ REAL(cuenta)
WRITE (*, *) temperatura media:
169
Formatos y archivos
170
EJERCICIOS RESUELTOS
Objetivos:
171
Formatos y archivos
PROGRA M c ap 7_1
IM PL IC IT NON E
I N T E GER : : n
WR ITE( *,8) 'NU M ERO, RA IZ CUADRADA , RA IZ CUB ICA'
8 FOR MAT (1X, A)
WR IT E ( * ,10 ) (n ,SQRT (REAL( n)) ,R EAL (n) ** (1 .0 /3 .0) ,n= 1 ,10 0)
1 0 FOR MAT (1 X, I5 , 4 X, F8 .3 , 8 X, F8 .3)
E ND PROGRA M ca p7_ 1
PROGRA M c ap 7_2
IM PL IC IT NON E
INT EGER :: m=- 123 ,n=9 877 ,l= 889 ,i= 77
R EA L : : r=8 9 .12 6 , s=1 4 .53 2
CHARAC TER (LEN= 6):: pal= 'abcdef '
W R IT E( * ,1 0 0 ) ' En t e r o s ' , m ,n , l , i
1 00 F OR MA T ( 1 X /1 X ,T 10 ,A / ,1 X ,I4 , 1 X , I 4 ,1 X, I 3 , 1 X , I 1 )
WR IT E( * ,15 0)
c ab e' ,r
re lle na
c on
ce ro s' ,r ,'n o
1 50 FORMAT (1 X/1 X,T 10 ,A /,1 X,A ,1 X,F5 .2 /,1 X,A ,1 X,F7 .4 /,1 X,A ,1X,F 4 .2)
WR IT E( * ,20 0)
c i ent if i co ' ,s
' fo rmat o
2 00 F ORMAT (1 X/1 X,A ,1 X,F5 .2 /,1 X,A ,1 X,E9 .2 /,1 X,A ,1X,ES9 .2)
WR IT E( * ,25 0) 'C ara ct ere s' ,'w =6= L EN(p a l)' ,pa l,&
'w = 8. L a va r ia b le s e a j ust a a la d er ech a de l ca mp o' ,p a l ,&
'w =4. Se mu est ra n los 4 p r imero s c ara cter es de la va r ia b le' ,pal
2 50 F OR MA T ( 1 X / ,T 10 ,A / , 1X ,A ,1 X ,A / ,1 X ,A, 1 X ,A 8 / , 1 X,A ,1 X ,A4 )
172
Formatos y archivos
3 00 FOR MA T ( 1 X / ,1 X ,A / ,1 X ,4 I 5 ,2F 6 .2 ,A 7 )
E ND PROGRA M ca p7_ 2
Clase
Nota
[8.5,10]
[5,8.5)
[0,5)
PROGRA M c ap 7_3
IM PL IC IT NON E
CHARAC TER (LEN= 18) :: nombre
R EAL : : no ta
INTEGER
c lase ,er ror _d e_a pe rtu ra ,er ro r_d e_ lectu ra,e rr or _d e_e sc r itu ra
::
O PEN (6 0 ,F IL E='c ap7 _3 in.txt' ,STA TU S='O LD' ,AC T ION= 'REA D' ,&
IO STAT=e rr o r_d e_a pe rt ura )
I F ( er ro r_ de _a per t u ra> 0 ) S TO P ' c ap 7_3 i n .tx t N O A B IER T O'
O P EN (7 0 ,F I L E='c ap7 _3 out .t xt',S TA TU S='N EW' ,AC T ION= 'WR ITE' ,&
IO STAT=e rr o r_d e_a pe rt ura )
I F ( er ro r_ de _a per t u ra> 0 ) S TO P ' c ap 7_3 out. t x t N O A B I E R T O'
WR IT E( 70 ,9 ,IOSTAT=e rr or _d e_e sc r itu ra) 'A LUMN O' ,'C LA SE'
WR IT E( 70,'( 1 X,A6,T 20,A 5)') '======','====='
IF (er ro r_ de _es cr it ura> 0) STO P ' er ro r de e sc r itu ra'
9 FOR MAT (1 X ,A 6 ,T20 ,A 5)
DO
R EAD(6 0 ,* ,IO STA T=e rr or _d e_ le ctu ra) nomb re ,not a
e xt e rn o: IF ( er ro r_ de _ lec t u ra > 0 ) TH EN
WR IT E(* ,*) ' er ro r d e lec tu ra'
EXIT
EL SE IF (e rr or _d e_ le ctu ra < 0 ) TH EN
173
Formatos y archivos
174
Formatos y archivos
PROGRA M c ap 7_4
IM PL IC IT NON E
CHARAC TER (LEN= 15), D IMENSION ( 5) :: nomb
CHARAC TER (LEN= 15)::nombm,nombp
R EAL , D I MEN S ION(5 ) :: not a
R EA L : : m ej o r ,p eo r , me d ia clas e ,m e d ia
INT EGER :: i,n ,er ro r_d e_ ape rt ur a ,e rr or _de _ lec tu ra ,s uf ic ient es ,nu m
O PEN (1 0 ,F IL E='c ap7 _4 in.txt' ,STA TU S='O LD' ,AC T ION= 'REA D' ,&
IO STAT=e rr o r_d e_a pe rt ura )
I F ( er ro r_ de _a per t u ra> 0 ) S TO P ' c ap 7_4 i n .tx t N O A B IER T O'
END DO
! . .CA LCULO D E L P EOR D E LA CL AS E . .
p eo r= n ota( 1)
n o mb p= n omb( 1)
DO i= 2,n
175
Formatos y archivos
O P EN (2 0 ,F I L E='c ap7 _4 out .t xt',S TA TU S='N EW' ,AC T ION= 'WR ITE' ,&
IO STAT=e rr o r_d e_a pe rt ura )
I F ( er ro r_ de _a per t u ra> 0 ) S TO P ' c ap 7_4 out. t x t N O A B I E R T O'
WR IT E( 20 ,'( 1 X ,A , I3 ,A)' ) 'HA Y' , nu m,' ALU MNO S CON S UF IC I ENT E '
WR IT E( 20 ,'( 1 X,A ,F4 .1 )') ' LA NO TA M ED IA D E LA CLA SE ES:' ,me d ia
W R IT E( 20 ,'( 1 X ,3A ,F 4.1) ' )
e s: ' , peo r
'El
p eo r
a l umn o
e s:
' , no m bp ,' y
176
su
n ot a
Formatos y archivos
c ont ad or=0
DO i= 1,n
IF (nota( i) >= 5.AND.nota( i) < 6) TH EN
c ont ad or =co nta dor +1
E N D IF
END DO
s uf ic ient es= co nta dor
END FUNCTION suf icientes
5.25
5.9
177
Formatos y archivos
EJERCICIOS PROPUESTOS
1) Programa que escriba en un archivo con nombre cap7_1p_out.txt
los 100 primeros nmeros naturales, generados por el propio
programa.
2) Programa que abra el archivo del ejercicio anterior, calcule el
cuadrado de cada nmero y lo escriba en un archivo con nombre
cap7_2p_out.txt. Cmo se escribira todo en el mismo archivo?
Para
comodidad
del
usuario,
copiar
cap7_1p_out.txt
en
cap7_2p_inout.txt antes de ejecutar el programa.
3) Programa que escriba las temperaturas de los das de una semana en
un archivo con nombre cap7_3p_out.txt.
4) Programa que lea las temperaturas de los das de la semana del
ejercicio anterior y escriba en otro archivo con nombre
cap7_4p_out.txt:
1200.95
SI
Roberto Iglesias
1800.59
NO 10
...
Se desea saber:
178
Formatos y archivos
179
BIBLIOGRAFA
1) Stephen J. Chapman. Fortran 90/95 for Scientists and Enginners.
2 n d Edition, International Edition, McGraw-Hill, 2004.
2) Michael Metcalf, John Reid, Malcolm Cohen. Fortran 95/2003
explained. Oxford University Press, 2005.
3) L.R. Nyhoff, S.C. Leestma. Introduction to
Engineers and Scientists. Prentice Hall, 1997.
Fortran
90
for
Lenguaje
de
programacin
Fortran
90.
181