43
Fundamentos de Informática Tema 4 Introducción a Fortran 90 1

Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Embed Size (px)

Citation preview

Page 1: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Fundamentos de Informática Fundamentos de Informática

Tema 4

Introducción a Fortran 90

1

Page 2: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Contenidos

  Introducción a F-90. Identificadores y palabras reservadas   Datos y Tipos de Dato

  Datos e identificadores   Tipos de dato intrínsecos   Variables   Constantes   Literales   Tipos de dato definidos por el usuario

  Expresiones y operadores   Operadores aritméticos   Operadores relacionales   Operadores lógicos   Operadores de cadenas   Precedencia de operadores

  Comentarios   Sentencia de asignación   Entrada y salida de datos (E/S)   Funciones y subrutinas intrínsecas   Estructura general de un programa

2

Page 3: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Introducción a F-90.   FORmula TRANslator. 1957. Fortran II, IV, V, 77, 90(95). 2000

  Lenguaje sencillo pero potente para manejar matrices (como MatLab)

  Defectos achacados

  Escasa facilidad para manejo de texto ( ↑ en F-90).

  Sentencias de Control rígidas. (↑ en F-77 y en F-90)

  Falta Estructura flexible de datos ( F-90 registros)

  Falta de Procedimientos recursivos (algo en F90).

  No memoria dinámica (F-90 matrices Allocatables).

  ELEMENTOS BÁSICOS EN F-90:

  Alfabeto (character). { (A - Z), (a – z), ( 0 - 9), $ & _ + - * / ** = ( ) [ ] . , ; : ' “ % ! ? }

3

Page 4: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Elementos básicos en F-90 Identificadores y palabras reservadas   Palabra reservada

  Aquella que tiene un significado concreto en el lenguaje, que el usuario no puede cambiar (Diccionario de palabras reservadas). ¡ Ojo con la ortografía!

  Identificador   Palabra nueva que utilizamos para denominar algo en el lenguaje. Construcción :

  El primer símbolo del identificador será un carácter alfabético inglés (a, …, z).   Después, se pueden poner caracteres alfanuméricos (a, …, z) y (0, 1, …, 9), el

guión de subrayado ‘_’ o la interrogación de cierre ‘?’.   La longitud máxima entre 6 y 32 caracteres (compiladores distinguen solo 8)   Uso indistinto de mayúsculas y minúsculas (Alto, ALTO, AlTo son la misma) .   No pueden (realmente no deben) coincidir con una palabra reservada.   Es bueno que sean ‘autodescritos’ (NumAlumnos)

  Ejemplos válidos: a, pepe, r456, tu_re_da, AnTeNa, antena

  Ejemplos no válidos: 345abc, mi variable, Nombre.Largo, cañada, camión

  Reglas de Sintaxis y Semántica. Para construir instrucciones (frases) correctas y con significado.

4

Page 5: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

. . .127

89

. . .

. . . . . .

. . .

Contenido

216

89

127

N 2

. . .

2

1

0

Pos.

N 1

Contenido

Memoria Lineal

Pos.

0

3002

3003

Contenido

Sumar

Suma de dos números

3001

Pos.

0

3002

3003

3001

Datos e identificadores

  Una variable no es más que un nombre simbólico que identifica una dirección de memoria.   Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 (ordenador).   Suma cantidad1 y cantidad2 y lo almacenas en total. (usuario)

5

Programa Instrucciones

Datos de entrada

Datos de salida DATOS. Pueden ser:

Variables (concepto más amplio que Matemáticas).

Se identifican con iden-tificador que refiere a una posición de memoria.

Constantes: Literales (se representan por su valor).

Con nombre (identificador que no cambia de valor)

Page 6: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Tipos de datos Intrínsecos   INTEGER (es palabra reservada)

  Números enteros: ± 1073741826 (231) 4 bytes.

  REAL   Números reales. Forma científica. Hasta 10 E+(-)256. 8 bytes   Double Precision. Hasta 10 E+(-)512. 16 bytes

  COMPLEX   Números complejos. Pareja de reales. 8 + 8 bytes

  CHARACTER   Caracteres del alfabeto (ASCII). Uso de “ “ para distinguirlo de

identificadores ( A ≠ ‘A’). La unión forma cadenas de caracteres

  LOGICAL   Valores de verdad o falso (.true. , .false.); . . distingue identificadores

6

Page 7: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Variables

  Para usar una variable en un programa hay que declararla.   Darle nombre y tipo de dato que almacena.   El ordenador conoce así cómo codificar la información que se va

a almacenar en la posición de memoria correspondiente.

  La declaración se hace al principio del programa.

  Efectos de la declaración (variables, constantes-nombre):   El compilador reserva la memoria adecuada [p.e., 4 bytes si es

integer, 8 bytes si es real, o 20 bytes para un dato character (20) ].   Si se le da un valor, lo almacena en la dirección de memoria asignada.

Además, al leer la secuencia de 0-1 almacenada, el programa interpreta el dato correctamente, porque sabe el tipo de dato.

7

Page 8: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Declaración de variables TIPO [lista-atributos]::<lista-variables>

Atributos (no obligados) sirven para indicar características especiales

Inicialización en la declaración: • Les damos un valor inicial. • Se usa el símbolo = y valores literales del tipo adecuado.

1.   INTEGER :: a, b, c

2.   REAL :: total, suma

INICIALIZAR VARIABLES

1.   INTEGER :: cantidad = 100

2.   REAL :: x = 5.67

Page 9: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Declaración implícita   Declaración implícita de variables:

  Fortran 90 declara automáticamente las variables que haya en el programa sin estar previamente declaradas:

  Lo hace en función de la primera letra:   I, J, K, L, M, N : INTEGER   En otro caso: REAL

  Se puede modificar con sentencia IMPLICIT

  No es una buena costumbre. Hay que usar siempre:   IMPLICIT NONE

Page 10: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Constantes con nombre TIPO [lista-atributos], PARAMETER::<lista de nombre=valor>

TIPO , PARAMETER::<lista-constantes>

1.   INTEGER, PARAMETER :: Y =123

2.   REAL, PARAMETER :: X=34.56, PI = 3.1416

3.   REAL, PARAMETER :: PI_2 = 2*PI

4.   CHARACTER (5), PARAMETER :: PEPE

Constantes: Valores literales

INTEGER: +25451 -21 4324

LOGICAL: .TRUE. .FALSE.

REAL: 2.45645 -321765.13 25. 23.00 .8298 -6.2E-06

CHARACTER: “hola”, ‘a’ “-32”

COMPLEX: (2, 4.5) (3.54, -3.2E2)

Page 11: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Cadenas de caracteres CHARACTER :: <lista de identificadores>

CHARACTER (LEN=<número>) :: <lista de identificadores>

CHARACTER (número) :: <lista de identificadores>

1.   CHARACTER (LEN=10):: cad 2.   CHARACTER (10):: cad ; CHARACTER :: carácter Inicialización al declarar: 1.   CHARACTER (LEN=10):: cadena=“Hola” Constantes: 1.   CHARACTER, PARAMETER :: X=‘a’ 2.   CHARACTER (LEN=10), PARAMETER :: cad=“hola” 3.   CHARACTER (LEN=*), PARAMETER :: cad)=“hola” Uso de comillas: 1.   CHARACTER (LEN=*), PARAMETER :: mensaje = ‘ “hola” ’ 2.   CHARACTER (LEN=*), PARAMETER :: palabra = “ don’t ”

