Sei sulla pagina 1di 34

PRACTICA No.

Ejercicio No. 1
c
c
c
c
c
c
c
c

Bajar de la pgina de la catedra el programa Volumen.f, que


permite calcular el volumen de una esfera cualquiera a partir
de su radio.
a) Identificar las distintas partes del programa en lenguaje
Fortran.
b) Compilar (gfortran -Wall Volumen.f).
c) Correr el programa ejecutable (./a.out) y verificar que da
un resultado correcto.

Este programa calcula el volumen de una esfera.

c
c
c

---------------------Comienzo del programa.


---------------------PROGRAM VOLUMEN_ESFERA

c
c
c

------------------------------------Declaracin de tipo de las variables.


------------------------------------REAL VOLUMEN, RADIO, PI
PARAMETER (PI = 3.141593)

c
c
c

----------------Ingreso de datos.
----------------WRITE(*,*) 'Ingrese el radio de la esfera'
READ(*,*) RADIO

c
c
c

---------------------------------Clculo del volumen de una esfera.


---------------------------------VOLUMEN = (4.0/3.0) * PI * RADIO**3

c
c
c

-----------------------Impresin del resultado.


-----------------------WRITE(*,*) 'El volumen de la esfera es', VOLUMEN

c
c

-------------------------Finalizacin del programa.

-------------------------END

c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

Resultado
[julepino@grus E01]$ gfortran -Wall P3E01.f
[julepino@grus E01]$ ./a.out
Ingrese el radio de la esfera
1
El volumen de la esfera es 4.18879080
[julepino@grus E01]$ ./a.out
Ingrese el radio de la esfera
2
El volumen de la esfera es 33.5103264
[julepino@grus E01]$ ./a.out
Ingrese el radio de la esfera
3
El volumen de la esfera es 113.097351
[julepino@grus E01]$

Ejercicio No. 2
c
c
c
c
c
c
c
c
c
c
c

Utilizar un editor de textos para almacenar el cdigo que se


detalla abajo en el archivo fuente Calendario.f.
PROGRAM CALENDA
WRITE(*,*) "21 de agosto de 2011"
END
a) Compilar.
b) Ejecutar el programa.
c) Modificar el programa para que anuncie la fecha actual.
Compilar esta versin del programa para que el ejecutable
se llame Calendario (gfortran -Wall -o Caledario Calendario.f).
Corroborar que el programa da el resultado correcto.
PROGRAM CALENDA
WRITE(*,*) "21 de agosto de 2011"
END

c
c
c

Resultado al ejecutar Calendario (punto b)


[julepino@grus E02]$ Calendario
21 de agosto de 2011

[julepino@grus E02]$
PROGRAM DATEF
CALL SYSTEM ('date')
END

c
c
c

[julepino@grus E02]$ DateF


Sun Oct 26 08:53:21 ART 2014
[julepino@grus E02]$

! ---------------------------------------------------------------! This program uses DATE_AND_TIME() to retrieve the system date


! and the system time. Then, it converts the date and time
! information to a readable format. This program demonstrates
! the use of concatenation operator // and substring
! ---------------------------------------------------------------PROGRAM DateTime
IMPLICIT NONE
CHARACTER(LEN = 8) :: DateINFO
! ccyymmdd
CHARACTER(LEN = 4) :: Year, Month*2, Day*2
CHARACTER(LEN = 10) :: TimeINFO, PrettyTime*12 ! hhmmss.sss
CHARACTER(LEN = 2) :: Hour, Minute, Second*6
CALL DATE_AND_TIME(DateINFO, TimeINFO)
! decompose DateINFO into year, month and day.
! DateINFO has a form of ccyymmdd, where cc = century, yy = year
! mm = month and dd = day
Year = DateINFO(1:4)
Month = DateINFO(5:6)
Day = DateINFO(7:8)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)

'Date information -> ', DateINFO


'
Year -> ', Year
'
Month -> ', Month
'
Day -> ', Day

! decompose TimeINFO into hour, minute and second.


! TimeINFO has a form of hhmmss.sss, where h = hour, m = minute
! and s = second
Hour = TimeINFO(1:2)
Minute = TimeINFO(3:4)
Second = TimeINFO(5:10)
PrettyTime = Hour // ':' // Minute // ':' // Second
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)

'Time Information -> ', TimeINFO


'
Hour -> ', Hour
'
Minite -> ', Minute
'
Second -> ', Second
' Pretty Time -> ', PrettyTime

! the substring operator can be used on the left-hand side.


PrettyTime = ' '
PrettyTime( :2) = Hour
PrettyTime(3:3) = ':'
PrettyTime(4:5) = Minute
PrettyTime(6:6) = ':'
PrettyTime(7: ) = Second
WRITE(*,*)
WRITE(*,*) '

Pretty Time -> ', PrettyTime

END PROGRAM DateTime

!
!
!
!
!
!
!
!
!
!

[julepino@grus E02]$ gfortran -Wall -o DateTime DateTime.f90


[julepino@grus E02]$ DateTime
Date information -> 20141026
Year -> 2014
Month -> 10
Day -> 26
Time Information -> 084633.671
Hour -> 08
Minite -> 46

!
Second -> 33.671
!
Pretty Time -> 08:46:33.671
!
!
Pretty Time -> 08:46:33.671
! [julepino@grus E02]$

Ejercicio No. 3
c
c
c

Bajar de la pagina de la catedra el programa Triangulo.f, que


permite calcular el area de un triangulo cualquiera a partir de
sus lados l1, l2 y l3, de acuerdo a la formula:

c
c
c
c
c
c
c

A = sqrt{s (s l1) (s l2) (s l3),


donde s =1/2(l1 + l2 + l3)

(1)

a) Identificar las distintas partes del programa en lenguaje Fortran.


b) Compilar.
c) Si fueron identificados errores, corregirlos y repetir el
procedimiento desde b).
PROGRAM TRIANGULO

C
C
C
C
C
C
C
C
C
C

-----------------------------------------------------------------* La primer linea de un programa suele usarse para darle un


