Sunteți pe pagina 1din 57

1)

PROGRAM PROB_1

INTEGER::A,B

REAL::S,D

PRINT*,"INGRESE EL PRIMER NUMERO NATURAL"

READ*,A

PRINT*,"INGRESE EL SEGUNDO NUMERO NATURAL"

READ*,B

S=(ABS(A+B))**(1/2.)

D=(ABS(A-B))**(1/2.)

IF(INT(S)==S .AND. INT(D)==D) THEN

PRINT*,A," Y", B," SON CUADRONES PARES"

ELSE

PRINT*,A," Y", B," NO SON CUADRONES PARES"

END IF

END PROGRAM PROB_1

2)
PROGRAM DETERMINANTE
INTEGER,DIMENSION(3,3)::A
INTEGER::ADJO1,ADJO2,ADJO3
INTEGER,EXTERNAL::ADJTO
INTEGER::DET
PRINT*,"INGRESE LA MATRIZ A"
CALL MATRIZ(A)
ADJO1=ADJTO(A(2,2),A(2,3),A(3,2),A(3,3))
ADJO2=ADJTO(A(2,1),A(2,3),A(3,1),A(3,3))
ADJO3=ADJTO(A(2,1),A(2,2),A(3,1),A(3,2))
DET=A(1,1)*ADJO1-A(1,2)*ADJO2+A(1,3)*ADJO3
PRINT*,"LA DETERMINANTE ES"
PRINT '(5X,I10)',DET
END PROGRAM DETERMINANTE
SUBROUTINE MATRIZ(X)
INTEGER,DIMENSION(3,3)::X
INTEGER::I,J
DO I=1,3
READ*,(X(I,J),J=1,3)
END DO
RETURN
END SUBROUTINE MATRIZ
INTEGER FUNCTION ADJTO(A,B,C,D)
INTEGER, INTENT(IN)::A,B,C,D
ADJTO=A*D-B*C
RETURN
END FUNCTION ADJTO

3)
PROGRAM DETERMINANTE
INTEGER,DIMENSION(3,3)::A
INTEGER::ADJO1,ADJO2,ADJO3
INTEGER::DET
PRINT*,"INGRESE LA MATRIZ A"
CALL MATRIZ(A)
CALL ADJTO(A(2,2),A(2,3),A(3,2),A(3,3),ADJO1)
CALL ADJTO(A(2,1),A(2,3),A(3,1),A(3,3),ADJO2)
CALL ADJTO(A(2,1),A(2,2),A(3,1),A(3,2),ADJO3)
DET=A(1,1)*ADJO1-A(1,2)*ADJO2+A(1,3)*ADJO3
PRINT*,"LA DETERMINANTE ES"
PRINT '(5X,I10)',DET
END PROGRAM DETERMINANTE
SUBROUTINE MATRIZ(X)
INTEGER,DIMENSION(3,3)::X
INTEGER::I,J
DO I=1,3
READ*,(X(I,J),J=1,3)
END DO
RETURN
END SUBROUTINE MATRIZ
SUBROUTINE ADJTO(A,B,C,D,ADJUNTA)
INTEGER,INTENT(OUT)::ADJUNTA
INTEGER,INTENT(IN)::A,B,C,D
ADJUNTA=A*D-B*C
RETURN
END SUBROUTINE ADJTO
4)
PROGRAM PROB_4

REAL,DIMENSION(4,4)::A

REAL::T

PRINT*,"INGRESE DATOS A LA MATRIZ A"

CALL MATRIZ(A)

T=TRAZA(A)

PRINT*,"LA TRAZA DE LA MATRIZ ES"

PRINT 100,T

100 FORMAT(F10.2)

PRINT*,"LA SUMA DE LOS ELEMENTOS POR ENCIMA Y POR DEBAJO DE LA DIAGONAL PRINCIPAL ES"

CALL SUMA(A)

END PROGRAM PROB_4

SUBROUTINE MATRIZ(X)

REAL,DIMENSION(4,4)::X

INTEGER::I,J

DO I=1,4

READ*,(X(I,J),J=1,4)

END DO

RETURN

END SUBROUTINE MATRIZ

FUNCTION TRAZA(C)

REAL,DIMENSION(4,4)::C

REAL::TRAZA

INTEGER::I,J

TRAZA=0

DO I=1,4
DO J=1,4

IF(I==J)THEN

TRAZA=TRAZA + C(I,J)

END IF

END DO

END DO

RETURN

END FUNCTION TRAZA

SUBROUTINE SUMA(X)

REAL,DIMENSION(4,4),INTENT(IN)::X

REAL::SUM

INTEGER::I,J

SUM=0

DO I=1,4

DO J=1,4

IF(I/=J)THEN

SUM = SUM + X(I,J)

END IF

END DO

END DO

PRINT 50,SUM

50 FORMAT(F10.2)

RETURN

END SUBROUTINE SUMA

5)

PROGRAM PROB_5

REAL,DIMENSION(7)::A=(/5,10,15,20,25,30,35/)
INTEGER::I

PRINT*,"VALORES DEL VECTOR "

DO I=1,7

PRINT*,A(I)

END DO

CALL POSICION(A)

END PROGRAM PROB_5

SUBROUTINE POSICION(X)

REAL,DIMENSION(7)::X

REAL::B

INTEGER::I

PRINT*,"UNA POSICION A LA DERECHA DEL VECTOR"

DO I=1,7

B=X(I)

X(I)=X(7)

X(7)=B

END DO

DO I=1,7

PRINT*,X(I)

END DO

END SUBROUTINE POSICION

6)
PROGRAM PROB_6

REAL,DIMENSION(7)::A=(/5,10,15,20,25,30,35/)

INTEGER::I

PRINT*,"VALORES DEL VECTOR "

DO I=1,7

PRINT*,A(I)
END DO

CALL POSICION(A)

END PROGRAM PROB_6

SUBROUTINE POSICION(X)

REAL,DIMENSION(7)::X

REAL::B

INTEGER::I

PRINT*,"UNA POSICION A LA IZQUIERDA DEL VECTOR"

DO I=1,6

B=X(I)

X(I)=X(1+I)

X(1+I)=B

END DO

DO I=1,7

PRINT*,X(I)

END DO

END SUBROUTINE POSICION

7)
PROGRAM MULTIPLICACION
REAL,DIMENSION(5,3)::A
REAL,DIMENSION(3,5)::B
REAL,DIMENSION(5,5)::C
INTEGER::I,J
PRINT*,"INGRESE LA MATRIZ A"
CALL MATRIZ_1(A)
PRINT*,"INGRESE LA MATRIZ B"
CALL MATRIZ_2(B)
PRINT*,"LA MULTIPLICACION ES"
CALL MULTI(A,B,C)
DO I=1,5
PRINT*,(C(I,J),J=1,5)
END DO
END PROGRAM MULTIPLICACION
SUBROUTINE MATRIZ_1(X)
REAL,DIMENSION(5,3)::X
INTEGER::I,J
DO I=1,5
READ*,(X(I,J),J=1,3)
END DO
RETURN
END SUBROUTINE MATRIZ_1

SUBROUTINE MATRIZ_2(Y)
REAL,DIMENSION(3,5)::Y
INTEGER::I,J
DO I=1,3
READ*,(Y(I,J),J=1,5)
END DO
RETURN
END SUBROUTINE MATRIZ_2

SUBROUTINE MULTI(A,B,C)
REAL,DIMENSION(5,3),INTENT(IN)::A
REAL,DIMENSION(3,5),INTENT(IN)::B
REAL,DIMENSION(5,5),INTENT(INOUT)::C
C=MATMUL(A,B)
RETURN
END SUBROUTINE MULTI
8)
PROGRAM EXPONENCIAL
IMPLICIT NONE
REAL,EXTERNAL::EXPO
REAL::X,E
PRINT*,"INGRESE EL VALOR DE X EN LA FUNCION e^x"
READ*,X
PRINT*,"EL RESULTADO ES :"
E=EXPO(X)
END PROGRAM EXPONENCIAL

FUNCTION EXPO(X)
REAL::X,E
INTEGER::FACT,N
E=1.0
FACT=1
N=1
DO
FACT=FACT*N
E=E+(X**N/FACT)
N=N+1
IF(N>20)EXIT
END DO
PRINT*,"----------------------"
PRINT '(1X,F10.6)',E
END FUNCTION EXPO

9)
PROGRAM MATRIZ_TRANSPUESTA
REAL,DIMENSION(:,:),ALLOCATABLE::A,AT
INTEGER::F,C
PRINT*,"INGRESE EL NUMERO DE FILAS Y COLUMNAS"
READ*,F,C
ALLOCATE(A(F,C),AT(C,F))
PRINT*,"INGRESE LOS VALORES DE LA MATRIZ A"
CALL MATRIZ(A,F,C)
PRINT*,"LA MATRIZ TRANSPUESTA ES "
CALL TRANS(A,AT,F,C)
END PROGRAM MATRIZ_TRANSPUESTA