Importante: Al dar valores, se trunca o se rellena de blancos

Page 12: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Tipos de dato definidos por el usuario Sirven para englobar datos que se refieren al mismo ente en una única variable estructurada.

Definición:

TYPE <Nombre_Nuevo_Tipo>

<Estructura>

END TYPE <Nombre_Nuevo_Tipo>

Declaración de variables:

TYPE (<Nombre_Tipo>) :: <identificadores>

Acceso a los campos:

Identificador%campo

12

 Es un tipo de dato estructurado heterogéneo y estático.

 Diferenciar el Tipo de dato, de las Variables que toman valores de ese tipo

Page 13: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Tipos de datos definidos por el usuario 1.   TYPE Punto3D

2.   REAL :: x, y, z

3.   END TYPE Punto3D

4.   TYPE Fecha

5.   INTEGER :: dd, mm, aa

6.   END TYPE Fecha

7.   TYPE Persona

8.   CHARACTER (LEN=15) :: nombre

9.   CHARACTER (LEN=30) :: apellidos

10.   TYPE (Fecha) :: fechaNacimiento

11.   END TYPE Persona

12.   TYPE (Punto3D) :: pto1, pto2

13.   TYPE (Fecha) :: fechaNacimiento

14.   Añadir acceso

13

Page 14: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

