You are on page 1of 5

CLASE 13 DE JUNIO LENGUAJE DE PROGRAMACION

1!ELABORE UN PROGRAM QUE LEA DOS MATRICES A y B (3X3) A TRAVES DE UNA SUBRUTINA
!DE NOMBRE "MATRIZ" Y QUE A TRAVES DE OTRA SUBRUTINA DE NOMBRE "SUMA_MATRIZ" CALCULE
!LA SUMA DE LAS MATRICES A y B . FINALMENTE CALCULE EL PROMEDIO DE TODOS LOS ELEMENTOS
!DE LA MATRIZ C, UTILIZANDO UN SUBPROGRAMA FUNCTION DE NOMBRE "FTOTAL"

PROGRAM OPERACIONES
REAL,DIMENSION(3,3)::A,B,C
INTEGER::I,J
REAL::PROM
PRINT*,"INGRESE VALORES A A"
CALL MATRIZ(A) ! VARIABLE DE ENTRADA Y SALIDA
PRINT*,"INGRESE VALORES A B"
CALL MATRIZ(B) ! VARIABLE DE ENTRADA Y SALIDA
PRINT*,"OPERACION DE SUMA C=A+B"
CALL SUMA_MATRIZ(A,B,C) ! "A" ENTRADA "B" ENTRADA "C" SALIDA
PRINT*,"C ="
DO I=1,3
PRINT*,(C(I,J),J=1,3)
END DO
PROM=FTOTAL(C,3)/9.0 !3 ,ME SIRVE PARA FILAS Y COLUMNAS
PRINT*,"PROM DE C =",PROM
END PROGRAM OPERACIONES

SUBROUTINE MATRIZ(X)
REAL,DIMENSION(3,3),INTENT(INOUT)::X ! VARIABLE LOCAL
INTEGER::I,J ! ES DIFENRETE AL I,J DEL PROGRAMA PRINCIPAL YA QUE ES UN SUBPROGRAMA Y SON LOCALES A
DIFERNECIA DEL PRICNIPAL QUE SON GLOBALES
DO I=1,3
READ*,(X(I,J),J=1,3)
END DO
RETURN
END SUBROUTINE MATRIZ

SUBROUTINE SUMA_MATRIZ(A,B,C) !A ENTRADA B ENTRADA C SALIDA


REAL,DIMENSION(3,3),INTENT(IN)::A,B
REAL,DIMENSION(3,3),INTENT(OUT)::C
INTEGER::I,J
C=0
DO I=1,3
DO J=1,3
C(I,J)=A(I,J)+B(I,J)
END DO
END DO
RETURN
END SUBROUTINE SUMA_MATRIZ

FUNCTION FTOTAL(C,D)
INTEGER,INTENT(IN)::D ! 3 SE TRANSFIERE A D
REAL,DIMENSION(D,D)::C
REAL::FTOTAL
REAL::SUMA =0 !SUMA VARIABLE LOCAL
INTEGER::I,J
DO I=1,D
DO J=1,D
SUMA=SUMA + C(I,J)
END DO
END DO
FTOTAL=SUMA
RETURN
END FUNCTION FTOTAL

2USO DE CARACTERES

PROGRAM USO_CARACTERES
!LLAMADAS A LAS SUBRUTINAS
CALL CADENA ('X')
CALL CADENA ('COORDENADA')
CALL CADENA ('BUEN TIEMPO' (3:7))
CALL CADENA ('**')
END PROGRAM USO_CARACTERES

SUBROUTINE CADENA(LISTA)
CHARACTER(LEN = *),INTENT(IN)::LISTA
PRINT*,'EN LA CADENA <',LISTA,' >','HAY',LEN(LISTA),'CARACTER(ES)'
RETURN
END SUBROUTINE CADENA
!EN LA CADENA<X> HAY 1 CARACTER(ES)
!EN LA CADENA<COORDENADA> HAY 10 CARACTER(ES)
!EN LA CADENA<EN TI> HAY 5 CARACTER(ES)
!EN LA CADENA<**> HAY 2 CARACTER(ES)

