Vous êtes sur la page 1sur 42

LENGUAJE DE

PROGRAMACION

FORTRAN 90

Autor: Ing. William Chauca Nolasco


Diagrama de una computadora
Memoria Memoria
principal secundaria

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.

Memoria Principal: es utilizada para almacenar temporariamente el programa


que está ejecutando la computadora y los datos que el programa requiere.

Memoria secundaria: almacena los programas y los datos por el tiempo


requerido por el usuario. Ej.: Disco rígidos, CD etc.
Las memorias de la computadora está compuesta de millones de interruptores
Cada interruptor representa in digito binario (bit)

SI=1 NO=0

Varios bits agrupados pueden ser usados para representar un número en


el sistema de numeración binario.
Un byte= 8bit es la agrupación mas pequeña de bits para representar un
número en sistema binario.
Los bytes son usados para medir la capacidad de memoria de una
computadora.
Ej Memoria Principal 256 megabytes (256 millones de bytes)
Disco Rígido 40 Gigabytes (40 billones de bytes )
 Actualmente las CPU usan agrupaciones de 32 bits (4 bytes) o 64 bits (8
bytes, windows vista) . A esta agrupación dependiente de cada
computadora se lo llama word (no es un valor fijo → 2n bytes)
El sistema de numeración binario
Sistema decimal Sistema binario
• 122 • Dos dígitos 0 y 1
2 x 100 Ej: 12210

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).

 16 bits = 2 bytes pueden representar 65536 posibles valores (-32768 a


+32767)}

 32 bits = 4 bytes pueden representar 4294967296 posibles valores.


Caracteres del FORTRAN

N° de Símbolos Tipo Caracter


26 Letras A– Z
mayúsculas
26 Letras minúsculas a-z
10 Dígitos 0-9
1 Guión Bajo _
5 Símbolos + - * / **
aritméticos
17 Miscelánea de ( ) . = , ´ $ :
símbolos ! “ %& ; < >
? y blanco

El Fortran no distingue entre mayúsculas y minúsculas.


Ej: Alfa=ALFA=alfa
Un programa FORTRAN consiste en una serie de sentencias u “ordenes“
destinadas a cumplir objetivo del programador

Sentencias Sentencias no
ejecutables ejecutables

Describen acciones como Provee información


operaciones aritméticas etc. necesaria para la ejecución
del programa.

La sentencias en Fortran 90/95 pueden ser escritas en cualquier


lugar de una línea y superar los 132 caracteres.
Si una línea es muy larga para continuar en la línea siguiente debe
finalizar con un ampersand (&) ( se puede empezar en la siguiente con
también con un ampersand).
 Puede continuarse hasta 40 líneas
Ej: 3 formas de escribir la misma sentencia
Sum = entra1+ entra2 ! Suma los valores de entra1 y entra2

Sum = entra1 &


+ entra2 ! Suma los valores de entra1 y entra2

999 Sum = entra1 & ! Suma los valores de entra1 y entra2


&+ entra2

Los textos que se encuentran después del signo de admiración son


comentarios. Son ignorados por el FORTRAN y ayudan para la
documentación del programa. Se utilizan al final de la sentencia.

La última sentencia esta precedida por un número . Éste es como el


“nombre” se la sentencia, se llama nivel y puede tener un número entre 1 y
99999. Se utiliza para invocar a esa sentencia desde otro lugar del
programa. No es el número de línea.
La estructura de un programa FORTRAN
La sección de declaración: Grupo de sentencias no ejecutables al comienzo
del programa que define el nombre del programa y el numero y tipo de variables
utilizadas en el programa.
La sección de ejecución: Sentencias que describen las acciones a ser
realizadas por el programa
La sección de terminación: Sentencias que paran la ejecución del programa
y le indican al compilador que el programa esta completo

Ej: Leer 2 números enteros multiplicarlos e imprimir su resultado

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

Programa Archivo Programa


FORTRAN Objeto Ejecutable
Compilar “linkeditar”

nombre.f90 nombre.obj nombre.exe

Compilador Sistema de
FORTRAN librerías

Ayuda a identificar
errores del lenguaje
FORTRAN
Constantes y Variables en FORTRAN

Constantes: Se definen al comienzo del programa. El compilador le asigna


un valor constante en la memoria y luego se la puede invocar en cualquier
punto del programa.
Variables: Se le asigna un lugar variable en la memoria. Los nombres de las
variables pueden tener hasta 31 caracteres y pueden ser alfabéticos,
numéricos y el guión bajo pero deben comenzar con un carácter alfabético.
Ej:
mes, z500, vorti_300

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)

Constantes y variables enteras: “No pueden tener ni puntos ni comas”