OPERACIONES CON DATOS ESCALARES Expresiones y operadores aritméticos

- unario ► signo negativo

** ► exponenciación

*, / ► producto y división

+,- ► suma y resta

14

1.   30*2+4 ► 64

2.   30+2*4 ► 38

3.   2.0 ** -4.0 /7.0*8.0 ► 0,0714

4.   2 ** -4 /7 * 8 ► 0

5.   2 * ‘a’ !!! NO ES UNA EXPRESIÓN CORRECTA

Importante: Los operandos y el resultado han de ser del mismo tipo. Asi, cuidado con la división de números enteros

Page 15: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Expresiones y operadores lógicos .AND. ► Conjunción

.OR. ► Disyunción

.NOT. ► Negación

15

1.   .TRUE. .OR. .FALSE. ► .TRUE.

2.   .NOT. .TRUE. ► .FALSE.

3.   3>4 .OR. 6<9 ► .TRUE.

TABLA DE VERDAD

Page 16: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Expresiones y operadores relacionales < ó .LT. ► menor que

> ó .GT. ► mayor que

<= ó .LE. ► menor o igual que

>= ó .GE. ► mayor o igual que

= = ó .EQ. ► igual (Para datos lógicos se usa .EQV. )

/= ó .NE. ► distinto (Para datos lógicos se usa .NEQV. ) Con enteros y reales el orden conocido. Con los complejos sólo la igualdad y la desigualdad.

Con caracteres se usa el orden alfabético-ASCII (orden en el código de representación ASCII). En datos lógicos, .true. > .false.

16

1.   2 > 4 ► .FALSE.

2.   “Pepe” .EQ. “pepe” ► .FALSE.

3.   (7*2-3) .LE. 11 ► .TRUE.

4.   11-4 > “Alberto” !!! No es una expresión correcta

5.   .TRUE. > .FALSE. !!! No es una expresión correcta

Importante: Se comparan datos del mismo tipo. El resultado es un dato LOGICO. Cuidado al comparar números reales (por la precisión en la representación).

Page 17: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Expresiones y operadores de cadenas Concatenación: cad1//cad2 .Se pone cad2 a continuación de cad1

Extracción de subcadenas: cadena (inf : sup)

• Si se omite inf, se toma por defecto el inicio.

• Si se omite sup, se toma por defecto el final.

• inf y sup se incluyen en la subcadena

17

1.   CHARACTER (LEN=10) :: cad=“Hola” , as

2.   Cad // “Pepe” ► “Hola Pepe”

3.   “Pepe” // cad ► “PepeHola ”

4.   As = cad(1:2) ► as = “Ho”

5.   cad(2:4) = ‘ppp’ ► cad = “Hppp ”

6.   cad(3: ) ► “la ”

7.   cad( : 3) ► “Hol”

Page 18: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Precedencia de operadores   **   *, /   +, -   //   .GT., >, .LE., …   .NOT.   .AND.   .OR.   .EQV., .NEQV.

  Se pueden usar paréntesis para cambiar el orden de operaciones   Los que tienen igual nivel, se aplican en orden de aparición de

izquierda a derecha, excepto ** que se hace al revés.

18

Page 19: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

EVALUAR EXPRESIONES. FUNCIONES PROPIAS

  Cosas a tener en cuenta:   En Fortran se escriben de forma lineal (no hay ‘castillos’, exponentes, ..)   División de enteros da entero. Si varios tipos (numéricos), devuelve

tipo más alto (E< R< C): Hace copia tipo más bajo en más alto. Para evitar resultado erróneo, sumar 0.0 ó mult *1.0 a un entero   Potencias: La base ha de ser positiva, si el exponente es real. Prioridad

de drcha a izqda: 3**2**3 es 3**8 y no 9**3.   Comparar reales igualdad: Compara ABS(A-B) con EPSI (prox. a 0)   Longitud máxima de las cadenas es 255.   La compatibilidad de tipo impera. Válidas asignaciones como A = A*B   Símbolo diferente para “comparar con =” (==)   Además se pueden usar una serie de funciones como SQRT, LOG,

LOG10 , ABS, INT, NINT, SIN, COS .... que tienen prioridad sobre todas las operaciones. El/los argumentos siempre entre paréntesis

19

Page 20: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Evaluar expresiones. Ejemplo