nombre.
* Las lineas que comienzan con una letra C son comentarios usados
para hacer al programa mas comprensible, e ignoradas por el
compilador.
* En Fortran no hay diferencias entre mayusculas y minusculas.
* En un programa Fortran 77 se escribe a partir de la septima
columna, y hasta la columna 72.
------------------------------------------------------------------

C
C
C

------------------------Declaramos las variables.


------------------------REAL LADO_1, LADO_2, LADO_3, S, AREA

C
C
C

----------------------Imprimimos en pantalla.
----------------------WRITE(*,*) 'Este programa calcula'

WRITE(*,*) 'el area de un triangulo cualquiera'


WRITE(*,*)
WRITE(*,*) 'Escriba las longitudes de los lados'
WRITE(*,*) 'separados por comas y de enter'
C
C
C

----------------------Ahora leemos los datos.


----------------------READ(*,*) LADO_1, LADO_2, lado_3

C
C
C

----------------Calculo auxiliar.
----------------S = .25 * (LADO_1 + LADO_2 + LADO_3)

C
C
C

------------------Calculamos el area.
------------------AREA = SQRT(S*(S-LADO_1)8(S-LADO_2)*(S-LADO_3))

C
C
C

-------------------------------Damos el resultado por pantalla.


-------------------------------WRITE(*,*)
WROTE(*.*) 'El area de triangulo es ', AREA
END

c
c
c
c
c
c
c
c

Existen los siguientes errores:


1) La variable LADO_3 esta definida con minusculas y operada
con mayusculas.
2) La formula de S empieza en la columna 6 en lugar de la 7
3) En la formula del area el segundo producto tiene un 8
en lugar del signo por (*).
4) En la escritura del resultado dice: (WROTE(*.*) en lugar
(O en lugar de I y . en lugar de ,) (WRITE(*,*).

Ejercicio No. 4
Programa Corregido
PROGRAM TRIANGULO
C
C
C
C
C
C
C
C
C
C

-----------------------------------------------------------------* La primer linea de un programa suele usarse para darle un


nombre.
* Las lineas que comienzan con una letra C son comentarios usados
para hacer al programa mas comprensible, e ignoradas por el
compilador.
* En Fortran no hay diferencias entre mayusculas y minusculas.
* En un programa Fortran 77 se escribe a partir de la septima
columna, y hasta la columna 72.
------------------------------------------------------------------

C
C
C

------------------------Declaramos las variables.


------------------------REAL LADO_1, LADO_2, LADO_3, S, AREA

C
C
C

----------------------Imprimimos en pantalla.
----------------------WRITE(*,*) 'Este programa calcula'
WRITE(*,*) 'el area de un triangulo cualquiera'
WRITE(*,*)
WRITE(*,*) 'Escriba las longitudes de los lados'
WRITE(*,*) 'separados por comas y de enter'

C
C
C

----------------------Ahora leemos los datos.


----------------------READ(*,*) LADO_1, LADO_2, LADO_3

C
C
C

----------------Calculo auxiliar.
----------------S = 0.5 * (LADO_1 + LADO_2 + LADO_3)

C
C
C

------------------Calculamos el area.
------------------AREA = SQRT(S*(S-LADO_1)*(S-LADO_2)*(S-LADO_3))

C
C
C

-------------------------------Damos el resultado por pantalla.


-------------------------------WRITE(*,*)
WRITE(*,*) 'El area de triangulo es ', AREA
END

c
c
c
c
c
c
c
c
c

El resultado de calcular el area del triangulo


rectangulo de lados: 1, 1, 1.4142 escorrecto
[julepino@grus E03]$ P3E03TRI
Este programa calcula
el area de un triangulo cualquiera

c
c

El area de triangulo es 0.499999911


[julepino@grus E03]$

Escriba las longitudes de los lados


separados por comas y de enter
1,1,1.4142

Ejercicio No. 5
Ver anterior

Ejercicio No. 6
Determinar cuales de los siguientes nombres de variables son correctos
para Fortran.
a) aso
b) Veo
c) kk1
d) kk_1
e) 1t4
f) s41#
g) st uv
h) computacion
Correctos:

a), b), c), d), g) que tiene un espacio en blanco y


h) tiene mas de seis caracteres pero...

Incorrectos:
e) Empieza con un numero y no un caracter
f) Tiene un simbolo no permitido (#)

Ejercicio No. 7
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

Determinar el valor de la variable real A o de la variable entera


I obtenido como resultado de cada una de las siguientes
proposiciones de asignacion.
a) A = 2 * 6 + 1
b) A = 2 / 3
c) A = 2.* 6./ 4.
d) I = 2 * 10 / 4
e) I = 2 * (10 / 4)
f) A = 2 * (10 / 4)
g) A = 2.* (10./ 4.)
h) A = 2.0 * (1.0E1 / 4.0)
i) A = 6.0 * 1.0 / 6.0
j) A = 6.0 * (1.0 / 6.0)
k) A = 10 ** (-4)
l) A = 10.0 ** (-4)
m) A = 1./3. + 1./3. + 1./3.
n) A = 1/3 + 1./3.+ 1/3
) A = 4.0 ** (3 / 2)
o) A = 4.0 ** 3./ 2.
p) A = 4.0 ** (3./ 2.)
q) I = 19 / 4 + 5 / 4
r) A = 19 / 4 + 5 / 4
s) I = 100 * (99 / 100)
t) I = 10 ** (2 / 3)
u) I = 10 ** (2./ 3.)
PROGRAM EJ07
IMPLICIT NONE
INTEGER d, e, q, s, t, u
REAL a, b, c, f, g, h, i, j, k, l, m, n, v, o, p, r
a = 2 * 6 + 1
WRITE(*,*)'
a = ',a
b = 2 / 3
WRITE(*,*)'

b = ',b

c = 2.* 6./ 4.
WRITE(*,*)'
c = ',c
d = 2 * 10 / 4
WRITE(*,*)'
d = ',d
e = 2 * (10 / 4)
WRITE(*,*)'
e = ',e