SUBROUTINE MATRIZ(X,M,N)
REAL,DIMENSION(M,N)::X
INTEGER::I,J
DO I=1,M
READ*,(X(I,J),J=1,N)
END DO
RETURN
END SUBROUTINE MATRIZ

SUBROUTINE TRANS(A,AT,M,N)
REAL,DIMENSION(M,N),INTENT(IN)::A
REAL,DIMENSION(N,M),INTENT(OUT)::AT
INTEGER::I,J
DO I=1,N
DO J=1,M
AT(I,J)=A(J,I)
END DO
END DO
DO I=1,N
PRINT*,(AT(I,J),J=1,M)
END DO
RETURN
END SUBROUTINE TRANS

10)
PROGRAM SUMA_DIAGONAL
REAL,DIMENSION(:,:),ALLOCATABLE::A
REAL::SD
REAL,EXTERNAL::DIAGO
INTEGER::F,C
PRINT*,"INGRESE EL NUMERO DE FILAS Y COLUMNAS"
READ*,F,C
ALLOCATE(A(F,C))
PRINT*,"INGRESE LA MATRIZ A"
CALL MATRIZ(A,F,C)
PRINT*,"SUMA DIAGONAL PRINCIPAL"
SD=DIAGO(A,F,C)
PRINT*,SD
END PROGRAM SUMA_DIAGONAL

SUBROUTINE MATRIZ(X,M,N)
REAL,DIMENSION(M,N)::X
INTEGER::I,J
DO I=1,M
READ*,(X(I,J),J=1,N)
END DO
END SUBROUTINE MATRIZ

FUNCTION DIAGO(X,M,N)
REAL,DIMENSION(M,N)::X
REAL::DIAGO
INTEGER::I,J
DIAGO=0.0
DO I=1,M
DO J=1,N
IF(I==J) THEN
DIAGO=DIAGO+X(I,J)
END IF
END DO
END DO
END FUNCTION DIAGO

11)
PROGRAM PROB_11

CHARACTER(LEN=12),DIMENSION(100)::NOMBRE
REAL,DIMENSION(100)::EDAD

INTEGER::I,J

!A,B SON VARIABLES TEMPORALES

REAL::A

CHARACTER(LEN=12)::B

CALL NOMB_EDAD(NOMBRE,EDAD)

DO I=1,10

DO J=1,10

IF(EDAD(I)>EDAD(J))THEN

EDAD(J)=EDAD(I)

NOMBRE(J)=NOMBRE(I)

A=EDAD(J)

B=NOMBRE(J)

END IF

END DO

END DO

PRINT*,"EL ALUMNO DE MAYOR EDAD ES ",B," CON LA EDAD ",A

END PROGRAM PROB_11

SUBROUTINE NOMB_EDAD(X,Y)

CHARACTER(LEN=12),DIMENSION(10)::X

REAL,DIMENSION(100)::Y

INTEGER::I

PRINT*,"INGRESE NOMBRES Y EDADES DE LOS DIEZ ALUMNOS"

DO I=1,10

READ*,X(I),Y(I)

END DO

RETURN

END SUBROUTINE NOMB_EDAD


12)
PROGRAM ORDENAR_VECTOR
IMPLICIT NONE
REAL,DIMENSION(:),ALLOCATABLE::VECTOR
INTEGER::N,I
PRINT*,"INGRESE EL TAMAO DEL VECTOR"
READ*,N
ALLOCATE(VECTOR(N))
PRINT*,"INGRESE EL VECTOR"
READ*,(VECTOR(I),I=1,N)
CALL ORDEN(N,VECTOR)
PRINT*,"EL VECTOR ORDENADO DE MENOR A MAYOR ES"
DO I=1,N
PRINT '(F6.2)',VECTOR(I)
END DO
END PROGRAM ORDENAR_VECTOR

SUBROUTINE ORDEN(NELEM,ARREG)
!ORDENACION POR BURBUJA ("buble sort") de un arreglo
!unidimensional, de menor a mayor.
!NELEM = Nmero de elementos del arreglo
!ARREG = Arreglo unidimensional a ordenar
IMPLICIT NONE
INTEGER::NELEM
REAL, DIMENSION(NELEM)::ARREG
INTEGER::I,J
REAL:: AUX
IF (NELEM<2)RETURN
DO I=1,NELEM-1
DO J=1,NELEM-I
IF (ARREG(J) > ARREG(J+1)) THEN
AUX = ARREG(J)
ARREG(J) = ARREG(J+1)
ARREG(J+1) = AUX
END IF
END DO
END DO
RETURN
END SUBROUTINE ORDEN
13)
PROGRAM ORDENAR_VECTOR
IMPLICIT NONE
REAL,DIMENSION(:),ALLOCATABLE::VECTOR
INTEGER::N,I
PRINT*,"INGRESE EL TAMAO DEL VECTOR"
READ*,N
ALLOCATE(VECTOR(N))
PRINT*,"INGRESE EL VECTOR"
READ*,(VECTOR(I),I=1,N)
CALL ORDEN(N,VECTOR)
PRINT*,"EL VECTOR ORDENADO DE MENOR A MAYOR ES"
DO I=1,N
PRINT '(F6.2)',VECTOR(I)
END DO
END PROGRAM ORDENAR_VECTOR

SUBROUTINE ORDEN(NELEM,ARREG)
!ORDENACION POR BURBUJA ("buble sort") MEJORADO
!de un arreglo unidimensional, de menor a mayor.
!NELEM = Nmero de elementos del arreglo
!ARREG = Arreglo unidimensional a ordenar
IMPLICIT NONE
INTEGER:: NELEM
REAL,DIMENSION(NELEM):: ARREG
LOGICAL::CLAVE
INTEGER::I,J
REAL:: AUX
IF (NELEM < 2) RETURN
I=1
CLAVE=.TRUE.
DO WHILE(CLAVE)
CLAVE=.FALSE.
DO J=1,NELEM-I
IF (ARREG(J) >ARREG(J+1)) THEN
AUX = ARREG(J)
ARREG(J) = ARREG(J+1)
ARREG(J+1) = AUX
CLAVE = .TRUE.
ENDIF
ENDDO
I = I+1
END DO
RETURN
END SUBROUTINE ORDEN
14)
PROGRAM ORDENAR_VECTOR
IMPLICIT NONE
REAL,DIMENSION(:),ALLOCATABLE::VECTOR
INTEGER::N,I
PRINT*,"INGRESE EL TAMAO DEL VECTOR"
READ*,N
ALLOCATE(VECTOR(N))
PRINT*,"INGRESE EL VECTOR"
READ*,(VECTOR(I),I=1,N)
CALL ORDEN(N,VECTOR)
PRINT*,"EL VECTOR ORDENADO DE MENOR A MAYOR ES"
DO I=1,N
PRINT '(F6.2)',VECTOR(I)
END DO
END PROGRAM ORDENAR_VECTOR

SUBROUTINE ORDEN (NELEM,ARREG)


!ORDENACION POR SELECCION de un arreglo unidimensional,
!de menor a mayor.
!NELEM = Nmero de elementos del arreglo
!ARREG = Arreglo unidimensional a ordenar
IMPLICIT NONE
INTEGER:: NELEM
REAL,DIMENSION(NELEM)::ARREG
INTEGER ::I,J,INDICE
REAL::AUX
IF(NELEM<2)RETURN
DO J=NELEM,2,-1
INDICE=1
DO I=2,J
IF(ARREG(I)>ARREG(INDICE))INDICE=I
END DO
IF(INDICE/=J) THEN
AUX = ARREG(INDICE)
ARREG(INDICE) = ARREG(J)
ARREG(J) = AUX
END IF
END DO
RETURN
END SUBROUTINE ORDEN
15)
PROGRAM ORDENAR_VECTOR
IMPLICIT NONE
REAL,DIMENSION(:),ALLOCATABLE::VECTOR
INTEGER::N,I
PRINT*,"INGRESE EL TAMAO DEL VECTOR"
READ*,N
ALLOCATE(VECTOR(N))
PRINT*,"INGRESE EL VECTOR"
READ*,(VECTOR(I),I=1,N)
CALL ORDEN(N,VECTOR)
PRINT*,"EL VECTOR ORDENADO DE MENOR A MAYOR ES"
DO I=1,N
PRINT '(F6.2)',VECTOR(I)
END DO
END PROGRAM ORDENAR_VECTOR