A = (5*x1 +1 /(3+3/5)* exp(5.2) ) / (sin(x1)+ log(y1)* 3/ (5+ cos(0.5)))

B =

20

Page 21: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

Comentarios en los programas ! Comentario

Todo lo que sigue a la “!” hasta el final de línea es ignorado por el compilador.

• Es muy importante introducir aclaraciones en el código mediante un uso adecuado de comentarios.

• Facilitan la legibilidad y la compresión del código.

• El traductor ignora los comentarios al procesar el código para generar un ejecutable.

1.   ! Tipo para representar personas

2.   TYPE Persona

3.   CHARACTER (LEN=15):: nombre ! Cadena de longitud 15

4.   CHARACTER (LEN=30) :: apellidos

5.   TYPE (Fecha) :: fechaNacimiento

6.   END TYPE Persona

Page 22: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

La Estructura Secuencial Sentencia de asignación

<variable> = <expresión>

• Dar valor a las variables de nuestro programa.

• Uso conjunto con las expresiones.

• Coincidencia de tipo

Pasos:

• Se evalúa la expresión de la derecha.

• Se cambia el valor de la variable por el resultado.

1.   a= 3*7+2

2.   b=47.3 + 3 + c

3.   a=4

4.   a=a + 2

5.   a%x = 4

6.   Pepe = ‘Hola’ // ‘federico’

Page 23: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

La Estructura Secuencial Entrada y salida de datos (E/S)

  Comunicación básica con el usuario:   Leer datos de teclado.   Escribir información en la pantalla.

23

Operaciones

Salidade

Entradade

Operaciones

Dispositivosde

Entrada Salidade

Dispositivos

Memoria

C.P.U.

...

Disco

Ratón

Teclado Pantalla

Impresora

Disco

...

Page 24: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

La Estructura Secuencial Salida de datos

PRINT*, <lista_expresiones>

24

1.   CHARACTER (LEN=4) :: nombre=“Pepe” 2.   REAL, PARAMETER :: PI=3.14159

3.   REAL :: radio = 2 4.   PRINT*, “hola “, nombre, “, ¿cómo estás?”

Resultado: hola Pepe, ¿cómo estás?

9.   PRINT*, “El área del círculo de radio “, radio, “es “, PI*radio**2 Resultado: El área del círculo de radio 2. es 12.5663605

Page 25: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

.f90

La Estructura Secuencial Entrada de datos

READ*, <lista_variables>

Efecto:

• Lee un dato por teclado.

• Asigna ese valor a la variable (Hasta completar la lista de variables)

En los tipos definidos por el usuario, da igual poner cada componente que el tipo en su conjunto (se desglosa automáticamente).

25

1.   PRINT*, “Introduce el valor de a:”

2.   READ*, a

3.   PRINT*, “Dame tu fecha de nacimiento (dd, mm, aa):”

4.   READ*, dd, mm, aa

Page 26: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

La Estructura Secuencial Funciones y subrutinas intrínsecas   Fortran 90 incorpora una serie de funciones y subrutinas

intrínsecas y predefinidas que completan el conjunto de operadores que hemos visto.

  Estas funciones y subrutinas permiten:   Convertir tipos.   Hacer operaciones matemáticas complejas.   Trabajar con cadenas de caracteres.   …

  Pueden usarse dentro de las expresiones, como si se tratase de operadores ya existentes en el lenguaje (predefinidas). También se hacen llamadas directas (CALL)

Page 27: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Funciones y Subrutinas. Las básicas FUNCIONES   Int (x), Nint(x), Ceiling(y), Floor(y) ; x, y real, devuelve integer   Real(n), Cmplx(x, y), Conjg(z) ; n integer (o complex); z complex   Abs(x), Sqrt (x), Max (x1, x2, …), Min (x1, x2, …)   Mod (m, n) ;devuelve resto de división entera [m – (m/n)*n]   Exp(x), Log(x), Log10(x), Sin(x), Asin(x), Sinh(x), Cos(x), Tan(x), …   Huge (x), Epsilon(x), Precision(x) ; Tamaño max y min representable

SUBRUTINAS (Call nombre)   Random_seed() ; cambio semilla aleatoria   Random_Number (x) ; devuelve (x) un número aleatorio en [0, 1)

27

Page 28: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Funciones y Subrutinas sobre cadenas   Char(n), Ichar(c) ; n integer, c character; pasar carácter a código ASCCII

  AdjustL(cad), AdjustR(cad) ; ajustar a izqda o drcha   Index (cad, c1) ; devuelve posición (integer) en cad, del primer