f = 2 * (10 / 4)
WRITE(*,*)'
f = ',f
g = 2.* (10./ 4.)
WRITE(*,*)'
g = ',g
h = 2.0 * (1.0E1 / 4.0)
WRITE(*,*)'
h = ',h
i = 6.0 * 1.0 / 6.0
WRITE(*,*)'
i = ',i
j = 6.0 * (1.0 / 6.0)
WRITE(*,*)'
j = ',j
k = 10 ** (-4)
WRITE(*,*)'
k = ',k
l = 10.0 ** (-4)
WRITE(*,*)'
l = ',l
m = 1./3. + 1./3. + 1./3.
WRITE(*,*)'
m = ',m
n = 1/3 + 1./3.+ 1/3
WRITE(*,*)'
n = ',n
v = 4.0 ** 3./ 2.
WRITE(*,*)'
v = ',v
o = 4.0 ** (3 / 2)
WRITE(*,*)'
o = ',o
p = 4.0 ** (3./ 2.)
WRITE(*,*)'
p = ',p
q = 19 / 4 + 5 / 4
WRITE(*,*)'
q = ',q
r = 19 / 4 + 5 / 4
WRITE(*,*)'
r = ',r
s = 100 * (99 / 100)
WRITE(*,*)'
s = ',s
t = 10 ** (2 / 3)
WRITE(*,*)'
t = ',t
u = 10 ** (2./ 3.)

WRITE(*,*)'

u = ',u

END
c
c
c

Resultado
[julepino@grus E07]$ gfortran -Wall -o P3E07 P3E07.f
P3E07.f:98.10:

c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

u = 10 ** (2./ 3.)
1
Warning: Possible change of value in conversion from
REAL(4) to INTEGER(4) at (1)
[julepino@grus E07]$ P3E07
a =
13.0000000
b =
0.00000000
c =
3.00000000
d =
5
e =
4
f =
4.00000000
g =
5.00000000
h =
5.00000000
i =
1.00000000
j =
1.00000000
k =
0.00000000
l =
9.99999975E-05
m =
1.00000000
n =
0.333333343
v =
32.0000000
o =
4.00000000
p =
8.00000000
q =
5
r =
5.00000000
s =
0
t =
1
u =
4
[julepino@grus E07]$

Ejercicio No. 8
c
c
c
c
c
c
c
c
c
c

Determinar si las siguientes expresiones estan mal,


o inconvenientemente escritas en Fortran.
Por que?
a) a(b + c) A(B+C)
b) 2a + 4 2*A+4
c) an+1 A**N+1
d) a(1/n) A**(1/N)
e) ab/cd A*B/C*D
f) (x)n -X**N
g) t = 3 106 T=3.*10.**6

c
c
c
c
c
c
c
c
c
c

h)
i)
j)
k)
l)
m)
n)
v)
o)
p)