!APLICACION DE UN PROCEDIMIENTO COMO ARGUMENTO A OTRO PROCEDIMIENTO


PROGRAM SUMAS
REAL,DIMENSION(3,3)::A,B,C
INTEGER::I,J
REAL::PROMEDIO
EXTERNAL MATRIZ,SUMA_MATRIZ
REAL,EXTERNAL::FTOTAL
PRINT*,"OPERACION SUMA A + B"
CALL SUMA_MATRIZ(MATRIZ,A,B,C)
PRINT*,"LA SUMA EN C="
DO I=1,3
PRINT*,(C(I,J),J=1,3)
END DO
!CALCULO DEL PROMEDIO DE C(I,J)
PROMEDIO=FTOTAL(C,3)/9.0
PRINT*,"PROMEDIO =",PROMEDIO
END PROGRAM SUMAS
!MODIFICANDO LA SUBRUTINA "SUMA_MATRIZ"
SUBROUTINE SUMA_MATRIZ(MATRIZ,A,B,C)
REAL,DIMENSION(3,3),INTENT(IN)::A,B
REAL,DIMENSION(3,3),INTENT(OUT)::C
INTEGER::I,J
PRINT*,"INGRESE DATOS DE LA MATRIZ A"
CALL MATRIZ(A)
PRINT*,"INGRESE DATOS A LA MARTIZ B"
CALL MATRIZ(B)
C=0
DO I=1,3
DO J=1,3
C(I,J)=A(I,J)+B(I,J)
END DO
END DO
RETURN
END SUBROUTINE SUMA_MATRIZ

SUBROUTINE MATRIZ(X)
REAL,DIMENSION(3,3),INTENT(INOUT)::X ! VARIABLE LOCAL
INTEGER::I,J ! ES DIFENRETE AL I,J DEL PROGRAMA PRINCIPAL YA QUE ES UN SUBPROGRAMA Y SON LOCALES A
DIFERNECIA DEL PRICNIPAL QUE SON GLOBALES
DO I=1,3
READ*,(X(I,J),J=1,3)
END DO
RETURN
END SUBROUTINE MATRIZ

FUNCTION FTOTAL(C,D)
INTEGER,INTENT(IN)::D ! 3 SE TRANSFIERE A D
REAL,DIMENSION(D,D)::C
REAL::FTOTAL
REAL::SUMA =0 !SUMA VARIABLE LOCAL
INTEGER::I,J
DO I=1,D
DO J=1,D
SUMA=SUMA + C(I,J)
END DO
END DO
FTOTAL=SUMA
RETURN
END FUNCTION FTOTAL
! SEA F(X)=COS(2.PI.X)
! G(X)=(X-1)´2
! X e [A , B] ; n= # de particiones o intervalos
!h=(b-a)/n ; h=incremento
PROGRAM EVALUA_FUNCION
INTEGER::N,OP !N=NUMERO DE INTERVALO
REAL::A,B ! OP=OPCION(1 ó 2)
REAL::T1,T2 !VARIABLES AUXILIARES
REAL::EVALUA !FUNCION
REAL,EXTERNAL::G1,G2 !FUNCIONES
PRINT*,"INGRESE VALORES DE A Y B"
READ*,A,B
PRINT*,"INGRESE NUMERO DE INTERVALOS"
READ*,N
PRINT*,"SELECCIONA UNA OPCION 1 o 2 "
READ*,OP
IF(OP==1)THEN
PRINT*,"RESULTADO"
T1=EVALUA(G1,A,B,N)
ELSE IF(OP==2)THEN
PRINT*,"RESULTADO"
T2=EVALUA(G2,A,B,N)
END IF
END PROGRAM EVALUA_FUNCION
!SUBPROGRAMA EVALUA
FUNCTION EVALUA(G,A,B,N)
INTEGER::I,N
REAL::EVALUA
REAL::A,B,H
REAL,EXTERNAL::G
H=(B-A)/N
DO I=1,N
EVALUA=G(A)
PRINT*,A,EVALUA
A=A+H
END DO
RETURN
END FUNCTION EVALUA