SUBROUTINE ORDEN(NELEM,ARREG)
!ORDENACION POR INSERSION de un arreglo unidimensional,
!de menor a mayor.
!NELEM = Nmero de elementos del arreglo
!ARREG = Arreglo unidimensional a ordenar
IMPLICIT NONE
INTEGER ::NELEM
REAL,DIMENSION(NELEM):: ARREG
LOGICAL::CLAVE
INTEGER::I,K,POS
REAL:: AUX
IF (NELEM<2) RETURN
DO I=2,NELEM
K=I
AUX=ARREG(K)
CLAVE=.FALSE.
DO WHILE((K>1).AND.(.NOT.CLAVE))
IF(ARREG(K-1)>AUX)THEN
ARREG(K)=ARREG(K-1)
K=K-1
ELSE
CLAVE=.TRUE.
END IF
END DO
POS=K
ARREG(POS)=AUX
ENDDO
RETURN
END SUBROUTINE ORDEN

16)
PROGRAM PROBLEMA_16
IMPLICIT NONE
REAL::PAGO,HORAS
INTEGER::ANOS
PRINT*,"INGRESE HORAS TRABAJADAS"
READ*,HORAS
PRINT*,"INGRESE PAGO POR HORAS"
READ*,PAGO
PRINT*,"INGRESE EL NUMERO DE AOS TRABAJADOS"
READ*,ANOS
CALL SALARIO(HORAS,PAGO,ANOS)
END PROGRAM PROBLEMA_16

SUBROUTINE SALARIO(X,Y,N)
REAL,INTENT(IN)::X,Y
INTEGER::BONI
REAL::SALAR
REAL::NAVI
REAL,EXTERNAL::BONIFICACION
IF(X>40)THEN
SALAR=(X-40)*(1.5*Y) + 40*Y
ELSE
SALAR=X*Y
END IF
BONI=BONIFICACION(N)
PRINT '(1X,A19,11X,I6)',"LA BONIFICACION ES ",BONI
PRINT '(1X,A29,F10.1)',"EL SALARIO DEL TRABAJADOR ES ",SALAR
NAVI=SALAR+BONI
PRINT '(1X,A26,3X,F10.1)',"EL SALARIO POR NAVIDAD ES ",NAVI
RETURN
END SUBROUTINE SALARIO

FUNCTION BONIFICACION(N)
INTEGER::N
REAL::BONIFICACION
IF(N>=10)THEN
BONIFICACION=100
ELSE IF(N>=5)THEN
BONIFICACION=50
ELSE
BONIFICACION=25
END IF
RETURN
END FUNCTION BONIFICACION

17)
PROGRAM PROBLEMA_17
USE SALARIO_NAVIDAD
IMPLICIT NONE
REAL::PAGO,HORAS
INTEGER::ANOS
PRINT*,"INGRESE HORAS TRABAJADAS"
READ*,HORAS
PRINT*,"INGRESE PAGO POR HORAS"
READ*,PAGO
PRINT*,"INGRESE EL NUMERO DE AOS TRABAJADOS"
READ*,ANOS
CALL SALARIO(HORAS,PAGO,ANOS)
END PROGRAM PROBLEMA_17
MODULO
MODULE SALARIO_NAVIDAD
CONTAINS
SUBROUTINE SALARIO(X,Y,N)
REAL,INTENT(IN)::X,Y
INTEGER::BONI
REAL::SALAR
REAL::NAVI
IF(X>40)THEN
SALAR=(X-40)*(1.5*Y) + 40*Y
ELSE
SALAR=X*Y
END IF
BONI=BONIFICACION(N)
PRINT '(1X,A19,11X,I6)',"LA BONIFICACION ES ",BONI
PRINT '(1X,A29,F10.1)',"EL SALARIO DEL TRABAJADOR ES ",SALAR
NAVI=SALAR+BONI
PRINT '(1X,A26,3X,F10.1)',"EL SALARIO POR NAVIDAD ES ",NAVI
RETURN
END SUBROUTINE SALARIO

FUNCTION BONIFICACION(N)
INTEGER::N
REAL::BONIFICACION
IF(N>=10)THEN
BONIFICACION=100
ELSE IF(N>=5)THEN
BONIFICACION=50
ELSE
BONIFICACION=25
END IF
RETURN
END FUNCTION BONIFICACION
END MODULE SALARIO_NAVIDAD

18)

PROGRAM PROB_18
INTEGER::N
REAL::C_SIN_DES
REAL::C_FINAL
WRITE(*,*)"INGRESE NUMERO DE TELEVISORES QUE DESEA COMPRAR"
READ*,N
CALL ENC_COSTO(N,C_SIN_DES,C_FINAL)
END PROGRAM PROB_18

SUBROUTINE ENC_COSTO(X,C_SIN,C_FIN)
INTEGER,INTENT(IN)::X
REAL,INTENT(OUT)::C_SIN
REAL,INTENT(OUT)::C_FIN
IF (X>0)THEN
IF(X==5500)THEN
C_SIN=5500*250
C_FIN=1000*250 + 4000*250*0.9 + 500*250*0.8
ELSE
IF(5000<X)THEN
C_SIN=X*250
C_FIN=5000*250 + (X-5000)*250*0.3
ELSE
IF(1000<X)THEN
C_SIN=X*250
C_FIN=1000*250 + (X-1000)*250*0.9
ELSE
IF(X<1001)THEN
C_SIN=X*250
C_FIN=X*250
END IF
END IF
END IF
END IF
ELSE
END IF

PRINT*,"EL NUMERO DE TELEVISOREES PEDIDOS =",X


PRINT*,"EL COSTO SIN DESCUENTOS ES =",C_SIN
PRINT*,"EL COSTO FINAL ES =",C_FIN
PRINT*,"EL DINERO QUE USTED HA AHORRADO ES=",ENC_DESCUENTO(C_SIN,C_FIN)
END SUBROUTINE ENC_COSTO

FUNCTION ENC_DESCUENTO(D,F)
REAL,INTENT(IN)::D
REAL,INTENT(IN)::F
ENC_DESCUENTO=D-F
END FUNCTION ENC_DESCUENTO
21)
PROGRAM TABLA
REAL,DIMENSION(100)::V
INTEGER::I
REAL::T
T=TABU(V)
END PROGRAM TABLA

FUNCTION TABU(V)
INTEGER::TABU
REAL,DIMENSION(100)::V
DO I=1,20
TABU=V(I)**2-5*V(I)+2
PRINT*,TABU," ",V(I)
END DO
RETURN
END FUNCTION TABU
22)
PROGRAM PROMEDIO
REAL::A,B,C
PRINT*,"INGRESE LOS TRES NUMEROS"
READ*,A,B,C
CALL COMPA(A,B,C)
CALL PROM(A,B,C)
END PROGRAM PROMEDIO

SUBROUTINE COMPA(A,B,C)
REAL::A,B,C,M
IF(A>B) THEN
IF(A>C) THEN
M=A
ELSE
M=C
END IF
ELSE
IF(B>C) THEN
M=B
ELSE
M=C
END IF
END IF
PRINT*,"EL MAYOR ES = ",M
RETURN
END SUBROUTINE COMPA

SUBROUTINE PROM(A,B,C)
REAL::A,B,C,P
P=(A+B+C)/3
PRINT*,"EL PROMEDIO ES =",P
RETURN
END SUBROUTINE PROM
23)
PROGRAM FUCTION_PROMEDIO
REAL::A,B,C,PRO
PRINT*,"INGRESE LOS TRES NUMEROS"
READ*,A,B,C
PRO=PROM(A,B,C)
END PROGRAM FUCTION_PROMEDIO

FUNCTION PROM(A,B,C)
REAL::A,B,C
REAL::PROM
PROM=(A+B+C)/3
PRINT*,"EL PROMEDIO ES ",PROM
RETURN
END FUNCTION PROM

24)
PROGRAM FACTORIAL
INTEGER::N
PRINT*,"INGRESE EL NUMERO"
READ*,N
CALL FACTOR(N)
END PROGRAM FACTORIAL

SUBROUTINE FACTOR(N)
INTEGER::I,FACT,N
FACT=1
DO I=1,N
FACT=I*FACT
END DO
IF(100<FACT.AND.FACT<1000) THEN
PRINT*,FACT
END IF
RETURN
END SUBROUTINE FACTOR

26)
PROGRAM MAYOR_DOS
REAL::A,B,C
PRINT*,"INGRESAR LOS VALORES"
READ*,A,B
C=COMP(A,B)
END PROGRAM MAYOR_DOS

FUNCTION COMP(A,B)
REAL::A,B,M
IF(A>B) THEN
M=A
ELSE
M=B
END IF
PRINT*,M
RETURN
END FUNCTION COMP

29)

program coordenadas
implicit none
real::x,y !variables de salida x, y
real::r,q !radio y angulo
write(*,*)"ingrese radio y angulo "
read*,r,q
call camcoord(r,q,x,y)
write(*,*)"el cambio a coordenadas cartesianas es:"
write(*,*)"x=",x
write(*,*)"y=",y
end program coordenadas
subroutine camcoord(t,s,j,k)
implicit none
real,intent(in)::t
real,intent(in)::s
real,intent(out)::j
real,intent(out)::k
j=t*cos(s)
k=t*sin(s)
end subroutine camcoord

30)