No representan números con fracciones
Se almacenan en una word ⇒ la magnitud del valor
del entero que se pueda almacenar va a depender de la computadora (si trabaja en 16, 32 o
64 bits).

Constantes y variables reales:“Pueden tener punto decimal pero no comas”


Representan números con fracciones
Pueden ser escritos con o sin exponente entero (1.2e-5, 0.000012, 0.12E1) La mantisa
debe tener el punto decimal.
La mantisa (precisión) y el exponente (rango) se almacenan en 2 partes. (Ver Tabla )
Computadora Bits totales Bits para Precisión en Bits para el Rango del
para el mantisa dígitos exponente exponente
número decimales
IEEE (PC) 32 24 7 8 10-38 a 1038
IEEE 64* 53 15 11 10-308 a 10308
(Macitosh,
Sun Sparc,
etc)
VAX 32 24 7 8 10-38 a 1038
64* 56 15 8 10-38 a 1038
Cray 64 49 14 15 10-2465 a
102465

* Indica longitud opcional

Constantes y variables character: Sucesión de símbolos alfanuméricos.


Constantes → se escriben entre „ o “ Ej:
„Resultado = „ o “Resultado =“.
Definición implícita o explícita de Variables:
Implícita: Las variables que comienzan con la letras I, J, K, L, M y N son
consideradas enteras Las que comienzan con alguna otra letra es
considerada real.
Explícita: Las variables son definidas al comienzo del programa en la
sección de declaración (sentencias no ejecutables)

Integer : : var1, var2, var3


REAL : : var4, var5
Los dobles 2 puntos son opcionales pero se usan para funciones más
complejas

En los programa Fortran, es posible no declarar algunas variables y


dejar que el compilador asuma su tipo a partir de la primera letra de
su nombre. Esto es muy poco recomendable por lo que vamos a
utilizar la modalidad en la que todas las variables son declaradas y le
vamos a indicar al compilador que vamos a trabajar de esta manera
utilizando la sentencia
IMPLICIT NONE
Esta sentencia se ubica luego del nombre del programa y antes de
empezar con la declaración de variables.
Las variables Character: deben ser definidas explícitamente y
especificar su longitud.

CHARACTER (len= <longitud>) : : var1, var2, var3


Ej:
CHARACTER (len=20) : : presion, temperatura, humedad
CHARACTER (20) : : presion, temperatura, humedad
Puede usarse:
CHARACTER*20 presion, temperatura, humedad (FORTRAN 77)

Esta última forma fue declarada obsoleta en Fortran 95 por lo cual no


se recomienda su utilización en nuevos programas

Otra forma para declarar constantes:


Tipo, PARAMETER : : nombre = valor
Ej:
REAL, Parameter : : PI=3.141593, Omega= 7.28E-5
Sentencias de asignación:
El signo = significa una asignación. La expresión a la derecha de una
igualdad esta asignando ese valor a la que está a la izquierda.
Ej:
i = i + 1 → significa que al valor almacenado en la memoria con el nombre i
se le suma 1.
Cálculos aritméticos:
Son: + → adición, - → sustracción, * → multiplicación, / → división,
** → potenciación
Los cálculos: No pueden aparecer 2 operadores seguidos:
K= 2* -2 → No K= 2* (-2) → Correcto
Las operaciones deben se explicitas
p= x(y + z) → No p = x * (y + z) → Correcto
Los paréntesis se resuelven de adentro hacia afuera:
q = 2**((8+2)/5) = 2**(10/5) = 2**2 = 4
Aritmética Entera

El resultado de una operación entre números enteros es un entero

El resultado fraccionario de un cociente entre enteros es truncado

Aritmética Real

El resultado de una operación entre números reales es un real

Tener en cuenta los errores de precisión


Las operaciones entre reales y enteros se llaman mixtas y resultan
confusas.
Ej: 1+ 1/4 =1
1.+ 1/4 =1.
1+ 1./4=1.25
La operación entre un real y un entero da un real.

El FORTRAN 90/95 tiene funciones para transformar los números enteros en


reales y los reales en enteros.

Nombre de Argumento Resultado Comentario


la función

INT(x) REAL ENTERO Parte entera


de x (trunca)
NINT(x) REAL ENTERO Redondea
REAL(i) ENTERO REAL Convierte en
entero un
valor real
En la función exponencial usar siempre que sea posible números enteros.
Nunca elevar un número negativo a una potencia real.
Diseño de diagramación
Diagrama: es una representación gráfica del flujo información de y el proceso de
ejecución del programa.

INICIO A

Plateo del problema en Traducción a


forma clara y precisa lenguaje fuente

