Está en la página 1de 10

UNIVERSIDAD NACIONAL DEL CALLAO Versión: 01

FACULTAD DE CIENCIAS NATURALES Y MATEMÁTICA

LABORATORIO Nº 1
REPASO DE FORTRAN
01
Escuela: FISICA FISICA
Docente: Juvenal Tordocillo Puchuc COMPUTACIONAL 2

I. OBJETIVOS:

Al término del laboratorio los alumnos deberán estar en condiciones de:


• Recordar las sentencias y decisiones lógicas en el lenguaje de programación FORTRAN.
• Iteraciones en Programa en Fortran.
• Elaboración de Seudocódigos

II. FUNDAMENTO
Un programa es un conjunto de instrucciones, ejecutables sobre una computadora, que permite cumplir una
función específica.

Características de un algoritmo.
• preciso: el orden de realización de cada paso está especificado,
• definido: cada paso está especificado sin ambigüedad,
• finito: el resultado se obtiene en un número finito de pasos.
• entrada/salida: dispone de cero o más datos de entrada y devuelve uno o más resultados.

Un pseudocódigo es un lenguaje de especificación de algoritmos donde las instrucciones a seguir se


especifican de forma similar a como las describiríamos con nuestras palabras.

Explicitando la fórmula matemática tenemos finalmente un algoritmo apropiado:

Entrada: Leer el radio del círculo.


Paso 1: Tomar p = 3.141593.
Calcular área = p*radio*radio.
Paso 2: Imprimir el área.

Un programa en Fortran consiste en un programa principal (main, en inglés) y posiblemente varios


subprogramas. Por el momento asumiremos que el código consta sólo de un programa principal. La estructura
del programa principal es:

PROGRAM nombre
declaraciones de tipo
sentencias ejecutables
END PROGRAM nombre

FCNM-UNAC Page
-1-
Estructura de selección
IF (condición) THEN
sentencias para condición verdadera
ELSE
sentencias para condición falsa
ENDIF

Para el uso de operadores lógicos en FORTRAN, tenemos.

La sintaxis correspondiente en Fortran es.

IF (condición) THEN
sentencias para condición verdadera
ENDIF

Para múltiples decisiones.


IF (condición 1) THEN

sentencias para condición 1 verdadera

ELSEIF (condición 2) THEN

sentencias para condición 2 verdadera


...
ELSEIF (condición N) THEN

sentencias para condición N verdadera

ELSE

sentencias para todas las condiciones falsa

ENDIF

FCNM-UNAC Page
-2-
EJERCICIO 1:

Elaborar un programa en Fortran que permita introducir dos enteros, A y B, por teclado, y calcule y muestre
en pantalla su suma y su producto, con un texto explicativo. Además, el programa debe comparar los valores
A y B y debe informar por pantalla del mayor de ellos.

ALGORITMO

Ingresar: A, B

Paso 1: 𝐶 = 𝐴 + 𝐵
𝐷 =𝐴∗𝐵
𝑴𝒐𝒔𝒕𝒓𝒂𝒓: 𝑙𝑎 𝑠𝑢𝑚𝑎 𝑒𝑠: 𝐶
𝑴𝒐𝒔𝒕𝒓𝒂𝒓: 𝑝𝑟𝑜𝑑𝑢𝑐𝑡𝑜 𝑒𝑠: 𝐷
Paso 2: si 𝐴 > 𝐵, entonces
𝑴𝒐𝒔𝒕𝒓𝒂𝒓: A es mayor B
sino si (A<B)
𝑴𝒐𝒔𝒕𝒓𝒂𝒓: B es mayor A
Sino
𝑀𝑜𝑠𝑡𝑟𝑎𝑟: 𝐿𝑜𝑠 𝑛ú𝑚𝑒𝑟𝑜𝑠 𝑠𝑜𝑛 𝑖𝑔𝑢𝑎𝑙𝑒𝑠
Paso 3: FIN (paso 2)

EJERCICIO 2:

Escribir un programa en Fortran que, dados tres números introducidos por teclado, los represente en la
pantalla ordenados de mayor a menor.

ALGORITMO

Ingresar: menor, mediano, mayor