t = 3 106 T=3.0e6
t = 3 106 T=3.0e-6
t = 3 106 T=3*10**-6
t = 3 106 T=3*10**(-6)
xy/z+1 XY / Z+1
cos1(| ln(x)|) ACOS(LOG(ABS(X))
xaxb X**A**B
(xa)b X**A**B
log |ab| LOG(ABS(A*B)
e|a| b2/|c| EXP(ABS(A)-B**2/ABS(C)

PROGRAM P3E08
IMPLICIT NONE
INTEGER A,N,C,d,e,f,f1
REAL X,g,g1,g2,g3,g4,g8,g22,m,pp,Y,Z,W,q
REAL*8 g5,g6,g7,pn,pn1,pn2,po,po1
A=3
N=2
C= N+1
d = A**N+1
e = A**(N+1)
WRITE(*,*)'
WRITE(*,*)'

d
e

=',d
=',e

f = 4*3/2*2
f1 = (4*3)/(2*2)
WRITE(*,*)'
WRITE(*,*)'

f =',f
f1 =',f1

X = 2
g = -X**5
g1 = (-x)**5
WRITE(*,*)'
WRITE(*,*)'

g =',g
g1 =',g1

g2 = 3.*10.**6
g22= 3 *10**6
g3 = 3.0e6
g4 = 3.0e-6
g5 = 3*10**-6
g6 = 3*10**(-6)
g7 = 3.*10.**(-6)
g8 = 3.*10.**-6
WRITE(*,*)' g2 = ',g2

WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'

g22=
g3 =
g4 =
g5 =
g6 =
g7 =
g8 =

',g22
',g3
',g4
',g5
',g6
',g7
',g8

m = ACOS(ABS(LOG(0.55)))
WRITE(*,*)' m = ',m
pn = A**N**C
pn1= A**N*A**C
pn2= A**(N+C)
WRITE(*,*)' n = ',pn
WRITE(*,*)' n1 = ',pn1
WRITE(*,*)' n2 = ',pn2
po = (A**N)**C
po1 = A**(N*C)
WRITE(*,*)' o = ',po
WRITE(*,*)' o1 = ',po1
y = 3.5
Z = 4.1
pp = LOG(ABS(Y*Z))
WRITE(*,*)' pp = ',pp
W = 2.1
q = EXP(ABS(Y))-W**(2/ABS(Z))
WRITE(*,*)' q = ',q

END

c
c

[julepino@grus E08]$ gfortran -Wall -o P3E08 P3E08.f


P3E08.f:56.18:

c
c
c
c
c
c

g5 = 3*10**-6
1
Warning: Extension: Unary operator following arithmetic
operator (use parentheses) at (1)
P3E08.f:59.20:

g8 = 3.*10.**-6

c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

1
Warning: Extension: Unary operator following arithmetic
operator (use parentheses) at (1)
[julepino@grus E08]$ P3E08
d =
10
e =
27
f =
12
f1 =
3
g = -32.0000000
g1 = -32.0000000
g2 =
3000000.00
g22=
3000000.00
g3 =
3000000.00
g4 =
3.00000011E-06
g5 =
0.0000000000000000
g6 =
0.0000000000000000
g7 =
3.0000001061125658E-006
g8 =
3.00000011E-06
m =
0.929996252
n
=
6561.0000000000000
n1 =
243.00000000000000
n2 =
243.00000000000000
o
=
729.00000000000000
o1 =
729.00000000000000
pp =
2.66374993
q =
31.6793671
[julepino@grus E08]$

Ejercicio No. 9
c
c
c
c
c
c
c
c

Construir un programa que permita calcular la velocidad B,


el factor de Lorentz G y el factor Doppler D dados por:
B = v/c, G = 1/sqrt(1-v2/c2), D = 1/{G(1 B.cos(T))}
Los datos para el calculo son: v = 2,91105 km/seg, T = 1,22.
Puede utilizarse la instruccion parameter para asignarle valores
a las constantes.
Nota: Recordar que las funciones trigonometricas intrnsecas usan
radianes.

c
c
c

PROGRAM P3E09C
-----------------------------------------------------------------Definicion de las variables y constantes
-----------------------------------------------------------------IMPLICIT NONE
REAL Vel, Lor, Dop, v, Tita, T, c, PI
PARAMETER (c=2.99792458E5,PI=3.141593)

------------------------------------------------------------------

c
c

Ingreso de los datos por teclado (velocidad y angulo)


-----------------------------------------------------------------WRITE(*,*)'
READ(*,*)v

Ingrese la velocidad v en km/s:'

WRITE(*,*)' Ingrese el angulo Tita en grados:'


READ(*,*)Tita
c
c
c

-----------------------------------------------------------------Operaciones y calculos
-----------------------------------------------------------------T = Tita * PI / 180
Vel = v/c
Lor = 1./SQRT(1-(v**2/c**2))
Dop = 1 / (Lor*(1-Vel*cos(T)))

c
c
c

-----------------------------------------------------------------Presentacion de los resultados por pantalla


-----------------------------------------------------------------WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'

La velocidad es:
',Vel
El Factor de Lorentz es:',Lor
El Factor Doppler es:
',Dop
_________________________________________'

c
c
c

-----------------------------------------------------------------Fin del Programa


-----------------------------------------------------------------END

RESULTADO

c
c
c
c
c
c
c
c
c
c
c

[julepino@grus E09]$ gfortran -Wall -o P3E09C P3E09C.f


[julepino@grus E09]$ P3E09C
Ingrese la velocidad v en km/s:
2.91E5
Ingrese el angulo Tita en grados:
1.22
La velocidad es:
0.970671475
El Factor de Lorentz es:
4.15956497
El Factor Doppler es:
8.13608932
_________________________________________
[julepino@grus E09]$

Ejercicio No. 10
c
vienen
c
c
c
c
c
c
c
c

Las ecuaciones de movimiento de una partcula en el espacio

Solucion punto a)
PROGRAM P3E10a
-----------------------------------------------------------------Definicion de las variables y constantes
-----------------------------------------------------------------IMPLICIT NONE
REAL x, y, z, Alfa, Tita, PI

c
c
c

dadas por:
x = Alfa . cos3(Tita)
y = Alfa . sin3(Tita)
z = e(raiz4|x+y|). log(1
donde 0 <= Tita <= 2PI.
Realizar un programa que
a) si Alfa y Tita tienen
b) para pares de valores

+ tan2(Tita))
calcule a x, y y z:
sus valores asignados por programa;
Alfa y Tita ingresados por teclado.

PI = 3.141593
c
c
c

-----------------------------------------------------------------Ingreso de los datos por por programa (Alfa y Tita)


------------------------------------------------------------------

c
c
c

Alfa = 1.25
Tita = (120*PI)/180
-----------------------------------------------------------------Operaciones y calculos
-----------------------------------------------------------------x = Alfa * (cos(Tita))**3
y = Alfa * (sin(Tita))**3
z = (exp((abs(x+y))**0.25))* log(1+(tan(Tita)**2))

c
c
c

-----------------------------------------------------------------Presentacion de los resultados por pantalla


-----------------------------------------------------------------WRITE(*,*)' POSICION DE LA PARTICULA:'
WRITE(*,*)' La posicion x es:',x
WRITE(*,*)' La posicion y es:',y
WRITE(*,*)' La posicion z es:',z
WRITE(*,*)' _________________________________________'

c
c
c

-----------------------------------------------------------------Fin del Programa


-----------------------------------------------------------------END

c
c
c
c
c
c
c
c
c

Resultado de corer el ejecutable


[julepino@grus E10]$ gfortran -Wall -o P3E10a P3E10a.f
[julepino@grus E10]$ P3E10a
POSICION DE LA PARTICULA:
La posicion x es: -0.156250224
La posicion y es: 0.811898410
La posicion z es:
3.40920281
_________________________________________
[julepino@grus E10]$

Caso b
c
c
c

PROGRAM P3E10b
-----------------------------------------------------------------Definicion de las variables y constantes
-----------------------------------------------------------------IMPLICIT NONE
REAL x, y, z, Alfa, T, Tita, PI
PI= 3.141593

c
c
c

-----------------------------------------------------------------Ingreso de los datos por teclado (velocidad y angulAlfa y Tita)


-----------------------------------------------------------------WRITE(*,*)' Ingrese Alfa:'
READ(*,*)Alfa
WRITE(*,*)'
READ(*,*)T

c
c
c

Ingrese el angulo Tita en grados:'

-----------------------------------------------------------------Operaciones y calculos
-----------------------------------------------------------------Tita = T * PI / 180
x = Alfa * (cos(Tita))**3
y = Alfa * (sin(Tita))**3
z = (exp((abs(x+y))**0.25))* log(1+(tan(Tita)**2))

c
c

-----------------------------------------------------------------Presentacion de los resultados por pantalla

-----------------------------------------------------------------WRITE(*,*)' POSICION DE LA PARTICULA:'


WRITE(*,*)' La posicion x es:',x
WRITE(*,*)' La posicion y es:',y
WRITE(*,*)' La posicion z es:',z
WRITE(*,*)' _________________________________________'

c
c
c

-----------------------------------------------------------------Fin del Programa


