PROGRAMACION
FORTRAN 90
Memoria interna
(registros)
Unidad de
Periféricos de control Periféricos de
entrada salida
Unidad
aritmética y
lógica
Unidad Central de
procesamiento (CPU)
La CPU es el alma de la computadora:
• Unidad de Control: controla todas las otras partes de la computadora.
• Unidad Aritmética y lógica: realiza los cálculos matemáticos lógicos
• Memoria Interna: almacena temporariamente de los resultados intermedios
durante los cálculos.
SI=1 NO=0
2x 101 26 → 64 122 – 64 = 58
25 → 32 58 – 32 = 26
1 x 102 24 → 16 26 – 16 = 10
23 → 8 10 – 8 = 2
12210= 1 x 102 +2 x 101 + 2 x 100 22 → 4 2 – 4 = Excede
el 122
21 → 2 2–2=0
20 → 1 0 – 1 =Excede
el 122
11110102 = 1 x26 + 1 x 25 +1 x 24 + 1
x 23 + 0 x 22 + 1 x 21 + 0 x 20
Usamos 7 bits para representar al 122
En general, si se agrupan n bits se pueden representar 2n posibles
valores.
Ej:
8bits = 1 byte puede representar 256 valores numéricos desde -128 a
+127 inclusive (la mitad valores negativos y la otra mitad el 0 mas los
valores positivos).
Sentencias Sentencias no
ejecutables ejecutables
PROGRAM mi_primer_programa
! Objetivo: Ejemplificar las secciones de un programa FORTRAN
! Declaro las variables usadas en el programa
INTEGER : : i, j, k
! Leo los números que hay que multiplicar y los guardo en las variables i y j
PRINT*, entrar los numeros que hay que multiplicar !Cartel
READ*, i, j
k=i*j ! Multiplico los números
PRINT*,„resultado=„, k ! Imprimo el resultado
! Finalización
STOP
END PROGRAM mi_primer_programa
Compilar, Conectar (linking , “linkeditar”) Ejecutar un Programa FORTRAN
Compilador Sistema de
FORTRAN librerías
Ayuda a identificar
errores del lenguaje
FORTRAN
Constantes y Variables en FORTRAN
Buenas Costumbres:
Poner nombres que nos ayuden a identificar las variables.
Ej: mes
Hacer un diccionario de los nombres de las variables.
Ej: z500 geopotencial en 500 Hpa
vorti_300 vorticidad relativa en 300 HPa
Hay 5 tipos de constantes y variables Enteras
FORTRAN Reales
Complejas
Lógicas
Character (grafía)
Aritmética Real
INICIO A
A
Diagrama de flujo: se utiliza para describir gráficamente un algoritmo
Hace referencia a
una “subrutina”
EJ: Dado un numero A calcular su raíz cuadrada e imprimirlo
Diagrama de flujo
comienzo
Leo A
no Imprimo:
„No tiene
A> 0
solución‟
si
B=sqrt(A)
Imprimo : „
la raíz es „
B fin
Constantes y variables lógicas
Sólo tienen 2 opciones: verdadero o falso
Las contantes tienen la siguiente forma:
.true.
.false.
Las variables lógicas deben ser declaradas se escriben antes de las sentencias
ejecutables:
Logical : : var1, var2, var3
l1 .NOT. l1
.FALSE. .TRUE.
.TRUE. .FALSE.
Ej: Diseñar y escribir un programa para resolver las raíces de una ecuación
cuadrática distinguiendo a que tipo pertenecen.
Leer
a,b,c
d=b2-4ac
v Imprimir
d>0 «La ecuación tiene dos
raíces reales
DIFERENTES»
F
v Imprimir
D<0 «La ecuación tiene dos
raíces COMPLEJAS»
F
v Imprimir
D=0
«La ecuación tiene dos
raíces IGUALES»
FIN
Brazos
Bloque IF simple
Permite que se ejecuten una serie de tareas si y sólo si una expresión lógica es
verdadera.
IF(logical_exp) then
sentencia1
sentencia2 Bloque1
…
END IF
Si la expresión lógica es verdad entonces se ejecuta el Bloque1. Si la expresión lógica es
falsa se saltea todo el Bloque1 y ejecuta la sentencia posterior al END IF
Exp.
logica
verdad
Sentencia 1
Sentencia 2
…..
EJ: Dado un numero A calcular su raíz cuadrada e imprimirlo
Leo
A
A> 0
si
B=sqrt(A)
BLOQUE DE
INSTRUCCIONES Imprimo
B
fin
Brazos IF (ExpLogica) THEN
Bloque IF doble decisión BLOQUE DE SENTENCIAS A
ELSE
BLOQUE DE SENTENCIAS B
END IF
Falso Verdad
Exp.
lógica
Sentencia A Sentencia M
Sentencia B Sentencia N
….. …..
Elaborar un diagrama de flujo, que visualice un mensaje, que al
ingresar un numero entero sea «positivo» o «negativo»
comienzo
Leo
N
Verdad
Falso
N> 0
Imprimir Imprimir
«N es negativo» «N es positivo»
fin
DESICIONES ANIDADAS O MULTIPLES
as clausulas ELSE y ELSE IF
Permiten sumar otros Bloques de tareas
Ej:
PROGRAM raices_de_la_ecuacion_cuadratica
! Proposito: calcular las raíces de la ecuación cuadrática y clasificar el !resultado según
sea con 2 soluciones reales distintas , 2 soluciones reales !iguales o 2 soluciones
complejas.
!
IMPLICIT NONE
REAL :: a !coef de x2
REAL :: b !coef de x
REAL :: c !coef indep
REAL :: discrim !discriminante
REAL :: part_real !parte real de la solucion
REAL :: part_ima !parte imaginaria de la solucion
REAL :: x1 !sol. Real 1
REAL :: x2 !sol. Real 2
!
WRITE(*,*) “Este programa resuelve la ec. a x2 +b x +c =0”
WRITE(*,*) “Entre los coeficientes a, b y c”
READ(*,*) a, b, c
WRITE(*,*) “ los coeficientes a, b y c son:”, a, b, c
! Calculo el discriminante
Discrim=b**2 – 4.*a*c
!clasifico la raiz según el discriminante
IF(discrim>0) then
x1=(-b+sqrt(discrim))/(2.*a)
x2=(-b-sqrt(discrim))/(2.*a)
WRITE(*,*) “ esta ecuación tiene 2 raíces reales”
WRITE(*,*) “x1=“, x1
WRITE(*,*) “x2=“, x2
ELSE IF(discrim<0) then
part_real=(-b)/(2.*a)
part_ima=sqrt(abs(discrim))/(2.*a)
WRITE(*,*) “ esta ecuación tiene 2 raíces complejas”
WRITE(*,*) “x1=“,part_real,”+i”,part_ima
WRITE(*,*) “x2=“, part_real,”-i”,part_ima
ELSE IF(discrim==0) then
x1=(-b)/(2.*a)
WRITE(*,*) “ esta ecuación tiene 2 raíces reales iguales”
WRITE(*,*) “x1=x2=“, x1
END IF
END PROGRAM raices_de_la_ecuacion_cuadratica
El nombre puede tener 31 caracteres de longitud y debe empezar con una letra.
Si un nombre se le asigna al IF en el END IF también debe figurar ese nombre. En los
ELSE el nombre es opcional.
Este nombre es de utilidad en programas muy largos.
Los IF pueden ser anidados
Selector