Paso 1: si menor> 𝑚𝑒𝑑𝑖𝑎𝑛𝑜, entonces


𝑎𝑢𝑥 = 𝑚𝑒𝑑𝑖𝑎𝑛𝑜
𝑚𝑒𝑑𝑖𝑎𝑛𝑜 = 𝑚𝑒𝑛𝑜𝑟
𝑚𝑒𝑛𝑜𝑟 = 𝑎𝑢𝑥
Paso 2: FIN (paso 1)

Paso 3: si mediano> 𝑚𝑎𝑦𝑜𝑟, entonces


𝑎𝑢𝑥 = 𝑚𝑎𝑦𝑜𝑟
𝑚𝑎𝑦𝑜𝑟 = 𝑚𝑒𝑑𝑖𝑎𝑛𝑜
𝑚𝑒𝑑𝑖𝑎𝑛𝑜 = 𝑎𝑢𝑥
Paso 4: FIN (paso 3)

Paso 5: si menor> 𝑚𝑒𝑑𝑖𝑎𝑛𝑜, entonces


𝑎𝑢𝑥 = 𝑚𝑒𝑑𝑖𝑎𝑛𝑜
𝑚𝑒𝑑𝑖𝑎𝑛𝑜 = 𝑚𝑒𝑛𝑜𝑟
𝑚𝑒𝑛𝑜𝑟 = 𝑎𝑢𝑥
Paso 6: FIN (paso 5)
Paso 7: Los números ordenados son: menor, mediana, mayor

FCNM-UNAC Page
-3-
Estructuras de repetición

En Fortran la estructura repetitiva se codifica como sigue.

DO índice = valor inicial, valor final, incremento


sentencias del bucle
ENDDO

En Fortan un bucle condicional se codifica como sigue.

DO WHILE (condición)
sentencias del bloque
ENDDO

donde condición es una expresión lógica.


Fortran, además del DO WHILE, dispone de una estructura más general para bucles condicionales,
cuya codificación es la siguiente:

DO
sentencias del bloque pre-condición
IF (condición) EXIT
sentencias del bloque post-condición
ENDDO
Ejemplo de un programa:
PROGRAM sumar
! ------------------------------------------------------------------
! Propósito: Primeros enteros positivos exceden a 10000.
! ------------------------------------------------------------------
! Declaración de tipos
! ------------------------------------------------------------------
IMPLICIT NONE
INTEGER :: n, suma ! número de términos a sumar
INTEGER :: limite = 10000 ! limite superior de la suma
! ------------------------------------------------------------------
! Bloque de procesamiento
! ------------------------------------------------------------------
suma = 0
n = 0
DO WHILE (suma <= limite)
n = n +1
suma = suma + n
ENDDO
! ------------------------------------------------------------------
! Salida de datos
! ------------------------------------------------------------------
PRINT*, ’n = ’, n
! ------------------------------------------------------------------
! Terminar
! ------------------------------------------------------------------
END PROGRAM sumar

FCNM-UNAC Page
-4-
EJERCICIO 3:

Elaborar un algoritmo e implementar para sumar una serie de valores, por ejemplo.

a) La suma de los primeros números naturales, utilizando DO y DO WHILE

b) La suma de los primeros cuadrados pares, utilizando DO

c) La suma de los cuadrados impares, utilizando DO WHILE

SELECT CASE
La estructura de decisión SELECT CASE se incluye en Fortran 90 para reemplazar el GOTO
calculado en el Fortran 77 para la selección de una de varias opciones posibles. Esta estructura
representa una alternativa para la escritura de decisiones aninadas.

NOMBRE: SELECT CASE (EXPRESIÓN)


CASE (VALOR1)
ACCIÓN 1
CASE (VALOR2)
ACCIÓN 2
...
CASE (VALORN)
ACCIÓN N
CASE DEFAULT
ACCIÓN
END SELECT NOMBRE

PROGRAM CASOS_1 !! 25-ABRIL