-----------------------------------------------------------------END

c
c
c
c
c
c
c
c
c
c
c
c
c

Resultado de correrel ejecutable P3E10b


[julepino@grus E10]$ gfortran -Wall -o P3E10b P3E10b.f
[julepino@grus E10]$ P3E10b
Ingrese Alfa:
1.25
Ingrese el angulo Tita en grados:
120
POSICION DE LA PARTICULA:
La posicion x es: -0.156250224
La posicion y es: 0.811898410
La posicion z es:
3.40920281
_________________________________________
[julepino@grus E10]$

Ejercicio No. 11
c
Construir un programa para calcular las races x1 y x2 de un
c
c
c
c
c
c
c
c
c
c
c
c

polinomio de grado dos,


p(x) = ax2 + bx + c,
usando para su calculo las siguientes expresiones,
matematicamente equivalentes:
Expresion 1:
x1 = (b + sqrt(b2 4 a c))/2a
x2 = (b - sqrt(b2 4 a c))/2a
Expresion 2:
x1 = q / a
x2 = c / q
q = 0.5 (b + (signo b).sqrt(b2 4 a c)
Usar los siguientes conjuntos de datos

c
c
c
c
c

a)
b)
c)
d)
e)

c
c

Nota: En FORTRAN no existe la funcion sgn que aparece en la


expresion de q. En FORTRAN tenemos una funcion de dos argumentos

a
a
a
a
a

=
=
=
=
=

1, b = 1,
1,2, b =
3, b = 4,
103, b =
105, b =

c = 2
5,3, c = 4,8
c = 5
50, c = 103
32, c = 1

c
c

(sign(arg1, arg2)) que nos devuelve el valor absoluto de arg1 con


el signo del arg2.
PROGRAM P3E11
REAL a, b, c, d, q, x1, x2, x1a, x2a

c
c
c

-----------------------------------------------------------------Ingreso de los coeficientes de la ecuacion por teclado


-----------------------------------------------------------------WRITE(*,*)' ingrese los coeficientes a, b, c separados por coma:'
read(*,*)a,b,c

c
c
c

-----------------------------------------------------------------Operaciones y Calculos
-----------------------------------------------------------------d = SQRT(b**2 - 4*a*c)
q = -0.5 * (b + (sign(1.0,b)) * d)
x1
x2

= (-b + d)/(2*a)
= (-b - d)/(2*a)

x1a = c/q
x2a = q/a
c
c
c

-----------------------------------------------------------------Presentacion de los resultados en pantalla


-----------------------------------------------------------------WRITE(*,*)' x1: ',x1
WRITE(*,*)' x1a:',x1a
WRITE(*,*)' x2: ',x2
WRITE(*,*)' x2a:',x2a
END

c
c
c
c
c
c
c
c
c
c
c

Resultados de aplicar el ejecutable a los datos.


[julepino@grus E11]$ gfortran -Wall -o P3E11 P3E11.f
[julepino@grus E11]$ P3E11
ingrese los coeficientes a, b, c separados por coma:
1,1,-2
x1:
1.00000000
x1a:
1.00000000
x2:
-2.00000000
x2a: -2.00000000
[julepino@grus E11]$ P3E11
ingrese los coeficientes a, b, c separados por coma:

c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

-1.2,5.3,4.8
x1: -0.771051824
x1a: -0.771051824
x2:
5.18771839
x2a:
5.18771887
[julepino@grus E11]$ P3E11
ingrese los coeficientes a, b, c separados por coma:
3,4,5
x1:
NaN
x1a:
NaN
x2:
NaN
x2a:
NaN
No es posible calcular las raices de esteejemplo porque 4ac es
mayor b2, por tanto las raices son complejas y el programa no
esta preparado paracalcularlas
[julepino@grus E11]$ P3E11
ingrese los coeficientes a, b, c separados por coma:
.001,50,.001
x1:
0.00000000
x1a: -2.00000013E-05
x2:
-49999.9961
x2a: -49999.9961
[julepino@grus E11]$ P3E11
ingrese los coeficientes a, b, c separados por coma:
.00001,32,1
x1:
0.00000000
x1a: -3.12500000E-02
x2:
-3200000.00
x2a: -3200000.00
[julepino@grus E11]$

Ejercicio No. 12
c
c
c
c
c
c
c
c
c
c
c
c
c
c

Ejercicio 12: Dadas las variables con los valores que se indican:
A = 2; B = 5; C = 10; D = 2.5; E = -4; I = 2; J = 3; K = -2;
F = .FALSE.; G=1;T = .TRUE.; Z=-1,
deducir el valor logico de cada una de las siguientes
expresiones logicas:
a) T.AND.F.OR..FALSE.
b) A**I+B.LE.B/C+D
c) I/J.EQ.2+K.AND.B/C+D.GE.E+C/D-A**J
d) C**2+D*E-10.0E+2.LE.B+2.0*C.AND.(.FALSE..OR..NOT..FALSE.)
e) (B*J+3.0).EQ.(D-E).AND.(.NOT.F)
f) ((2+A).LT.B).OR.(C.GE.J.AND.(5*G).NE.Z)
g) .NOT.F.OR.T.AND.2*C.LT.-E+B
h) T.AND.MOD(C,2).EQ.0
i) B.GT.A.AND.B-E.NE.I.OR.J*K.LT.K+I.OR..NOT.T
PROGRAM P3E12
IMPLICIT NONE
INTEGER A, B, C, E, I, J, K, G, Z

REAL D
LOGICAL F, T, ZA, ZB, ZC, ZD, ZE, ZF, ZG, ZH, ZI
A
B
C
D
E
I
J
K
G
Z

=
=
=
=
=
=
=
=
=
=

2
5
10
2.5
-4
2
3
-2
1
-1