carácter de c1, si c1 está contenida en cad; sino, devuelve 0   Len (cad) ; Longitud de la cadena (la que se declaró para cad)   Trim (cad) elimina blancos finales de cad   Len_Trim (cad) ; Longitud sin blancos finales   Repeat (cad, i) : concatena cad , i veces   Scan (cad, c1) ; devuelve posición (primero en cad) de cualquier

carácter de c1 que exista en cad; sino hay ninguno, devuelve 0

28

Page 29: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Ejemplos

29

Llamada Respuesta ADJUSTL(‘ Hola ‘) ‘Hola ‘ ADJUSTR(‘ Hola ‘) ‘ Hola’ INDEX (‘Camión’ ,’mi’) 3 INDEX(‘Cadena de prueba’, ‘na’) 5 INDEX(‘Camión’ ,’Mi’) 0 REPEAT (‘Hola’, 3) ‘HolaHolaHola’ SCAN(‘Cadena de prueba’, ‘na’) 2 TRIM(‘ Hola ‘) ‘ Hola’ LENTRIM (‘Hola ‘) 4 LEN(‘Hola ‘) 7

Page 30: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Estructura general de un programa F-90   ! Inicio Programa; Nombre = identificador. !Comentarios, tras ! al final.   PROGRAM Nombre ! PROGRAM EjemploUno !! Es obligada   IMPLICIT NONE ! Elimina Declaración Implícita   ! Declaración de Constantes con nombre   TipoDato, PARAMETER :: NomCons = valor, …. ! Integer, parameter:: NotaMax =10, NotaMin = 0   !Declaración de Variables (e Inicializar)   TipoDato [, atributos]:: Lista NomVariables   CHARACTER, PARAMETER (*) :: Cadena = ‘Hola Tu’   INTEGER:: Zx, Luis, X10 =5 ; REAL:: Pedro, A02x4 ; COMPLEX:: Z   DOUBLE PRECISION:: Dp ; LOGICAL:: Encon = .True., Valido   CHARACTER (LEN= 25) :: Pepe, LuisMiguel*10 ; ! CHARACTER (25) :: Pepe, LuisMiguel*10   !Sentencias Ejecutables (Estructuras) !! Estructura secuencial   Read*, pedro ; zx = x10 * ABS (-1 * Pedro) ; Print*, ‘El valor de zx es ‘, zx   !! CONTAINS !! No se usa si no hay subprogramas   !! Subprogramas (ya los veremos)   ! Final del programa   END [PROGRAM Nombre] ! END PROGRAM EjemploUno ; !END !! Es obligada

Page 31: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Estructura general de un programa 1.   PROGRAM AreaCirculo

2.   IMPLICIT NONE 3.   ! Cálculo del área de un círculo mediante la expresión:

4.   !S = PI*R^2

5.   ! Declaración de constantes 6.   REAL, PARAMETER :: PI=3.1415926535

7.   ! Declaración de variables

8.   REAL :: r,S

9.   ! Lectura de datos de entrada 10.   PRINT*, "Dime el radio del círculo"

11.   READ*, r

12.   ! Calcular área 13.   S = PI * r**2

14.   ! Mostrar área en pantalla

15.   PRINT*, "El área del círculo es ",S 16.   END PROGRAM AreaCirculo

Page 32: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Estructura general de un programa

Page 33: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Estructura general de un programa 1.   PROGRAM SistemaEcuaciones

2.   IMPLICIT NONE 3.   ! Cálculo de un sistema de 2 ecuaciones con 2 incógnitas:

4.   ! ax + by = c 5.   ! dx + ey = f

6.   ! Declaración de variables

7.   REAL::a,b,c,d,e,f 8.   REAL::x,y

9.   ! Entrada de datos

10.   PRINT*, "Introduce los coeficientes del sistema (a,b,c,d,e,f):" 11.   READ*, a,b,c,d,e,f

12.   ! Cálculos

13.   y = (d*c-a*f) / (d*b-a*e) 14.   x = (c-b*y) / a

15.   ! Salida de datos

16.   PRINT*, "La solucion es X=", x, " e Y=", y 17.   END

Page 34: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Estructura general de un programa