! ------------------------------------------------------------------
! MUESTRA EL NUMERO DE DIAS DE UN MES
! ------------------------------------------------------------------
! DECLARACION DE TIPOS
! ==================================================================
IMPLICIT NONE
INTEGER :: MES
PRINT*,'ELIJA UNA OPCION'
READ*,MES
SELECT CASE (MES)
CASE (1,3,5,7,8,10,12)
PRINT *, '31'
CASE (4,6,9,11)
PRINT *, '30'
CASE (2)
PRINT *, '28'
CASE DEFAULT
PRINT *, 'MES INCORRECTO'
END SELECT
! ------------------------------------------------------------------
! TERMINAR
! ------------------------------------------------------------------
STOP
END PROGRAM CASOS_1

FCNM-UNAC Page
-5-
LEER UN ARCHIVO EN FORTRAN
Las aplicaciones que manejan conjuntos de datos muy grandes, es conveniente que almacenen los
datos en algún archivo en disco o algún otro dispositivo de memoria auxiliar. Antes de que Fortran
pueda usar un archivo, debe abrirlo, asignándole una unidad. La sintaxis general para abrir un archivo es:

• Apertura de un archivo para lectura:

OPEN(UNIT=12,FILE=’datos’, STATUS=‘OLD’,ACTION=‘READ’,& IOSTAT=error_de_apertura)

• Apertura de un archivo para escritura:

OPEN(UNIT=9,FILE=‘resultado’, STATUS=‘NEW’,ACTION=‘WRITE ’,&IOSTAT=error_de_apertura)

Ejemplos:

OPEN(UNIT = INTEGER EXPR, FILE = FILENAME, STATUS = 'OLD')

OPEN(UNIT = INTEGER EXPR, FILE = FILENAME, STATUS = 'NEW')

OPEN(UNIT = INTEGER EXPR, FILE = FILENAME, STATUS ='UNKNOWN')

La asociación unidad-archivo que estableció OPEN se termina con la sentencia:


CLOSE (lista_close)

La sentencia READ estándar permite leer datos de cualquier dispositivo de entrada, como los archivos. La sintaxis
general de entrada por archivo es:

READ(UNIT, *) VARIABLE LIST

La sentencia WRITE permite escribir datos en cualquier dispositivo de salida, como los archivos. La sintaxis general de
salida por archivo es:

WRITE(UNIT, *) EXPRESSION LIST

READ (*, '(2I5, F10.2)') ... variables ...


READ (*, "(5F10.2)") ... variables ...

WRITE (*, '(A, I5)') ... variable y expresiones ...


WRITE (*, "(10F5.2)") ... variable y expresiones ...

Ejemplo de Formato

OPEN(20,FILE='EULER.TXT',STATUS='UNKNOWN',ACTION='WRITE')
READ(*,*)A,B
WRITE(20,10)X(1),Y(1)
10 FORMAT(1X,F10.4,5X,F10.4)

FCNM-UNAC Page
-6-
EJERCICIO 4:

Ejecutar el programa e indicar que es lo que realiza el programa.

PROGRAM PRINCIPAL !! 25-ABRIL


! ------------------------------------------------------------------
PARAMETER(TAMMAX=99)
REAL A(TANMAX=99)
10 READ(5,100,END=999)K
100 FORMAT(I5)
IF (K.LE.0.OR.K.GT.TAMMAX) STOP
READ*,(A(I),I=1,K)
PRINT*,(A(I),I=1,K)
PRINT*,’SUM=’,SUM(A,K)
GOTO 10
99 PRINT*,'PROGRAMA TERMINADO'
STOP
END

FUNCTION SUM(V,N)
REAL::V(N)
SUM=0-0
DO I=1,N
SUM=SUM+V(I)
END DO
RETURN
END

EJERCICIO 5:

Genere un archivo en block de notas y los datos debe contener dos columnas con 10 datos cada columna.
Su programa debe tener la capacidad de leer esos datos y luego sumar todos los datos de la columna y luego
su salida debe ser por archivo.

EJERCICIO 6:
Programar y completar el siguiente programa en FORTRAN 90 y si hay un mensaje de error Hacer la
corrección.

INTEGER A, B
REAL FUN
READ*, A, B
A = FUN(A, B)
B = FUN(B, A)
PRINT*, FUN(A, B)
END