PROGRAM PROB_30

INTEGER::PAGO,HORAS

REAL::SA

PRINT*,"INGRESE HORAS TRABAJADAS"

READ*,HORAS

PRINT*,"INGRESE PAGO POR HORAS"

READ*,PAGO

SA=SALARIO(HORAS,PAGO)

PRINT '(A30,F10.1)',"EL SALARIO DEL TRABAJADOR ES ",SA

END PROGRAM

FUNCTION SALARIO(X,Y)

INTEGER::X,Y

REAL::SALARIO

IF(X>40)THEN

SALARIO=(X-40)*(1.5*Y) + 40*Y
ELSE

SALARIO=X*Y

END IF

RETURN

END FUNCTION SALARIO

31)
PROGRAM VALOR_ABSOLUTO
REAL::N,ABSO
PRINT*,"INGRESE EL UN NUMERO REAL"
READ*,N
ABSO=ABSOLUTO(N)
PRINT 52,ABSO
52 FORMAT(F8.2)
END PROGRAM VALOR_ABSOLUTO

FUNCTION ABSOLUTO(X)
REAL::X
REAL::ABSOLUTO
ABSOLUTO=ABS(X)
END FUNCTION ABSOLUTO
32)
PROGRAM PROB_32

REAL::DNDO,DSOR

PRINT*,"INGRESE LOS NUMEROS A DIVIDIR"

READ*,DNDO,DSOR

IF(DNDO<DSOR)THEN

STOP "INGRESE NUEVAMENTE"

END IF

CALL DIV_RES(DNDO,DSOR)

END PROGRAM PROB_32

SUBROUTINE DIV_RES(X,Y)
REAL::X,Y,S

REAL::DIV,RES

S=Y

DIV=0

DO WHILE(S<=X)

S=S+Y

DIV=DIV+1

END DO

RES=X-(S-Y)

PRINT*,"LA DIVISION ENTERA ES ",DIV

PRINT*,"EL RESTO DE LA MISMA ES ",RES

RETURN

END SUBROUTINE DIV_RES

35)
PROGRAM FACTORIAL_POTENCIA
INTEGER::N,FACT,POTE,OP
REAL::E
INTEGER,EXTERNAL::FACTOR,POTEN
PRINT*,"INGRESE 1 SI DESEA CALCULAR EL FACTORIAL DEL NUMERO"
PRINT*,"INGRESE 2 SI DESEA CALCULAR LA POTENCIA DEL NUMERO"
READ*,OP
IF(OP==1)THEN
PRINT*,"INGRESE EL NUMERO ENTERO"
READ*,N
PRINT*,"EL FACTORIAL DEL NUMERO ES"
FACT=FACTOR(N)
PRINT 10,FACT
10 FORMAT(4X,I10)
ELSE IF(OP==2) THEN
PRINT*,"INGRESE EL NUMERO ENTERO"
READ*,N
PRINT*,"INGRESE EL EXPONENTE"
READ*,E
POTE=POTEN(N,E)
PRINT*,"LA POTENCIA DEL NUMERO ES"
PRINT 20,POTE
20 FORMAT(4X,I8)
END IF
END PROGRAM FACTORIAL_POTENCIA

FUNCTION FACTOR(X)
INTEGER::I,X,FACTOR
FACTOR=1.0
DO I=1,X
FACTOR=FACTOR*I
END DO
RETURN
END FUNCTION FACTOR

FUNCTION POTEN(X,Y)
INTEGER::X,POTEN
REAL::Y
POTEN=X**Y
RETURN
END FUNCTION POTEN

36 )ESTA RE MAL SI PUEDES CORRIGELO


PROGRAM ULTIMO_DIGITO
IMPLICIT NONE
INTEGER::N,DIG
INTEGER,EXTERNAL::ULT_DIG
PRINT*,"INGRESE UN NUMERO ENTERO"
READ*,N
DIG=ULT_DIG(N)
PRINT*,DIG
END PROGRAM ULTIMO_DIGITO

FUNCTION ULT_DIG(X)
INTEGER::X,ULT_DIG,E
REAL::DIG,AUX
AUX=X
DO WHILE(AUX>10)
AUX=AUX/10.
END DO
DIG=10.*(AUX-INT(AUX))
E=INT(AUX)
ULT_DIG=INT(DIG)
PRINT*,ULT_DIG,AUX,DIG,E
RETURN
END FUNCTION ULT_DIG
38)
PROGRAM CONTAR_DIGITOS
IMPLICIT NONE
INTEGER::NUMERO,CIFRAS
INTEGER,EXTERNAL::NUM_CIF
PRINT*,"INGRESE UN NUMERO ENTERO"
READ*,NUMERO
CIFRAS=NUM_CIF(NUMERO)
PRINT*,"EL NUMERO DE CIFRAS DEL NUMERO ES",CIFRAS
END PROGRAM

FUNCTION NUM_CIF(X)
INTEGER::AUX,CIF,X,NUM_CIF
AUX=X
CIF=0
DO WHILE(AUX>0)
AUX=INT(AUX/10)
CIF=CIF+1
END DO
NUM_CIF=CIF
END FUNCTION NUM_CIF
44)
PROGRAM FACTORIAL_NUMERO
INTEGER::N,FACTI
INTEGER,EXTERNAL::FACTORIAL
PRINT*,"INGRESE UN NUMERO ENTERO"
READ*,N
IF(N==0)THEN
FACTI=1
ELSE IF(N<0)THEN
PRINT*,"NO EXISTE LOS FACTORIALES DE NUMEROS POSITIVOS"
END IF
FACTI=FACTORIAL(N)
PRINT*,"EL FACTORIAL DEL NUMERO ES"
PRINT*,FACTI
END PROGRAM FACTORIAL_NUMERO

FUNCTION FACTORIAL(X)
INTEGER::X,FACT,I,FACTORIAL
FACT=1
DO I=1,X
FACT=FACT*I
END DO
FACTORIAL=FACT
RETURN
END FUNCTION FACTORIAL

45)
PROGRAM PROBLEMA_45
IMPLICIT NONE
INTEGER::X,Y,MAYOR
WRITE(*,*)"INGRESE DOS NUMEROS"
READ*,X,Y
WRITE(*,*)"EL NUMERO MAYOR INGRESADO ES =",MAYOR(X,Y)
END PROGRAM PROBLEMA_45

INTEGER FUNCTION MAYOR(A,B)


INTEGER,INTENT(IN)::A,B
IF (A>B) THEN
MAYOR=A
ELSE IF (A<B) THEN
MAYOR=B
END IF
END FUNCTION MAYOR

46)
!Construir una funcin que reciba como parmetros dos nmeros enteros y retorne
! 1 si el primer nmero es mltiplo del segundo y 0 si no.

PROGRAM PROBLEMA_46
INTEGER,EXTERNAL::RETORNA
INTEGER::X,Y,W
PRINT*,"INGRESE PRIMER NUMERO"
READ*,X
PRINT*,"INGRESE SEGUNDO NUMERO"
READ*,Y
W=RETORNA(X,Y)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL PRIMER NUMERO ES MULTIPLO DEL SEGUNDO"
END IF
IF (W==0)THEN
PRINT*,"EL PRIMER NUMERO NO ES MULTIPLO DEL SEGUNDO"
END IF
END PROGRAM PROBLEMA_46
INTEGER FUNCTION RETORNA(A,B)
INTEGER,INTENT(IN)::A,B
INTEGER::Z
IF(MOD(A,B)==0)THEN
Z=1
ELSE
Z=0
END IF
RETORNA=Z
RETURN
END FUNCTION RETORNA

47)
Construir una funcin que reciba como parmetro un entero y retorne 1 si corresponde al cdigo ASCII
de una
!letra minscula (Los cdigos ASCII de las letras minsculas van desde 97 que el cdigo de la letra a
hasta 122
! que es el cdigo de la letra z). Deber retornar 0 si no es as.

PROGRAM PROBLEMA_47
INTEGER,EXTERNAL::ASCI
INTEGER::X,W
PRINT*,"INGRESE NUMERO ENTERO"
READ*,X
W=ASCI(X)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL NUMERO ENTERO CORRESPONDE AL CODIGO ASCII DE UNA LETRA MINUSCULA"
END IF
IF (W==0)THEN
PRINT*,"EL NUMER ENTERO NO CORRESPONDE AL CODIGO ASCII DE UNA LETRA MINUSCULA"
END IF
END PROGRAM PROBLEMA_47

INTEGER FUNCTION ASCI(Y)


INTEGER,INTENT(IN)::Y
INTEGER::Z
SELECT CASE(Y)
CASE(97:122)
Z=1
CASE DEFAULT
Z=0
END SELECT
ASCI=Z
RETURN
END FUNCTION ASCI
48)
PROGRAM PROBLEMA_48
INTEGER,EXTERNAL::ASCI
INTEGER::X,W
PRINT*,"INGRESE NUMERO ENTERO"
READ*,X
W=ASCI(X)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL NUMERO ENTERO CORRESPONDE AL CODIGO ASCII DE UN DIGITO"
END IF
IF (W==0)THEN
PRINT*,"EL NUMER ENTERO NO CORRESPONDE AL CODIGO ASCII DE UN DIGITO"
END IF
END PROGRAM PROBLEMA_48