Page 35: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Preparar y Ejecutar Programas F-90

  Programas F-90 no tienen estructura rígida, pero exige cierto orden entre sentencias. Se escribe en un editor o procesador (modo texto) de textos. Editor propio de Fortran-90.

  Cada sentencia en una línea (hasta 132 caracteres), pero no es buen estilo (en pantalla normal solo 70-90). Se puede escribir más de una sentencia en la misma línea, separándolas con un punto y coma (;).

  Línea continuación. Se termina la línea con & (indica al compilador que la sentencia continúa en la línea siguiente). Una sentencia puede tener hasta 20 líneas. Recomendable empezar la línea siguiente también con &

  Estilo: Mantener criterios de sangrar párrafos, forma de escribir (palabras claves en may., variables inicial may, ...). Poner comentarios aclaratorios

El Programa, se guarda en un fichero (programa fuente .f90). Se compila programa objeto (.obj). Si errores, editar programa y corregir. Se linka (si errores, corregir) prog. ejecutable (.exe). Si resultados mal, corregir el diseño inicial del programa (algoritmo). Errores sintácticos se detectan bien (compilador). Los semánticos más difícil. Hacer la Prueba ayuda.

35

Page 36: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

  1.- Calcula e imprime B (trasparencia 20 ; pepe es de entrada)

  Análisis: Es necesario introducir el valor de pepe con un read. Se calcula B   Se imprime B y se termina   B= (3*Pepe+ 1/3– 5* 4/7*2**3**3.5 + 4 ) /(cos(pepe)+ 15– 4/3*7/5+1/ (3- 10/3)       Solución F-90   PROGRAM Calculo   !! Este programa calcula una expresión compleja e imprime el resultado.   Real:: PEPE, B !! Declaración de Variables   !! Introducción de Datos de entrada   Print*, ‘Introduce un valor real para la variable pepe’ ; Read*, pepe   !! ahora calculamos el valor de B, según la expresión   B = (3 * Pepe + 1/3 – 5 * 4/7 *2**3**3.5 + 4 ) /&   & (cos (pepe) + 15 – 4/3*7/5 + 1 / (3- 10/3)   !! Salida de resultados   Print*, ‘Dado el valor ‘, pepe, ‘ la expresión vale ‘, b   END Program Calculo

36

Page 37: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

  2.- Para fabricar un producto intervienen un diseñador y tres fabricantes. Diseñar un algoritmo que a partir del precio de venta, diga cuanto cobran cada de ellos, sabiendo que el diseñador cobra el doble que los otros.

  Análisis   Para encontrar la solución del problema dividiremos el total ganado al vender el

producto (VentaTot = UnidVend * Precio) en cinco partes. Dos partes serán para el diseñador (Slds) y cada una de las partes restantes para los fabricantes (Sldfabr).

  Solución En Fortran-90   Program Producto   Integer: UVend ; Real :: Precio, VentaTot, SlD, SldF   Print *, ' Introduce las unidades vendidas y el precio de la unidad del

producto'   Read*, UVend, Precio   VentaTot = UVend * Precio ; SldF = VentaTot /5 ; SlD = SldF*2   Print *, 'Lo que cobra cada participante es: '   Print*, ' Diseño: ', Int (slds), ' Fabrica: ', Int(sldfabr), ' cada uno'   End

37

Page 38: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Prueba: 120 unidades vendidas a 55 euros

38

Instrucc UVend Precio VentaTot SlD SlDF

Read 120 55

Vent 6600

Sldf 1320

Sld 2640

Salida 1320 2640

LA SALIDA ES CORRECTA

Page 39: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

39

3.- De un material interesa conocer sus datos (nombre, densidad, dureza, resistencia y duración media), que se introducen por el teclado. Se debe imprimir como salida, el nombre, la duración media del material y el valor, que se calcula como la suma de 2 veces la dureza con el producto de la duración media por la resistencia

Análisis El problema es muy sencillo y no requiere mayor análisis. Solo tener en cuenta que Valor = 2 * dureza + duracmed * resistencia . Escribiremos directamente el programa en Fortran-90

Solución en F-90 PROGRAM Materiales Type TipoClaseMat !! Estilo: Poner siempre TipoNombre character (10) :: nombre real :: densid, dureza, resist, duracm endtype Type (TipoClaseMat) :: material ; Real:: valor Read *, material !! ¿Como sería el Print * explicativo? !! Read*, material%nombre, material%densid, material%dureza, ……. Valor = 2*material%dureza + material%duracm * material%resist Print *, 'La duracion media del material', material%nombre, ' es ', & &material%duracm Print*, ‘ y su valor es : ‘, valor END

Page 40: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

  4.- PROBLEMA. Hallar los errores en el siguiente programa y arreglarlos

  Program Media   X1,X2,X3 reales ; real:: Med   Read *, X1 ; Read *, X2, X3   Med := x1+x2+x3/3   Print *, ’La media es , Med   End

  Solución   Los errores sintácticos que existen en este programa son :   X1,X2,X3:Reales; el tipo de dato reales no existe en F-90. Además la declaración está

mal hecha. La forma correcta sería Real:: X1,X2,X3.   En Med:=x1+x2+x3/3, hay un error sintáctico (sobra :) y uno semántico. Por el ambiente

se deduce que se calcula la media de tres números Med = (x1+x2+x3) / 3.   Falta cerrar las comillas en el print   Pueden declararse (y leer) todas las variables de una vez.   Se debe indicar que tipo de datos se introducen

40

Page 41: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

41

5.- Un banco recibe todos los días del Banco Mundial una lista de los cambios de monedas del mundo respecto del dólar. Diseñar un programa que a partir de la cantidad en moneda extranjera y el cambio actual dé la cantidad en euros. Suponer un % variable de ganancia del banco.

Análisis: Primero se cambia la moneda extranjera (DinExtj) a dólares y esta cantidad a euros (DinEsp), ya que solo se dispone de la tabla de cambios a dólares (CamDol). Una vez realizado este cambio tendremos que sumarle el porcentaje de ganancia del banco (PcenAct). Algoritmo Cambio V. Entrada DinExtj, CamDol, CamDolPts, PcenAct : real V. auxiliares : CMEDol: real ; V. Salida DinEsp: real 1. [Entrada de datos] Escribe(’Dime el cambio a dólares de la moneda (1 dólar = aaa.bbbb & &unidades de la moneda) : ’ ; Lee(CamDol) Escribe(’Cambio Euro-dólar (1 dólar= aaa.bbbb €): ’; Lee(CamDolEu) Escribe(’Dime cantidad a cambiar: ’) ; Lee(DinExtj) Escribe(’Introduce el % de ganancia: ’) ; Lee(PcenAct) 2. [Convertir moneda extranjera a dolares] CMEDol = DinExtj / CamDol 3. [Conversion de dolares a euros] DinEsp = CMEDol * CamDolPts 4. [Introducción de la ganancia del banco] DinEsp = DinEsp + (DinEsp * PcenAct) / 100 5. [Salida de datos] Escribe(’El cambio es : ’, DinEsp) 6. [Final] FIN.

Page 42: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

42

SOLUCIÓN EN FORTRAN-90. PROGRAM CAMBIO Real:: DinExtj, CamDol, CamDolEu, PcenAct, Cmedol, DinEsp ; Character (6) :: NomMon !! Entrada de datos Print*, ‘Dime la moneda extranjera’ ; Read*, NomMon Print*, ’Dime el cambio a dólares de la moneda (1 dólar = aaa.bbbb & & unidades de la moneda) : ’ ; Read*, CamDol Print*, ’Dime el cambio de euro a dólares (1 dólar = aaa.bbbb ptas.) : ’ Read*, CamDolEu Print*, ’Introduce la cantidad a cambiar: ’ ; Read*, DinExtj Print*, ’Introduce el porcentaje actual de ganancia: ’ ; Read*, PcenAct !! Conversion de la moneda extranjera a dolares y estos a euros CMEDol = DinExtj / CamDol ; DinEsp = CMEDol * CamDolEu !! Introducción de la ganancia del banco DinEsp = DinEsp - (DinEsp * PcenAct) / 100 !! Salida de datos Print*, ’El cambio de ’, DinExtj, NomMon, ‘ es en euros: ‘, DinEsp END

PASAMOS EL ALGORITMO A F-90

Page 43: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema4.Inicio... · Lenguaje sencillo pero potente para manejar matrices ... se pueden

Prueba para Cambiar 400 francos suizos (FraSui), si 1 dólar es 1’4 FraSiu y 0,82 euros. El banco gana 3%

43

Instrucc DinExtj CamDol CamDolEu PcenAct Cmedol DinEsp NomMon

Entrad Datos

400 1.4 0.82 0.03 FraSui

CMEDol 285.71

DinEsp 234.29

DinEsp% 227.26

SALIDA 227.26