REAL FUNCTION FUN(X, Y)


INTEGER X, Y
FUN = X ** 2 + 2 * Y
RETURN
END

FCNM-UNAC Page
-7-
EJERCICIO 7:

Programar y completar el siguiente programa en FORTRAN 90 y si hay un mensaje de error Hacer la


corrección.

INTEGER A,B,C
A = 1
B = 2
C = 3
10 PRINT*, A, B, C
CALL CHANGE(A,B)
GO TO 10
PRINT*, A, B, C
END

SUBROUTINE CHANGE(A,B)
INTEGER A,B,C
C = B
B = A + B
A = C
RETURN
END

EJERCICIO 8:
Programar y completar el siguiente programa en FORTRAN 90 y si hay un mensaje de error Hacer la
corrección.

REAL A, B, C
OPEN(20,FILE='EULER.TXT',STATUS='UNKNOWN',ACTION='WRITE')

READ*, A,B
CALL FIRST(A,B,C)
PRINT*, A,B,C
F=X*Y*Z
CALL SECOND(F,Y)
CLOSE
END

SUBROUTINE FIRST (X,Y,Z)


REAL X, Y, Z
X = X + Y
Y = Y – X
Z= X/Y
RETURN
END

SUBROUTINE FIRST (F,Y)


REAL F, Y
WRITE(*,20)F
30 FORMAT (4X,2F4.2)
RETURN
END

FCNM-UNAC Page
-8-
EJERCICIO 9:
Debe ejecutar el programa y si funciona correctamente, debe ud. leer desde archivo un conjunto de datos y
mostrar los resultados según indica la salida.

PROGRAM MAXIMO_MINIMOS
REAL, DIMENSION (10):: I
REAL :: MIN, MAX
PRINT*, 'INGRESO 10 NUMEROS ?'
READ*, (I(J),J=1,10)

MAX=I(1)
MIN=I(1)

DO J=2,10
IF (MAX.LT.I(J)) MAX=I(J) ! menor que
IF (MIN.GT.I(J)) MIN=I(J) ! mayor que
PRINT*,MAX
PRINT*,MIN
END DO

PRINT*, 'Maximo valor es = ',MAX


PRINT*, 'Minimo valor es = ',MIN
STOP

EJERCICIO 10:
Implementar el algoritmo, leer datos desde archivo y salida de resultados por archivo. Probar si lo
resultados de salida son correctos.

Ingresar: N
Apertura de un archivo txt con dos columnas
Paso 1: pro_A=0
pro_B=0
Paso 2: HACER: I=1,N
leer: A,B
prom_A=prom_A+A
prom_B=prom_B+B
mostrar: A,B
Paso 3: FIN (paso 2)

Paso 4: SI(N=/0) ENTONCES


prom_A=prom_A/N
prom_B=prom_B/N
Paso 5: FIN (paso 4)
Paso 6: GUARDAR: A,B en un archivo txt

FCNM-UNAC Page
-9-
EJERCICIO 11:
Implementar el algoritmo, leer datos desde archivo y salida de resultados por archivo. Probar si lo
resultados de salida son correctos.

Ingresar: N
Apertura de un archivo txt con en una columna
Paso 1: pro=0
desv=0
Paso 2: HACER: I=1,N
leer: X(I)
prom=prom+X(I)
Paso 3: FIN (paso 2)
prom=prom/N
Paso 4: HACER: I=1,N
desv= desv+(X(I)-pro)2
Paso 5: FIN (paso 4)
𝑑𝑒𝑠𝑣 = √𝑑𝑒𝑠/𝑁
Paso 6: GUARDAR: desv en un archivo txt

FORMATO DE PRESENTACIÓN DE INFORME

1. PROBLEMA O CASO
2. SEUDOCODIGO
3. PROGRAMA
4. RESULTADOS NUMÉRICOS SI FUERA EL CASO O EN FORMA GRÁFICA (cada gráfico debe ser comentada)
5. CONCLUSIONES

NOTA: LOS GRÁFICOS DEBEN TENER ORDEN ESTILO Y ELEGANCIA VISUAL

FCNM-UNAC Page
- 10 -

También podría gustarte