INTEGER FUNCTION ASCI(Y)


INTEGER,INTENT(IN)::Y
INTEGER::Z
SELECT CASE(Y)
CASE(48:57)
Z=1
CASE DEFAULT
Z=0
END SELECT
ASCI=Z
RETURN
END FUNCTION ASCI

49)
!Construir una funcin que reciba como parmetro un valor entero y
!retornar 1 si dicho valor es el factorial de alguno de los dgitos del nmero. Deber retornar 0 si no es
as.
!NOTA : Como el factorial del mayor digito 9 es 362 880 entonces solo se analizara hasta las centenas de
millares
PROGRAM PROBLEMA_49
INTEGER,EXTERNAL::RETORNA
INTEGER::X,W
PRINT*,"INGRESE NUMERO ENTERO"
READ*,X !2175
W=RETORNA(X)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL NUMERO INGRESADO ES FACTORIAL DE UNO DE LOS DIGITOS"
END IF
IF (W==0)THEN
PRINT*,"EL NUMERO INGRESADO NO ES FACTORIAL DE UNO DE LOS DIGITOS"
END IF
END PROGRAM PROBLEMA_49

INTEGER FUNCTION RETORNA(Y)


INTEGER,INTENT(IN)::Y !375175 por ejm
INTEGER::Z,UNI,DEC,CEN,UNI_M,DEC_M,CEN_M,Y_U,Y_D,Y_C,Y_UM,Y_DM,Y_CM
UNI=MOD(Y,10) !5 !UNIDADES
Y_U=Y/10 !217
DEC=MOD(Y_U,10) !7 !DECENAS
Y_D=Y_U/10
CEN=MOD(Y_D,10) !1 !CENTENAS
Y_C=Y_D/10
UNI_M=MOD(Y_C,10) !5 !UNIDAD DE MILLAR
Y_UM=Y_C/10 !217
DEC_M=MOD(Y_UM,10) !7 !DECENA DE MILLAR
Y_DM=Y_UM/10
CEN_M=MOD(Y_DM,10) !3 !CENTENA DE MILLAR
Y_CM=Y_DM/10
SELECT CASE (UNI)
CASE(1:9)
FACT_U=1
DO I=1,UNI
FACT_U=FACT_U*I
END DO
CASE DEFAULT
FACT_U=1
END SELECT
SELECT CASE (DEC)
CASE(1:9)
FACT_D=1
DO I=1,DEC
FACT_D=FACT_D*I
END DO
CASE DEFAULT
FACT_D=1
END SELECT
SELECT CASE (CEN)
CASE(1:9)
FACT_C=1
DO I=1,CEN
FACT_C=FACT_C*I
END DO
CASE DEFAULT
FACT_C=1
END SELECT
SELECT CASE (UNI_M)
CASE(1:9)
FACT_UM=1
DO I=1,UNI_M
FACT_UM=FACT_UM*I
END DO
CASE DEFAULT
FACT_UM=1
END SELECT
SELECT CASE (DEC_M)
CASE(1:9)
FACT_DM=1
DO I=1,DEC_M
FACT_DM=FACT_DM*I
END DO
CASE DEFAULT
FACT_DM=1
END SELECT
SELECT CASE (CEN_M)
CASE(1:9)
FACT_CM=1
DO I=1,CEN_M
FACT_CM=FACT_CM*I
END DO
END SELECT
IF (Y==FACT_C .OR. Y==FACT_D .OR.Y==FACT_U .OR. Y==FACT_CM .OR. Y==FACT_DM .OR.
Y==FACT_UM)THEN
Z=1
ELSE
Z=0
END IF
RETORNA=Z
RETURN
END FUNCTION RETORNA

50)
PROGRAM PROBLEMA_50
IMPLICIT NONE
INTEGER::X,K,DIGITOS
PRINT*,"AL FINAL APARECERA 1 SI EL NUMERO TIENE COMO MINIMO 3 DIGITOS"
PRINT*,"O CASO CONTRARIO APARECERA 0"
WRITE(*,*)"INGRESE UN NUMERO"
READ*,X
K=DIGITOS(X)
IF(K>0)THEN
PRINT*,"1"
ELSE
PRINT*,"0"
END IF
END PROGRAM PROBLEMA_50

INTEGER FUNCTION DIGITOS(A)


INTEGER,INTENT(IN)::A
INTEGER::W
IF (A>0) THEN
W=A-99
ELSE
W=-A-99
END IF
DIGITOS=W
RETURN
END FUNCTION DIGITOS

51)
!Construir una funcin que reciba como parmetro un entero y retorne 1 si en dicho valor todos los
dgitos son iguales.
!Deber retornar 0 si no es as.
!NOTA : EL MAXIMO VALOR QUE PUEDE TOMAR ES 999999999 . ES POR ESO QUE SE ANALIZO UN
NUMERO DEL INTERVALO 0 AL 999999999
PROGRAM PROBLEMA_51
INTEGER,EXTERNAL::RETORNA
INTEGER::X,W
PRINT*,"INGRESE NUMERO ENTERO"
READ*,X
W=RETORNA(X)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL NUMERO INGRESADO TIENE TODOS LOS DIGITOS IGUALES"
END IF
IF (W==0)THEN
PRINT*,"EL NUMERO INGRESADO NO TIENE TODOS LOS DIGITOS IGUALES"
END IF
END PROGRAM PROBLEMA_51
INTEGER FUNCTION RETORNA(Y)
INTEGER,INTENT(IN)::Y
INTEGER::Z,UNI,DEC,CEN,UNI_M,DEC_M,CEN_M,UNI_MM,DEC_MM,CEN_MM,Y_U,Y_D,Y_C,Y_UM,Y_D
M,Y_CM,Y_UMM,Y_DMM,Y_CMM
UNI=MOD(Y,10)
Y_U=Y/10
DEC=MOD(Y_U,10)
Y_D=Y_U/10
CEN=MOD(Y_D,10)
Y_C=Y_D/10
UNI_M=MOD(Y_C,10)
Y_UM=Y_C/10
DEC_M=MOD(Y_UM,10)
Y_DM=Y_UM/10
CEN_M=MOD(Y_DM,10)
Y_CM=Y_DM/10
UNI_MM=MOD(Y_CM,10)
Y_UMM=Y_CM/10
DEC_MM=MOD(Y_UMM,10)
Y_DMM=Y_UMM/10
CEN_MM=MOD(Y_DMM,10)
Y_CMM=Y_DMM/10
SELECT CASE(Y)
CASE(100000000:999999999)
IF (UNI==DEC .AND. DEC==CEN .AND. CEN==UNI_M .AND. UNI_M==DEC_M .AND. DEC_M==CEN_M
.AND. CEN_M==UNI_MM .AND. UNI_MM==DEC_MM .AND. DEC_MM==CEN_MM)THEN
Z=1
ELSE
Z=0
END IF
CASE(10000000:99999999)
IF (UNI==DEC .AND. DEC==CEN .AND. CEN==UNI_M .AND. UNI_M==DEC_M .AND. DEC_M==CEN_M
.AND. CEN_M==UNI_MM .AND. UNI_MM==DEC_MM)THEN
Z=1
ELSE
Z=0
END IF
CASE(1000000:9999999)
IF (UNI==DEC .AND. DEC==CEN .AND. CEN==UNI_M .AND. UNI_M==DEC_M .AND. DEC_M==CEN_M
.AND. CEN_M==UNI_MM)THEN
Z=1
ELSE
Z=0
END IF
CASE(100000:999999)
IF (UNI==DEC .AND. DEC==CEN .AND. CEN==UNI_M .AND. UNI_M==DEC_M .AND.
DEC_M==CEN_M)THEN
Z=1
ELSE
Z=0
END IF
CASE(10000:99999)
IF (UNI==DEC .AND. DEC==CEN .AND. CEN==UNI_M .AND. UNI_M==DEC_M)THEN
Z=1
ELSE
Z=0
END IF
CASE(1000:9999)
IF (UNI==DEC .AND. DEC==CEN .AND. CEN==UNI_M)THEN
Z=1
ELSE
Z=0
END IF
CASE(100:999)
IF (UNI==DEC .AND. DEC==CEN)THEN
Z=1
ELSE
Z=0
END IF
CASE(10:99)
IF (UNI==DEC)THEN
Z=1
ELSE
Z=0
END IF
END SELECT
RETORNA=Z
RETURN
END FUNCTION RETORNA