FUNCTION G1(X)
REAL::G1,X
REAL,PARAMETER::PI=3.14159
G1=COS(2*PI*X)
RETURN
END FUNCTION G1

FUNCTION G2(X)
REAL::G2,X
G2=(X-1.0)**2
RETURN
END FUNCTION G2

AHORA, UTILIZANDO FORMAT PARA QUE SALGA MAS ORDENADO Y SIN NOTACION CIENTIFICA
! SEA F(X)=COS(2.PI.X)
! G(X)=(X-1)´2
! X e [A , B] ; n= # de particiones o intervalos
!h=(b-a)/n ; h=incremento
PROGRAM EVALUA_FUNCION
INTEGER::N,OP !N=NUMERO DE INTERVALO
REAL::A,B ! OP=OPCION(1 ó 2)
REAL::T1,T2 !VARIABLES AUXILIARES
REAL::EVALUA !FUNCION
REAL,EXTERNAL::G1,G2 !FUNCIONES
PRINT*,"INGRESE VALORES DE A Y B"
READ*,A,B
PRINT*,"INGRESE NUMERO DE INTERVALOS"
READ*,N
PRINT*,"SELECCIONA UNA OPCION 1 o 2 "
READ*,OP
IF(OP==1)THEN
PRINT*,"RESULTADO"
T1=EVALUA(G1,A,B,N)
ELSE IF(OP==2)THEN
PRINT*,"RESULTADO"
T2=EVALUA(G2,A,B,N)
END IF
END PROGRAM EVALUA_FUNCION
!SUBPROGRAMA EVALUA
FUNCTION EVALUA(G,A,B,N)
INTEGER::I,N
REAL::EVALUA
REAL::A,B,H
REAL,EXTERNAL::G
H=(B-A)/N
PRINT*," X EVALUA"

DO I=1,N
EVALUA=G(A)
PRINT 100,A,EVALUA
A=A+H
END DO
100 FORMAT(1X,F8.2,1X,F12.4)
RETURN
END FUNCTION EVALUA

FUNCTION G1(X)
REAL::G1,X
REAL,PARAMETER::PI=3.14159
G1=COS(2*PI*X)
RETURN
END FUNCTION G1

FUNCTION G2(X)
REAL::G2,X
G2=(X-1.0)**2
RETURN
END FUNCTION G2

VARIANTE DE FUNCIONES
CONTAINS SE UTILIZA PARA INCLUIR FUNCIONES DENTRO DEL PROGRAMA PRINCIPAL
!APLICACION 3
!RESOLVER AX**2 + BX + C
!A=2,B=-6,C=4
PROGRAM ECUACION
REAL::A,B,C
REAL::D,R1,R2 !R1 Y R2 SON RAICES
A=PIDE_REAL("ESCRIBE EL COEFICIENTE DE X**2:")
B=PIDE_REAL("ESCRIBE EL COEFICIENTE DE X:")
C=PIDE_REAL("ESCRIBE EL TERMINO INDEPENDIENTE:")
D=B**2-4*A*C
R1=(-B+SQRT(D))/(2*A)
R2=(-B-SQRT(D))/(2*A)
!FORMATO AUTOCONTENIDO
PRINT '(1X,A,F5.2,A,F5.2)',"UNA SOLUCION ES ",R1,"Y LA OTRA ES",R2 ! 1X SALTA UN ESPACIO A LA
DERECHA..."A" ES PARA LA CADENA:"UNA SOLUCION ES"
!F5.2 ES PARA QUE SE OBTENGA UN VALOR NUMERICO REAL R1......EL SIGUIENTE "A" ES PARA LA OTRA CADENA..Y POR
ULTIMO F5.2 ES PARA EL ULTIMO VALOR NUMERICO R2
CONTAINS
FUNCTION PIDE_REAL(MENSAJE)
CHARACTER(LEN=*)::MENSAJE
REAL::PIDE_REAL
PRINT*,MENSAJE
READ*,PIDE_REAL
RETURN
END FUNCTION PIDE_REAL
END PROGRAM ECUACION

You might also like