F = .FALSE.
T = .TRUE.
ZA = T.AND.F.OR..FALSE.
WRITE(*,*)'ZA :',ZA
ZB = A**I+B.LE.B/C+D
WRITE(*,*)'ZB :',ZB
ZC = I/J.EQ.2+K.AND.B/C+D.GE.E+C/D-A**J
WRITE(*,*)'ZC :',ZC
ZD = C**2+D*E-10.0E+2.LE.B+2.0*C.AND.(.FALSE..OR..NOT..FALSE.)
WRITE(*,*)'ZD :',ZD
ZE = (B*J+3.0).EQ.(D-E).AND.(.NOT.F)
WRITE(*,*)'ZE :',ZE
ZF = ((2+A).LT.B).OR.(C.GE.J.AND.(5*G).NE.Z)
WRITE(*,*)'ZF :',ZF
ZG = .NOT.F.OR.T.AND.2*C.LT.-E+B
WRITE(*,*)'ZG :',ZG
ZH = T.AND.MOD(C,2).EQ.0
WRITE(*,*)'ZH :',ZH
ZI = B.GT.A.AND.B-E.NE.I.OR.J*K.LT.K+I.OR..NOT.T
WRITE(*,*)'ZI :',ZI
END
c
c
c
c

[julepino@grus E12]$ gfortran -Wall -o P3E12 P3E12.f


[julepino@grus E12]$ P3E12
ZA : F
ZB : F

c
c
c
c
c
c
c
c

ZC : T
ZD : T
ZE : F
ZF : T
ZG : T
ZH : T
ZI : T
[julepino@grus E12]$

Ejercicio No. 13
c
c
c
c
c
c
c
c
c
c

Ejercicio 13: Sean A, B y C tres cadenas de caracteres,


de longitud 4, 6 y 10 respectivamente, y _ un espacio en
blanco. Determinar los valores de las siguientes asignaciones
y operaciones:
a) A1 = PAR0
b) B1 = PARE
c) A2 = PARED
d) B2 = 00PAREDES
e) C1 = ASTRO//0Y0//GEO
f) C2 = FERRO//CARRILES
PROGRAM P3E13

C
C
c
C
c
c
c
c

IMPLICIT NONE
CHARACTER*4 A1, A2
CHARACTER*6 B1, B2
CHARACTER*10 C1, C2
CHARACTER PARO, PARE, PARED, OOPAREDES, ASTRO, OYO, GEO, FERRO
CHARACTER CARRILES
a)
A1
b)
B1
c)
A2
d)
B2
e)
C1
f)
C2

= 'PARO'
='PARE'
= 'PARED'
= 'OOPAREDES'
= 'ASTRO'//'OYO'//'GEO'
= 'FERRO'//'CARRILES'

WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'
WRITE(*,*)'

A1
B1
A2
B2
C1
C2

=',A1
=',B1
=',A2
=',B2
=',C1
=',C2

END
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

[julepino@grus E13]$ gfortran -Wall -o P3E13 P3E13.f


P3E13.f:26.72:

Resultado

c
c
c
c
c
c
c
c

[julepino@grus E13]$ P3E13


A1 =PARO
B1 =PARE
A2 =PARE
B2 =OOPARE
C1 =ASTROOYOGE
C2 =FERROCARRI
[julepino@grus E13]$

A2 = 'PARED'
1
Warning: CHARACTER expression will be truncated in assignment (4/5)
at (1)
P3E13.f:28.72:
B2 = 'OOPAREDES'
1
Warning: CHARACTER expression will be truncated in assignment (6/9)
at (1)
P3E13.f:30.72:
C1 = 'ASTRO'//'OYO'//'GEO'
1
Warning: CHARACTER expression will be truncated in assignment
(10/11) at (1)
P3E13.f:32.72:
C2 = 'FERRO'//'CARRILES'
1
Warning: CHARACTER expression will be truncated in assignment
(10/13) at (1)
[julepino@grus E13]$

Ejercicio No. 14
c
c
c

Sean las siguientes variables con sus respectivos valores:


POS = 1; PIL = Juan Manuel Fangio; AUT = Maserati;
NAC = Argentina; V UE = 22; H = 3; M = 30; S = 38,3.

c
c
c
c
c
c

Escribir un programa que declare correctamente el tipo de cada


variable, y que escriba por pantalla POS, PIL,AUT,NAC,VUE,H,M,S
con un formato adecuado para reproducirlo de la siguiente manera:
Nro. Piloto
Auto
Pais
Vlts. Tiempo
1
Juan Manuel Fangio Maserati Argentina 22
3h 30m 38.3s
Existe un unico formato para hacerlo?
PROGRAM P3E14D
IMPLICIT NONE
CHARACTER*18 POS, PIL, AUT, NAC, VUE, H, M, S
POS
PIL
AUT
NAC
VUE
H =
M =
S =
22

='1'
='Juan Manuel Fangio'
= 'Maserati'
= 'Argentina'
= '22'
'3h'
'30m'
'38,3s'

FORMAT(2X,A4,2X,A18,2X,A8,2X,A9,2X,A5,2X,A2,X,A3,X,A5)
WRITE(*,*)' Pos. Piloto
Auto
+Tiempo'
WRITE(*,22) POS, PIL, AUT, NAC, VUE, H, M, S

Pais

Vlts.

END
c
c
c
c
c
c

Resultado
[julepino@grus E14]$ gfortran -Wall -o P3E14D P3E14D.f
[julepino@grus E14]$ P3E14D
Pos. Piloto
Auto
Pais
Vlts. Tiempo
1
Juan Manuel Fangio Maserati Argentina 22
3h 30m 38,3s
[julepino@grus E14]$

Otro formato (Ttulos centrados)


PROGRAM P3E14
IMPLICIT NONE

c 22 FORMAT(2X,A4,2X,A18,2X,A8,2X,A9,2X,A5,2X,A12)
c 23 FORMAT(2X,A4,2X,A4,1X,A6,1X,A6,2X,A8,2X,A9,2X,A5,2X,A2,1X,A3,1X,
c +A5)
WRITE(*,*)' Pos. Piloto
Auto
Pais Vlts.
+ Tiempo'

WRITE(*,*)' 1 Juan Manuel Fangio Maserati Argentina 22


+3h 3om 38.3s'

c
c
c
c
c
c