52)
!Construir una funcin que reciba como parmetro un entero y retorne 1 si en dicho valor
!el primer dgito es igual al ltimo. Deber retornar 0 si no es as.
PROGRAM PROBLEMA_52
INTEGER,EXTERNAL::RETORNA
INTEGER::X,W
PRINT*,"INGRESE NUMERO ENTERO"
READ*,X
W=RETORNA(X)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL PRIMER Y ULTIMO DIGITO DEL NUMERO ENTERO SON IGUALES"
END IF
IF (W==0)THEN
PRINT*,"EL PRIMER Y ULTIMO DIGITO DEL NUMERO ENTERO NO SON IGUALES"
END IF
END PROGRAM PROBLEMA_52
INTEGER FUNCTION RETORNA(Y)
INTEGER,INTENT(IN)::Y
INTEGER::Z,UNI,DEC,CEN,UNI_M,DEC_M,CEN_M,UNI_MM,DEC_MM,CEN_MM,Y_U,Y_D,Y_C,Y_UM,Y_D
M,Y_CM,Y_UMM,Y_DMM,Y_CMM
UNI=MOD(Y,10)
Y_U=Y/10
DEC=MOD(Y_U,10)
Y_D=Y_U/10
CEN=MOD(Y_D,10)
Y_C=Y_D/10
UNI_M=MOD(Y_C,10)
Y_UM=Y_C/10
DEC_M=MOD(Y_UM,10)
Y_DM=Y_UM/10
CEN_M=MOD(Y_DM,10)
Y_CM=Y_DM/10
UNI_MM=MOD(Y_CM,10)
Y_UMM=Y_CM/10
DEC_MM=MOD(Y_UMM,10)
Y_DMM=Y_UMM/10
CEN_MM=MOD(Y_DMM,10)
Y_CMM=Y_DMM/10
SELECT CASE(Y)
CASE(100000000:999999999)
IF (UNI==CEN_MM)THEN
Z=1
ELSE
Z=0
END IF
CASE(10000000:99999999)
IF (UNI==DEC_MM)THEN
Z=1
ELSE
Z=0
END IF
CASE(1000000:9999999)
IF (UNI==UNI_MM)THEN
Z=1
ELSE
Z=0
END IF
CASE(100000:999999)
IF (UNI==CEN_M)THEN
Z=1
ELSE
Z=0
END IF
CASE(10000:99999)
IF (UNI==DEC_M)THEN
Z=1
ELSE
Z=0
END IF
CASE(1000:9999)
IF (UNI==UNI_M)THEN
Z=1
ELSE
Z=0
END IF
CASE(100:999)
IF (UNI==CEN)THEN
Z=1
ELSE
Z=0
END IF
CASE(10:99)
IF (UNI==DEC)THEN
Z=1
ELSE
Z=0
END IF
END SELECT
RETORNA=Z
RETURN
END FUNCTION RETORNA

53)
PROGRAM PROBLEMA_53
INTEGER,EXTERNAL::RETORNA
INTEGER::X,W
PRINT*,"INGRESE NUMERO ENTERO"
READ*,X
W=RETORNA(X)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"EL NUMERO ES MULTIPLO DE CINCO"
END IF
IF (W==0)THEN
PRINT*,"EL NUMERO NO ES MULTIPLO DE CINCO"
END IF
END PROGRAM PROBLEMA_53

INTEGER FUNCTION RETORNA(A)


INTEGER,INTENT(IN)::A
INTEGER::Z
IF(MOD(A,5)==0)THEN
Z=1
ELSE
Z=0
END IF
RETORNA=Z
RETURN
END FUNCTION RETORNA

54)
! Construir una funcin que reciba como parmetro dos enteros y retorne 1 si la diferencia entre los
!dos valores es un nmero primo. Deber retornar 0 si no es as.
PROGRAM PROBLEMA_54
INTEGER,EXTERNAL::RETORNAPRIMO
INTEGER::X,Y,W
PRINT*,"INGRESE PRIMER NUMERO ENTERO"
READ*,X
PRINT*,"INGRESE SEGUNDO NUMERO ENTERO"
READ*,Y
W=RETORNAPRIMO(X,Y)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"LA DIFERENCIA DE LOS NUMEROS ES UN NUMERO PRIMO"
END IF
IF (W==0)THEN
PRINT*,"LA DIFERENCIA DE LOS NUMEROS NO ES UN NUMERO PRIMO"
END IF
END PROGRAM PROBLEMA_54
INTEGER FUNCTION RETORNAPRIMO(A,B)
INTEGER,INTENT(IN)::A,B
INTEGER::N,C,I,Z
N=A-B
C=0
DO I=1,N
IF(MOD(N,I)==0)THEN
C=C+1
END IF
END DO
IF(C /= 2)THEN
Z=0
ELSE
Z=1
END IF
RETORNAPRIMO=Z
RETURN
END FUNCTION RETORNAPRIMO

! Construir una funcin que reciba como parmetro dos enteros de


! dos dgitos cada uno y retorne 1 si son inversos. Ejemplo: 83 es inverso de 38. Deber retornar 0 si no
es as.

55)
PROGRAM PROBLEMA_55
INTEGER,EXTERNAL::RETORNAINVERSO
INTEGER::X,Y,W
PRINT*,"INGRESE PRIMER NUMERO ENTERO"
READ*,X
PRINT*,"INGRESE SEGUNDO NUMERO ENTERO"
READ*,Y
W=RETORNAINVERSO(X,Y)
PRINT*,"RETORNA ",W , " POR LO TANTO"
IF(W==1)THEN
PRINT*,"LOS NUMEROS SON INVERSOS"
END IF
IF (W==0)THEN
PRINT*,"LOS NUMEROS NO SON INVERSOS"
END IF
END PROGRAM PROBLEMA_55

INTEGER FUNCTION RETORNAINVERSO(A,B)


INTEGER,INTENT(IN)::A,B !83 Y 38
INTEGER::UNI_A,UNI_B,A_U,B_U,Z
UNI_A=MOD(A,10) !3
A_U=A/10 !8
UNI_B=MOD(B,10) !8
B_U=B/10 !3
IF(UNI_A==B_U .AND. UNI_B==A_U)THEN
Z=1
ELSE
Z=0
END IF
RETORNAINVERSO=Z
RETURN
END FUNCTION RETORNAINVERSO

56)
! Construir una funcin que reciba como parmetro un entero y un dgito menor o igual a 5 y retorne el
dgito del nmero que
! se encuentre en la posicin especificada por el dgito que lleg como parmetro.
PROGRAM PROBLEMA_56
INTEGER,EXTERNAL::RETORNA
INTEGER::A,B,W
PRINT*,"INGRESE NUMERO ENTERO DE MAXIMO 5 DIGITOS"
READ*,A
PRINT*,"INGRESE DIGITO MENOR O IGUAL A 5"
READ*,B
W=RETORNA(A,B)
IF(A<=99999)THEN
PRINT*,"EL DIGITO QUE OCUPA LA POSICION",B, " ES ",W
ELSE
PRINT*,"NUMERO INGRESADO FUERA DEL RANGO"
END IF
END PROGRAM PROBLEMA_56

INTEGER FUNCTION RETORNA(Y,C)


INTEGER,INTENT(IN)::Y,C !83 Y 38
INTEGER::UNI,DEC,CEN,UNI_M,DEC_M,Y_U,Y_D,Y_C,Y_UM,Y_DM
UNI=MOD(Y,10) !5 !UNIDADES
Y_U=Y/10 !217
DEC=MOD(Y_U,10) !7 !DECENAS
Y_D=Y_U/10
CEN=MOD(Y_D,10) !1 !CENTENAS
Y_C=Y_D/10
UNI_M=MOD(Y_C,10) !5 !UNIDAD DE MILLAR
Y_UM=Y_C/10 !217
DEC_M=MOD(Y_UM,10) !7 !DECENA DE MILLAR
Y_DM=Y_UM/10
SELECT CASE(Y)
CASE(0:9)
DEV=UNI
CASE(10:99)
IF(C==1)THEN
DEV=UNI
ELSE
DEV=DEC
END IF
CASE(100:999)
IF(C==3)THEN
DEV=CEN
ELSE
IF(C==2)THEN
DEV=DEC
ELSE
DEV=UNI
END IF
END IF
CASE(1000:9999)
IF(C==4)THEN
DEV=UNI_M
ELSE
IF(C==3)THEN
DEV=CEN
ELSE
IF(C==2)THEN
DEV=DEC
ELSE
DEV=UNI
END IF
END IF
END IF
CASE(10000:99999)
IF(C==5)THEN
DEV=DEC_M
ELSE
IF(C==4)THEN
DEV=UNI_M
ELSE
IF(C==3)THEN
DEV=CEN
IF(C==2)THEN
DEV=DEC
ELSE
DEV=UNI
END IF
END IF
END IF
END IF
END SELECT
RETORNA=DEV
RETURN
END FUNCTION RETORNA