Identificar las variables Verificación (prueba


de entrada y salida de escritorio)

Tareas para resolver el FIN


problema (Algoritmo)
Diagrama de Bloque

A
Diagrama de flujo: se utiliza para describir gráficamente un algoritmo

Indica comienzo o Indican el flujo


fin del algoritmo
Indican
Asignación de l continuación
resultado a una
variable
Indican un
Operaciones de proceso
entrada y salida iterativo o un
proceso
reiterativo

Indica elección entre


2 opciones

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

Un operador lógico opera sobre datos numéricos, alfabéticos o lógicos

Operadores F90 Operadores F significado


anteriores
== .EQ. Igual a
/= .NE. distinto
> .GT. Mayor que
>= .GE. Mayor o igual
< .LT. Menor que
<= .LE. Menor o igual
Ej Operación Resultado
3<4 .true.
3<=4 .true.
3==4 .false.
3>4 .false.
4<=4 .true.
„A‟ <„B‟ .true.

En los caracteres alfabéticos se considera orden alfabético


Si comparo entero con real, el entero es convertido a real automáticamente.
4.==4 .true.
Combinaciones lógicas

operación Función Resultado y definición


l1.AND.l2 Logical AND Verdadero si l1 y l2 verdaderos
l1.OR. L2 Logica OR Verdad si l1 o l2 verdad o l1 y l2
son verdad
l1.EQV. l2 Logical EQV Verdad si l1 y l2 verdad o l1 y l2
son falsos
l1.NEQV. L2 Logical Verdad si l1 verdad y l2 falso
NEQV o lo contrario

.NOT. L1 Logical NOT Verdad si l1 es falso y falso si es


verdad
l1 l2 l1.AND.l2 L1.OR.l2 L1.EQV.l2 L1.NEQV.l2
.FALSE. .FALSE. .FALSE. .FALSE. .TRUE. .FALSE.

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

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

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

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.

1 Problema: Resolver la ec. Y ver si el resultado tiene 2 raíces reales distintas, 2


raíces reales igual es o raíces complejas
2 Definir entradas y salidas
ax2+bx+c=0
los datos de entrada son los coeficientes a, b y c
La salida son las raíces del la ecuación distinguiendo su tipo.
3 El algoritmo:
INICIO

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

comienzo Diagrama de flujo

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

Exp. falso Exp. falso


Lógica 1 Lógica 2
verdad verdad

Bloque 1 Bloque 2 Bloque 3


IF(logical_exp 1) THEN
sentencia1
sentencia2 Bloque1

ELSE IF(logical_exp2) THEN
sentencia3
sentencia4 Bloque2

ELSE
sentencia5
sentencia6 Bloque3

END IF

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

Verificación (prueba de escritorio)


x2 + 5x + 6 = 0 x1 = -2 y x2 = -3
x2 + 4x + 4 = 0 x=2
2
x + 2x + 5 =0 x= -1 ∓ i2
Realizar 3 ejecuciones para verificar los 3 casos
Es posible poner un nombre al bloque IF

[nombre:] IF(logical_exp 1) THEN


sentencia1
sentencia2 Bloque1

ELSE IF(logical_exp2) THEN [nombre]
sentencia3
sentencia4 Bloque2

ELSE [nombre]
sentencia5
sentencia6 Bloque3

END IF [nombre]

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

externo: IF (x > 0.) then


……
interno: IF(y>0.) then
……
…….
END IF interno
………
END IF externo

Para solo una linea


IF(exp_logica) sentencia
La sentencia debe de ser ejecutable. Se usa cuando el el bloque tiene una sola
sentencia.
[nombre:] SELECT CASE(exp_caso)
case (caso seleccionado1) [ nombre]
sentencia1
sentencia2 Bloque1

case (caso seleccionado2) [ nombre]
sentencia3
sentencia4 Bloque2

case default [ nombre]
sentencian
sentencian+1 Bloquen

END select [nombre]
DIAGRAMA DE FLUJO PARA LA ESTRUCTURA DE SELECCION

Selector

Lista1 Lista 2 Lista 3 Lista 4 Lista 5

Bloque A Bloque B Bloque C Bloque D Bloque E


Ej:
INTEGER :: temp_c
Temp: SELECT CASE (temp_c)
CASE(:-1)
WRITE(*,*) “Bajo cero ”
CASE(0)
WRITE(*,*) “congelación”
CASE(1:20)
WRITE(*,*) “frio a fresco”
CASE(21:33)
WRITE(*,*) “cálido”
CASE(34:)
WRITE(*,*) “bochornoso”
END SELECT temp

Vous aimerez peut-être aussi