END
Resultado A
[julepino@grus E14]$ gfortran -Wall -o P3E14A P3E14A.f
[julepino@grus E14]$ P3E14A
Pos. Piloto
Auto
Pais Vlts. Tiempo
1 Juan Manuel Fangio Maserati Argentina 22 3h 3om 38.3s
[julepino@grus E14]$

Ejercicio No. 15
c
c
c
c
c

Sea c = 299792,458 km/seg la velocidad de la luz. Escribir un


programa que calcule la velocidad de la luz en m/h y en UA/da.
Escribir por pantalla el primer valor en notacion cientfica con
10 decimales y el segundo como real con 4 decimales. Recordar que
1 UA es 1,49597870 108 km.
PROGRAM P3E15
IMPLICIT NONE
REAL c, CM, CU
PARAMETER (c = 299792.458)
CHARACTER*50 A,B
CM = c * 1000 * 3600
CU = (c * 24 * 3600) /149597870
A = ' Velocidad de la luz en m/h: '
B = ' Velocidad de la luz en UA/Dia:'

33 FORMAT(A32,E16.10)
34 FORMAT(A32,F9.4)
WRITE(*,33)A,CM
WRITE(*,*)'--------------------------------------------'
WRITE(*,34)B,CU
END

c
c
c
c
c
c
c

Resultado
[julepino@grus E15]$ gfortran -Wall -o P3E15 P3E15.f
[julepino@grus E15]$ P3E15
Velocidad de la luz en m/h: 0.1079252943E+13
-------------------------------------------Velocidad de la luz en UA/Dia: 173.1446
[julepino@grus E15]$

Ejercicio NO. 16
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

Descargar el archivo Detectando-Errores.f de la pagina de la


Catedra. Es un programa de asignacion de valores, sin una funcion
especfica, solo ilustrativo.
Compilar el programa con:
gfortran Detectando-Errores.f
y usando
gfortran -Wall Detectando-Errores.f
Observa diferencia entre los mensajes de error en cada
compilacion? Interprete los mensajes de error.
Como los solucionara?
Sobre el programa sin modificar (descargarlo nuevamente si es
necesario), ejecutar:
ftnchek Detectando-Errores.f
Los mensajes de error son los mismos que en los casos anteriores?
Nota: ftnchek no compila el programa, solo lo analiza y brinda
informacion adicional sobre errores que el compilador no detecta.

PROGRAM DETECTANDO_ERRORES
PARAMETER (T=1)
INTEGER T, K
CHARACTER*2 C, D
REAL A, B, F, G, Z
A = 3.14159
D = "Yo"

T=2
C = 17
K=A
B=C/D
G = F**2 / 2.3 * A
Z = 1/2
WRITE(*,*) "Z: " , Z , "G: ", G
END

c
c

[julepino@grus E16]$ gfortran Detectando-Errores.f


Detectando-Errores.f:5.15:

c
c
c

INTEGER T, K
1
Error: Symbol 't' at (1) already has basic type of REAL
Detectando-Errores.f:13.6:

c
c
c
c
c

T=2
1
Error: Named constant 't' in variable definition context
(assignment) at (1)
Detectando-Errores.f:15.10:

C = 17
1
Error: Can't convert INTEGER(4) to CHARACTER(1) at (1)
Detectando-Errores.f:19.10:

c
c
c
c
c
c

B=C/D
1
Error: Operands of binary numeric operator '/' at (1) are
CHARACTER(1)/CHARACTER(1)
[julepino@grus E16]$

------------------------------------------------------------------

c
c

[julepino@grus E16]$ gfortran -Wall Detectando-Errores.f


Detectando-Errores.f:5.15:

c
c
c

INTEGER T, K
1
Error: Symbol 't' at (1) already has basic type of REAL
Detectando-Errores.f:13.6:

c
c
c
c
c

T=2
1
Error: Named constant 't' in variable definition context
(assignment) at (1)
Detectando-Errores.f:15.10:

c
c
c
c

C = 17
1
Error: Can't convert INTEGER(4) to CHARACTER(1) at (1)
Detectando-Errores.f:17.10:

K=A
1
Warning: Possible change of value in conversion from REAL(4)
to INTEGER(4) at (1)
Detectando-Errores.f:19.10:

c
c
c
c
c
c
c

B=C/D
1
Error: Operands of binary numeric operator '/' at (1) are
CHARACTER(1)/CHARACTER(1)
[julepino@grus E16]$

------------------------------------------------------------------

[julepino@grus E16]$ ftnchek Detectando-Errores.f

FTNCHEK Version 3.3 November 2004

c
c

File Detectando-Errores.f:
5
INTEGER T, K

c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

^
Error near line 5 col 15 file Detectando-Errores.f: type
declaration must precede PARAMETER definition
13
T=2
^
Error near line 13 col 7 file Detectando-Errores.f: left side
is not assignable: it is a constant
15
C = 17
^
Error near line 15 col 9 file Detectando-Errores.f: type mismatch:
intg const 17 assigned to char*2 C
17
K=A
^
Warning near line 17 col 9 file Detectando-Errores.f: real A
truncated to intg K
19
B=C/D
^
Error near line 19 col 13 file Detectando-Errores.f: operands
cannot be combined in expression: char*2 C / char*2 D
23
Z = 1/2
^
Warning near line 23 col 12 file Detectando-Errores.f: integer
const expr yields result of 0
^
Warning near line 23 col 9 file Detectando-Errores.f: integer
quotient expr 1/2 converted to real

c
c
c

Warning in module DETECTANDO_ERRORES in file Detectando-Errores.f:


Variables used before set
F used at line 21 file Detectando-Errores.f; never set

c
c

4 syntax errors detected in file Detectando-Errores.f


5 warnings issued in file Detectando-Errores.f

[julepino@grus E16]$

Warning in module DETECTANDO_ERRORES in file Detectando-Errores.f:


Variables set but never used:
B set at line 19 file Detectando-Errores.f
K set at line 17 file Detectando-Errores.f
T set at line 3 file Detectando-Errores.f