57)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras y retorne el
mayor de los datos del vector.
PROGRAM PROBLEMA_57
INTEGER,EXTERNAL::PMAX
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
PRINT*,"EL MAYOR VALOR DEL VECTOR ES",PMAX(VECTOR1)
END PROGRAM PROBLEMA_57

INTEGER FUNCTION PMAX(VECTOR2)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER::I,MAYOR
MAYOR=VECTOR2(1)
DO I=1,10
IF(VECTOR2(I)>=MAYOR)THEN
MAYOR=VECTOR2(I)
END IF
END DO
PMAX=MAYOR
RETURN
END FUNCTION PMAX

58)
!Construir una funcin que reciba como parmetro un vector de 10
! posiciones enteras y retorne la posicin
!en la cual se encuentra el mayor de los datos del vector.

PROGRAM PROBLEMA_58
INTEGER,EXTERNAL::PMAX
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
PRINT*,"LA POSICION DEL MAYOR VALOR DEL VECTOR ES",PMAX(VECTOR1)
END PROGRAM PROBLEMA_58

INTEGER FUNCTION PMAX(VECTOR2)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER::I,POSICION,MAYOR
MAYOR=VECTOR2(1)
DO I=1,10
IF(VECTOR2(I)>=MAYOR)THEN
MAYOR=VECTOR2(I)
POSICION=I
END IF
END DO
PMAX=POSICION
RETURN
END FUNCTION PMAX

59)

!Construir una funcin que reciba como parmetro un vector de 10 posiciones


!enteras y retorne la cantidad de nmeros primos almacenados en el vector.
PROGRAM PROBLEMA_59
INTEGER,EXTERNAL::VECTORPRIMO
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,CANT
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
CANT=VECTORPRIMO(VECTOR1)
PRINT*,"LA CANTIDAD DE NUMEROS PRIMOS EN EL VECTOR ES",CANT
END PROGRAM PROBLEMA_59

INTEGER FUNCTION VECTORPRIMO(VECTOR2)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER::I,J,C,N
N=0
DO I=1,10
C=0
DO J=1,VECTOR2(I) !1,3
IF(MOD(VECTOR2(I),J)==0)THEN
C=C+1
END IF
END DO
IF(C == 2)THEN
N=N+1
END IF
END DO
VECTORPRIMO=N
RETURN
END FUNCTION VECTORPRIMO

60)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones
!enteras y retorne la cantidad de nmeros que pertenecen a los 30 primeros elementos de la serie de
Fibonacci..
! 0,1,1,2,3,5,8,13,21,34...Fcil, no? (0+1=1 / 1+1=2 / 1+2=3 / 2+3=5 / 3+5=8 / 5+8=13 / 8+13=21 /
13+21=34...)
!As sucesivamente, hasta el infinito. Por regla, la sucesin de Fibonacci se escribe as: x(n) = x(n-1) + x(n-
2)
PROGRAM PROBLEMA_60
INTEGER,EXTERNAL::VECTORFIBO
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,CANT
DO I=1,10
PRINT*,"INGRESE ELEMENTO ",I
READ*,VECTOR1(I)
END DO
CANT=VECTORFIBO(VECTOR1)
PRINT*,"LA CANTIDAD DE NUMEROS QUE COINCIDEN CON ALGUNO DE LOS 30 PRIMEROS NUMEROS
FIBONACCI ES:",CANT
END PROGRAM PROBLEMA_60

INTEGER FUNCTION VECTORFIBO(VECTOR2)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER,DIMENSION(30)::FIBO
INTEGER::I,J,C
FIBO=0
FIBO(1)=0
FIBO(2)=1
DO I=3,30
FIBO(I)=FIBO(I-1)+FIBO(I-2)
END DO
N=0
DO I=1,10
IF(VECTOR2(I) == 1)THEN
N=N+1
END IF
END DO
C=0
DO I=1,10
DO J=1,30
IF( VECTOR2(I)==FIBO(J))THEN
C=C+1
END IF
END DO
END DO
X=C-N
VECTORFIBO=X
RETURN
END FUNCTION VECTORFIBO
61)
!Construir una funcin que reciba como parmetro un
!vector de 10 posiciones enteras y retorne la posicin del mayor nmero primo almacenado en el
vector.
PROGRAM PROBLEMA_61
INTEGER,EXTERNAL::VECTORPRIMO
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,CANT
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
CANT=VECTORPRIMO(VECTOR1)
IF(CANT>=1)THEN
PRINT*,"EL MAYOR VALOR PRIMO ES",CANT
ELSE
PRINT*,"NO HAY NUMEROS PRIMOS EN EL VECTOR"
END IF
END PROGRAM PROBLEMA_61

INTEGER FUNCTION VECTORPRIMO(VECTOR2)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER::I,J,C,PRIMOMAYOR
PRIMOMAYOR=0
C=0
DO I=1,10
DO J=1,VECTOR2(I) !1,3
IF(MOD(VECTOR2(I),J)==0)THEN
C=C+1
END IF
END DO
IF(C==2)THEN
IF(VECTOR2(I)>PRIMOMAYOR)THEN
PRIMOMAYOR=VECTOR2(I)
END IF
END IF
C=0
END DO
VECTORPRIMO=PRIMOMAYOR
RETURN
END FUNCTION VECTORPRIMO

62)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras y retorne el
promedio entero del vector.
PROGRAM PROBLEMA_62
INTEGER,EXTERNAL::PROM_ENT !MEDIA ES EL NOMBRE DE LA FUNCION
INTEGER,DIMENSION(10)::VECTOR
INTEGER::I
DO I=1,10
PRINT*,"INGRESE VALOR: ", I
READ*,VECTOR(I)
END DO
PRINT*,"EL PROMEDIO ENTERO ES = ",PROM_ENT(VECTOR)
END PROGRAM PROBLEMA_62

INTEGER FUNCTION PROM_ENT(A)


INTEGER,DIMENSION(10),INTENT(IN)::A
INTEGER::SUMA !SUMA VARIABLE LOCAL
INTEGER::I
SUMA=0
DO I=1,10
SUMA=SUMA + A(I)
END DO
PROM_ENT=SUMA/10
RETURN
END FUNCTION PROM_ENT

63)

!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras y retorne el
promedio real del vector.
PROGRAM PROBLEMA_63
REAL,EXTERNAL::PROM_REAL !MEDIA ES EL NOMBRE DE LA FUNCION
REAL,DIMENSION(10)::VECTOR
INTEGER::I
DO I=1,10
PRINT*,"INGRESE VALOR: ", I
READ*,VECTOR(I)
END DO
PRINT*,"EL PROMEDIO REAL ES = ",PROM_REAL(VECTOR)
END PROGRAM PROBLEMA_63

REAL FUNCTION PROM_REAL(A)


REAL,DIMENSION(10),INTENT(IN)::A
REAL::SUMA !SUMA VARIABLE LOCAL
INTEGER::I
SUMA=0.0
DO I=1,10
SUMA=SUMA + A(I)
END DO
PROM_REAL=SUMA/10
RETURN
END FUNCTION PROM_REAL

64)
!64.- Construir una funcin que reciba como parmetros un vector de 10 posiciones enteras
! y un valor entero y retorne 1 si dicho valor entero se encuentra en el vector.
! Deber retornar 0 si no es as.
PROGRAM PROBLEMA_64
INTEGER,EXTERNAL::ENCUENTRA
INTEGER,DIMENSION(10)::VECTOR
INTEGER::I,X,W
PRINT*,"VECTOR"
DO I=1,10
PRINT*,"INGRESE ELEMENTO", I
READ*,VECTOR(I)
END DO
PRINT*,"INGRESE VALOR ENTERO"
READ*,X
W=ENCUENTRA(VECTOR,X)
PRINT*,"RETORNA",W, " POR LO TANTO "
IF(W==1)THEN
PRINT*,"EL VALOR INGRESADO SE ENCUENTRA EN EL VECTOR"
END IF
IF(W==0)THEN
PRINT*,"EL VALOR INGRESADO NO SE ENCUENTRA EN EL VECTOR"
END IF
END PROGRAM PROBLEMA_64

INTEGER FUNCTION ENCUENTRA(VECTOR2,Y)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER,INTENT(IN)::Y
INTEGER::I,Z
C=0
DO I=1,10
IF(VECTOR2(I)==Y)THEN
C=C+1
END IF
END DO

IF(C>=1)THEN
Z=1
ELSE
Z=0
END IF
ENCUENTRA=Z
RETURN
END FUNCTION ENCUENTRA

65)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones
!enteras y retorne la posicin del nmero entero que tenga mayor cantidad de dgitos.

PROGRAM PROBLEMA_65
INTEGER,EXTERNAL::MAYDIG
INTEGER,DIMENSION(10)::VECTOR
INTEGER::I
PRINT*,"VECTOR"
DO I=1,10
PRINT*,"INGRESE ELEMENTO", I
READ*,VECTOR(I)
END DO
PRINT*,"LA POSICION DEL ENTERO QUE TIENE LA MAYOR CANTIDAD DE DIGITOS ES",MAYDIG(VECTOR)
END PROGRAM PROBLEMA_65
INTEGER FUNCTION MAYDIG(VECTOR2)
INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER::POSICION,I,MAYOR
MAYOR=VECTOR2(1)
DO I=1,10
IF(VECTOR2(I)>=MAYOR)THEN
MAYOR=VECTOR2(I)
POSICION=I
END IF
END DO
MAYDIG=POSICION
RETURN
END FUNCTION MAYDIG

66)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras y retorne la
!posicin en la que se encuentre el mayor nmero primo que termine en 3 almacenado en el vector.
PROGRAM PROBLEMA_66
INTEGER,EXTERNAL::VECTORPRIMO
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,POS
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
POS=VECTORPRIMO(VECTOR1)
IF(POS>=1)THEN
PRINT*,"LA POSICION DEL MAYOR VALOR PRIMO QUE TERMINA EN TRES ES",POS
ELSE
PRINT*,"NO HAY NUMEROS PRIMOS QUE TERMINEN EN TRES"
END IF
END PROGRAM PROBLEMA_66

INTEGER FUNCTION VECTORPRIMO(VECTOR2)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR2
INTEGER::I,J,C,PRIMOMAYOR,POSICION
PRIMOMAYOR=0
C=0
DO I=1,10
DO J=1,VECTOR2(I) !1,3
IF(MOD(VECTOR2(I),J)==0)THEN
C=C+1
END IF
END DO
IF(C==2)THEN
IF(VECTOR2(I)>PRIMOMAYOR)THEN
PRIMOMAYOR=VECTOR2(I)
IF(MOD(PRIMOMAYOR,10)==3)THEN
POSICION=I
END IF
END IF
END IF
C=0
END DO
VECTORPRIMO=POSICION
RETURN
END FUNCTION VECTORPRIMO

67)
!Construir una funcin que reciba como parmetro un entero
!y retorne ese elemento de la serie de Fibonacci.
PROGRAM PROBLEMA_67
INTEGER,EXTERNAL::VECTORFIBO
INTEGER::X
PRINT*,"INGRESE PARAMETRO ENTERO : "
READ*,X
PRINT*,"EL ELEEMENTO",X ," DE LA SERIE DE FIBONACCI ES :",VECTORFIBO(X)
END PROGRAM PROBLEMA_67

INTEGER FUNCTION VECTORFIBO(Y)


INTEGER,INTENT(IN)::Y
INTEGER,DIMENSION(30)::FIBO
INTEGER::I
FIBO=0
FIBO(1)=0
FIBO(2)=1
DO I=3,30
FIBO(I)=FIBO(I-1)+FIBO(I-2)
END DO
VECTORFIBO=FIBO(Y)
PRINT*,FIBO
PRINT*,"----------------"
RETURN
END FUNCTION VECTORFIBO

68)
!Construir una funcin que reciba como parmetros dos enteros, el primero actuar como
! base y el segundo como exponente y retorne el resultado de elevar dicha base a dicho exponente.
PROGRAM PROBLEMA_68
INTEGER,EXTERNAL::BASEEXP
INTEGER::X,Y
PRINT*,"INGRESE BASE ENTERA : "
READ*,X
PRINT*,"INGRESE EXPONENTE ENTERO : "
READ*,Y
PRINT*,X," ELEVADO A LA ",Y," ES IGUAL A :",BASEEXP(X,Y)
END PROGRAM PROBLEMA_68

INTEGER FUNCTION BASEEXP(A,B)


INTEGER,INTENT(IN)::A,B
BASEEXP=A**B
RETURN
END FUNCTION BASEEXP

69)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras
!y retorne la cantidad de nmeros terminados en 3 que contiene el vector.
PROGRAM PROBLEMA_69
INTEGER,EXTERNAL::TERMINA3
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
PRINT*,"LA CANTIDAD DE ELEMENTOS DEL VECTOR QUE TERMINAN EN TRES ES :",TERMINA3(VECTOR1)
END PROGRAM PROBLEMA_69

INTEGER FUNCTION TERMINA3(VECTOR3)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR3
INTEGER::I,C
C=0
DO I=1,10
IF(MOD(VECTOR3(I),10)==3)THEN
C=C+1
END IF
END DO
TERMINA3=C
RETURN
END FUNCTION TERMINA3
70)
PROGRAM PROBLEMA_70
INTEGER,EXTERNAL::DIGITO
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,X
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
PRINT*,"INGRESE DIGITO A BUSCAR EN EL VECTOR"
READ*,X
PRINT*,"LA CANTIDAD DE VECES QUE SE REPITE EL DIGITO EN EL VECTOR ES:",DIGITO(VECTOR1,X)
END PROGRAM PROBLEMA_70

INTEGER FUNCTION DIGITO(VEC,A)


INTEGER,DIMENSION(10),INTENT(IN)::VEC !45,515,645,15,58
INTEGER,INTENT(IN)::A
INTEGER::I,C,TEMP
C=0
DO I=1,10
DO WHILE(VEC(I)>0)
TEMP=MOD(VEC(I),10)
VEC(I)=VEC(I)/10
IF(TEMP==A)THEN
C=C+1
END IF
END DO
END DO
DIGITO=C
RETURN
END FUNCTION DIGITO

71)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras y un dgito y
! que retorne la cantidad de nmeros del vector que terminan en dicho dgito.
PROGRAM PROBLEMA_71
INTEGER,EXTERNAL::TERMINADIG
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,X
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
PRINT*,"INGRESAR DIGITO "
READ*,X
PRINT*,"LA CANTIDAD DE ELEMENTOS DEL VECTOR QUE TERMINAN EN",X,"
ES:",TERMINADIG(VECTOR1,X)
END PROGRAM PROBLEMA_71

INTEGER FUNCTION TERMINADIG(VECTOR3,Y)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR3
INTEGER,INTENT(IN)::Y
INTEGER::I,C
C=0
DO I=1,10
IF(MOD(VECTOR3(I),10)==Y)THEN
C=C+1
END IF
END DO
TERMINADIG=C
RETURN
END FUNCTION TERMINADIG
72)
!Construir una funcin que reciba como parmetro un vector de 10 posiciones enteras y un dgito y que
!retorne la cantidad de nmeros del vector en donde dicho dgito est de penltimo.
PROGRAM PROBLEMA_72
INTEGER,EXTERNAL::TERMINAPEN
INTEGER,DIMENSION(10)::VECTOR1
INTEGER::I,X
DO I=1,10
PRINT*,"INGRESE VALOR ",I
READ*,VECTOR1(I)
END DO
PRINT*,"INGRESAR DIGITO "
READ*,X
PRINT*,"LA CANTIDAD DE ELEMENTOS DEL VECTOR QUE TIENEN EL DIGITO ",X," COMO PENULTIMO
SON:",TERMINAPEN(VECTOR1,X)
END PROGRAM PROBLEMA_72

INTEGER FUNCTION TERMINAPEN(VECTOR3,Y)


INTEGER,DIMENSION(10),INTENT(IN)::VECTOR3
INTEGER,INTENT(IN)::Y
INTEGER::I,C,B
C=0
DO I=1,10
B=VECTOR3(I)/10
IF(MOD(B,10)==Y)THEN
C=C+1
END IF
END DO
TERMINAPEN=C
RETURN
END FUNCTION TERMINAPEN
73)
!Construir una funcin que reciba como parmetro una matriz de 3x4 entera y
!retorne la cantidad de veces que se repite el mayor dato de la matriz.
PROGRAM PROBLEMA_73
INTEGER,EXTERNAL::MATRIZREPITE
INTEGER,DIMENSION(3,4)::MATRIZX
INTEGER::I,J
PRINT*,"INGRESE ELEMENTOS A LA MATRIZ 3 X 4"
DO I=1,3
READ*,(MATRIZX(I,J),J=1,4)
END DO
PRINT*,"MATRIZ"
DO I=1,3
PRINT*,(MATRIZX(I,J),J=1,4)
END DO
PRINT*,"LA CANTIDAD DE VECES QUE REPITE EL MAYOR DATO DE LA MATRIZ
ES:",MATRIZREPITE(MATRIZX)
END PROGRAM PROBLEMA_73

INTEGER FUNCTION MATRIZREPITE(MATRIZY)


INTEGER,DIMENSION(3,4),INTENT(IN)::MATRIZY
INTEGER::I,J,C,MAYOR
MAYOR=MATRIZY(1,1)
C=0
DO I=1,3
DO J=1,4
IF (MATRIZY(I,J)>=MAYOR) THEN
MAYOR=MATRIZY(I,J)
END IF
END DO
C=C+1
END DO
MATRIZREPITE=C
RETURN
END FUNCTION MATRIZREPITE

S-ar putea să vă placă și