Ejercicio No. 17 (fortran 90)


!
!
!
!
!
!
!
!
!
!

Ejercicio a:
Ejercicio a: El periodo de oscilacion de un pendulo T (en
segundos) esta dado por la ecuacion:
T = 2PI sqrt(L/g)
donde L es la longitud del pendulo en metros, y g es la
aceleracion debida a la gravedad en metros por segundo. Escribir
un programa para calcular el perodo de un pendulo de longitud L,
cuyo valor es ingresado por el usuario. Utilizar la instruccion
parameter para definir el valor de las constantes PI y g
g = 9.81 m/s2.

!
!
!

--------------------------------------------------------------Nombre del Programa


--------------------------------------------------------------PROGRAM PENDULO

!
!
!

--------------------------------------------------------------Declaracion de variables
--------------------------------------------------------------IMPLICIT NONE
REAL :: T, L
REAL, PARAMETER :: g = 9.81, PI = 3.14159265358979

!
!
!

--------------------------------------------------------------Ingreso de variables (Longitud del pendulo)


--------------------------------------------------------------WRITE(*,*)' Ingrese la Longitud L del Pendulo en metros:'
READ(*,*)L

!
!
!

--------------------------------------------------------------Proceso de calculo
--------------------------------------------------------------T = 2 * PI * SQRT(L/g)

!
!
!

--------------------------------------------------------------Impresion del resultado en pantalla


--------------------------------------------------------------WRITE(*,*)' El periodo del pendulo en segundos es:',T

!
!

--------------------------------------------------------------Fin del Progama

--------------------------------------------------------------END PROGRAM PENDULO

!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!

Resultado para longitudes entre 1 y 64 metros


[julepino@grus E17]$ gfortran -Wall -o P3EA P3EA.f90
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
1
El periodo del pendulo en segundos es: 2.00606680
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
2
El periodo del pendulo en segundos es: 2.83700681
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
4
El periodo del pendulo en segundos es: 4.01213360
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
8
El periodo del pendulo en segundos es: 5.67401361
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
16
El periodo del pendulo en segundos es: 8.02426720
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
32
El periodo del pendulo en segundos es: 11.3480272
[julepino@grus E17]$ P3EA
Ingrese la Longitud L del Pendulo en metros:
64
El periodo del pendulo en segundos es: 16.0485344
[julepino@grus E17]$

Ejercicio No. 18 (fortran 90)


!
!
!
!
!

Ejercicio b:
Reescribir el ejercicio 15 de esta practica en Fortran 90,
guardando el formato de escritura en una variable de tipo caracter.
Ejercicio 15: Sea c = 299792,458 km/seg la velocidad de la luz.

!
!
!
!

Escribir un programa que calcule la velocidad de la luz en m/h


y en UA/da. Escribir por pantalla el primer valor en notacion
cientfica con 10 decimales y el segundo como real con 4 decimales.
Recordar que 1 UA es 1,49597870 108 km.

!
!
!

-------------------------------------------------------Nombre del Programa


-------------------------------------------------------PROGRAM P3EB90

!
!
!

-------------------------------------------------------Declaracion de variables y parametros


-------------------------------------------------------IMPLICIT NONE
REAL:: CM, CU
REAL, PARAMETER:: C=299792.458
CHARACTER*50:: A,B,FM1,FM2

!
!
!

-------------------------------------------------------Calculo de la velocidade la luz en m/h y en UA/dia


-------------------------------------------------------CM = C * 1000 * 3600
CU = (C * 24 * 3600) /149597870

!
!
!

-------------------------------------------------------Escritura de Resultados en pantalla con el formato pdido


-------------------------------------------------------A = ' Velocidad de la luz en m/h: '
B = ' Velocidad de la luz en UA/Dia:'

FM1 = '(A32,E16.10)'
FM2 = '(A32,F9.4)'
WRITE(*,FM1)A,CM
WRITE(*,*)'--------------------------------------------'
WRITE(*,FM2)B,CU
!
!
!

-------------------------------------------------------Fin del Programa


--------------------------------------------------------

END PROGRAM P3EB90

!
!
!
!
!
!
!

Resultados
[julepino@grus E18]$ gfortran -Wall -o P3EB P3EB.f90
[julepino@grus E18]$ P3EB
Velocidad de la luz en m/h: 0.1079252943E+13
-------------------------------------------Velocidad de la luz en UA/Dia: 173.1446
[julepino@grus E18]$

Mismo Programa para que la notacin cientfica empiece con un digito de valor no 0
La notacin cientfica debe expresarse : ESx.y
! -------------------------------------------------------! Nombre del Programa
! -------------------------------------------------------PROGRAM P3EB90
!
!
!

-------------------------------------------------------Declaracion de variables y parametros


-------------------------------------------------------IMPLICIT NONE
REAL:: CM, CU
REAL, PARAMETER:: C=299792.458
CHARACTER*50:: A,B,FM1,FM2

!
!
!

-------------------------------------------------------Calculo de la velocidade la luz en m/h y en UA/dia


-------------------------------------------------------CM = C * 1000 * 3600
CU = (C * 24 * 3600) /149597870

!
!
!

-------------------------------------------------------Escritura de Resultados en pantalla con el formato pdido


-------------------------------------------------------A = ' Velocidad de la luz en m/h: '
B = ' Velocidad de la luz en UA/Dia:'

FM1 = '(A32,ES16.8)'
FM2 = '(A32,F9.4)'

WRITE(*,FM1)A,CM
WRITE(*,*)'--------------------------------------------'
WRITE(*,FM2)B,CU
!
!
!

-------------------------------------------------------Fin del Programa


-------------------------------------------------------END PROGRAM P3EB90

!
!
!
!
!
!

[julepino@grus E18]$ gfortran -Wall -o P3EBS P3EBS.f90


[julepino@grus E18]$ P3EBS
Velocidad de la luz en m/h: 1.07925294E+12
-------------------------------------------Velocidad de la luz en UA/Dia: 173.1446
[julepino@grus E18]$

Potrebbero piacerti anche