F90: Programa de matemática financeira

From AdonaiMedrado.Pro.Br
Jump to: navigation, search

Este programa foi desenvolvido pelo aluno Belmiro Galo da Silva durante a disciplina Processamento de Dados (UFBA 2008.2). Data da apresentação: 27/11/2008.

Texto abaixo de autoria do próprio aluno.

Motivação & Objetivos

A escolha do tema foi devido à necessidade de que hoje, o mundo passando por uma incomoda crise financeira, possamos calcular quanto irá valer cada prestação com certa taxa de juros ou calcular quanto é necessário aplicar hoje para que no fim de um determinado tempo se possa ter um bom valor aplicado e etc.

Como a crise não só atingiu os países de língua portuguesa, fiz um programa capaz de exibir mensagens em inglês, espanhol e o já citado português, a fim de que possa ser solução para todos.

Podendo ser utilizado a fim de uma prática pedagógica, alunos em sala de aula, ao estudar sobre o assunto matemática financeira, pode conferir resultados, comparar os resultados entre os juros simples e composto, tirar dúvidas, e com isso, estimular o aprendizado.

PROGRAM financeira
    IMPLICIT NONE
        INTEGER, PARAMETER :: ESPANHOL = 1, INGLES = 2, PORTUGUES = 3
        INTEGER, PARAMETER :: digitarnumero = 1, jurossimples = 2, juroscompostos = 3, &
                              taxa = 4, tempo = 5, valorpresente = 6, valorfuturo = 7, &
                              juros = 8, pergunta = 9, invalido =10, frasetaxa = 11, &
        		      frasetempo = 12, frasevaloratual = 13, frasevalorfuturo = 14, &       
                              frasejuros = 15, taxae = 16, tempoe = 17, valorhje = 18, &
                              jurose = 19, valorfute = 20
	CALL MenuPrincipal()
CONTAINS
  SUBROUTINE MenuPrincipal()
      IMPLICIT NONE
      INTEGER :: OpcaoDeLingua, Erro
      WRITE (*,*) "1- español"
      WRITE (*,*) "2- english"
      WRITE (*,*) "3- português"                
      DO
          READ (*,*,IOstat=Erro) OpcaoDeLingua
          IF (Erro> 0 .OR. OpcaoDeLingua < 1 .OR. OpcaoDeLingua> 3) THEN                
              WRITE (*,*) "Opção inválida. Digite uma opção do menu."
              WRITE (*,*) "Option invalid. Enter a menu item"
              WRITE (*,*) "Opción válida. Introduce un elemento de menú"
                      ELSE 
                              EXIT
          END IF
      END DO
     CALL menusecundario(OpcaoDeLingua)
  END SUBROUTINE MenuPrincipal 
  CHARACTER(LEN=50) FUNCTION MostrarMensagem(Mensagem,OpcaoDeLingua)
    IMPLICIT NONE
    INTEGER, INTENT(in) :: Mensagem,OpcaoDeLingua
    SELECT CASE (OpcaoDeLingua)
      CASE (ESPANHOL)
        !Espanhol           
        SELECT CASE (Mensagem)
          CASE (digitarnumero)
            MostrarMensagem = "Introduzca su número "
          CASE (jurossimples)
            MostrarMensagem = "1 - interés simple"
          CASE (juroscompostos)
            MostrarMensagem = "2 - interés compuesto"
          CASE (taxa)
            MostrarMensagem = "1- tasa de interés "
          CASE (tempo)
            MostrarMensagem = "5- tiempo"
          CASE (valorpresente)
            MostrarMensagem = "3- valor actual "
          CASE (valorfuturo)
            MostrarMensagem = "4- valor futuro"
          CASE (juros)
            MostrarMensagem = "2- interés" 
          CASE (pergunta)
            MostrarMensagem = "Lo que quieres saber?"  
          CASE (invalido)
            MostrarMensagem = "Opción válida. Introduce un elemento de menú"      
          CASE (frasetaxa)
            MostrarMensagem = "entrar en su tasa de interés en meses"
          CASE (frasetempo)
            MostrarMensagem = "introducir el tiempo (plazo) en meses"
          CASE (frasevaloratual)
            MostrarMensagem = "ingrese su valor actual"
          CASE (frasevalorfuturo)
            MostrarMensagem = "introducir su valor futuro"
          CASE (frasejuros)
            MostrarMensagem = "tipo que se devuelve con interés"
          CASE (taxae)
            MostrarMensagem = "su tasa de interés es..." 
          CASE (tempoe)
            MostrarMensagem = "el momento de su aplicación es..."
          CASE (valorhje)
            MostrarMensagem = "su valor actual es... "
          CASE (jurose)
            MostrarMensagem = "El interés generado fue..." 
          CASE (valorfute)
            MostrarMensagem = "su valor futuro (monto) es..."
        END SELECT                
      CASE (INGLES)
        !ingles              
        SELECT CASE (Mensagem)
          CASE (digitarnumero)
            MostrarMensagem = "enter your number "
          CASE (jurossimples)
            MostrarMensagem = "simple interest, enter 1 "
          CASE (juroscompostos)
            MostrarMensagem = "compound interest, enter 2"
          CASE (taxa)
            MostrarMensagem = "1- interest rate"
          CASE (tempo)
            MostrarMensagem = "5- time"
          CASE (valorpresente)
            MostrarMensagem = "3- present value"
          CASE (valorfuturo)
            MostrarMensagem = "4- future value"
          CASE (juros)
            MostrarMensagem = "2- interest" 
          CASE (pergunta)
            MostrarMensagem = "what you want to know?"  
          CASE (invalido)
            MostrarMensagem = "Option invalid. Enter a menu item" 
          CASE (frasetaxa)
            MostrarMensagem = "enter your interest rate in months"
          CASE (frasetempo)
            MostrarMensagem = "enter the time (deadline) in months"
          CASE (frasevaloratual)
            MostrarMensagem = "enter your present value"
          CASE (frasevalorfuturo)
            MostrarMensagem = "enter your future value"
          CASE (frasejuros)
            MostrarMensagem = "type as is returned with interest" 
          CASE (taxae)
            MostrarMensagem = "their interest rate is..."  
          CASE (tempoe)
            MostrarMensagem = "the time of its application is..."
          CASE (valorhje)
            MostrarMensagem = "its current value is ... "
          CASE (jurose)
            MostrarMensagem = "The interest generated was ... "
          CASE (valorfute)
            MostrarMensagem = "its future value (amount) is ..."
        END SELECT
      CASE (PORTUGUES)
      !Portugues
        SELECT CASE (Mensagem)
          CASE (digitarnumero)
            MostrarMensagem = "digite seu número"
          CASE (jurossimples)
            MostrarMensagem = "juros simples, digite 1"
          CASE (juroscompostos)
            MostrarMensagem = "juros compostos, digite 2"
          CASE (taxa)
            MostrarMensagem = "1- taxa de juros"
          CASE (tempo)
            MostrarMensagem = "5- tempo"
          CASE (valorpresente)
            MostrarMensagem = "3- valor presente"
          CASE (valorfuturo)
            MostrarMensagem = "4- valor futuro"
          CASE (juros)
            MostrarMensagem = "2- juros" 
          CASE (pergunta)
            MostrarMensagem = "O que voce deseja saber?"  
          CASE (invalido)
            MostrarMensagem = "Opção inválida. Digite uma opção do menu"
          CASE (frasetaxa)
            MostrarMensagem = "digite sua taxa de juros em meses"
          CASE (frasetempo)
            MostrarMensagem = "digite seu tempo (prazo) em meses."
          CASE (frasevaloratual)
            MostrarMensagem = "digite o valor atual (capital)"
          CASE (frasevalorfuturo)
            MostrarMensagem = "digite o valor futuro (montante)"
          CASE (fraseJuros)
            MostrarMensagem = "digite quanto se obteve de juros"
          CASE (taxae)
            MostrarMensagem = "sua taxa de juros é..." 
          CASE (tempoe)
            MostrarMensagem = "o tempo da sua aplicação é..."
          CASE (valorhje)
            MostrarMensagem = "o valor atual da sua aplicação é..."
          CASE (jurose)
            MostrarMensagem = "os juros gerado foi de..."
          CASE (valorfute)
            MostrarMensagem = "o valor futuro(montante) é "     
        END SELECT                         
    END SELECT
  END FUNCTION
  SUBROUTINE menusecundario(OpcaoDeLingua)
    IMPLICIT NONE
    INTEGER, INTENT(IN) :: OpcaoDeLingua
    INTEGER:: OPCAO, ERRO
 
    WRITE(*,*) MostrarMensagem(jurossimples,OpcaoDeLingua) 
    WRITE(*,*) MostrarMensagem(juroscompostos, OpcaoDeLingua) 
 
    DO
      READ (*,*, IOSTAT = ERRO) OPCAO
      IF (ERRO > 0 .AND. OPCAO <1 .OR. OPCAO >2) THEN
        WRITE(*,*) MostrarMensagem(invalido,OpcaoDeLingua)
      ELSE
        EXIT
      END IF
    END DO
    SELECT CASE (OPCAO)
      CASE (1)
        CALL MostrarMenuSimples(OpcaoDeLingua)
      CASE (2)
        CALL MostrarMenuCompostos (OpcaoDeLingua)
    END SELECT
  END SUBROUTINE menusecundario
  SUBROUTINE MostrarMenuSimples (OpcaoDeLingua)
    IMPLICIT NONE
    INTEGER, INTENT(IN) :: OpcaoDeLingua
    INTEGER:: ERRO, option
    REAL::i, PV, FV, n, J
    WRITE(*,*) MostrarMensagem(pergunta,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(taxa,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(juros,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(valorpresente,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(valorfuturo,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(tempo,OpcaoDeLingua)
    DO
      READ (*,*,IOstat=Erro) option
      IF (Erro> 0 .OR. option < 1 .OR. option> 5) THEN                
        WRITE(*,*) MostrarMensagem(invalido,OpcaoDeLingua)
      ELSE 
        EXIT
      END IF
    END DO
    SELECT CASE (option)
      CASE ( 1 )
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)
        READ (*,*) PV
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)   
        READ (*,*) n
        WRITE(*,*) MostrarMensagem(fraseJuros,OpcaoDeLingua)
        READ (*,*) J
        !formula 
        i=J/(PV*n)
        WRITE(*,*) MostrarMensagem(jurose,OpcaoDeLingua)
        WRITE(*,*) i ,"a.m"
      CASE ( 2 )
        WRITE(*,*) MostrarMensagem(frasetaxa,OpcaoDeLingua)
        READ (*,*) i
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)   
        READ (*,*) PV
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)
        READ (*,*) n
        !formula 
        J=PV*i*n
        WRITE(*,*) MostrarMensagem(tempoe,OpcaoDeLingua)
        WRITE(*,*) n ,"m"
      CASE ( 3 )
        WRITE(*,*) MostrarMensagem(fraseJuros,OpcaoDeLingua)
        READ (*,*) J
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)   
        READ (*,*) n
        WRITE(*,*) MostrarMensagem(frasetaxa,OpcaoDeLingua)
        READ (*,*) i
        !formula                             
        PV=J/(i*n)
        WRITE(*,*) MostrarMensagem(valorhje,OpcaoDeLingua)
        WRITE(*,*) PV
      CASE ( 4 )
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)
        READ (*,*) PV
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)   
        READ (*,*) n
        WRITE(*,*) MostrarMensagem(frasetaxa,OpcaoDeLingua)
        READ (*,*) i
        !formula                             
        FV= PV + PV*i*n 
        WRITE(*,*) MostrarMensagem(valorfute,OpcaoDeLingua)
        WRITE(*,*) FV
      CASE ( 5 )
        WRITE(*,*) MostrarMensagem(fraseJuros,OpcaoDeLingua)
        READ (*,*) J
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)   
        READ (*,*) PV
        WRITE(*,*) MostrarMensagem(frasetaxa,OpcaoDeLingua)
        READ (*,*) i
        !formula                             
        n= J/(PV*i)
        WRITE(*,*) MostrarMensagem(tempoe,OpcaoDeLingua)
        WRITE(*,*) n
    END SELECT
  END SUBROUTINE MostrarMenuSimples
  SUBROUTINE MostrarMenuCompostos (OpcaoDeLingua)
    IMPLICIT NONE
    INTEGER, INTENT(IN) :: OpcaoDeLingua
    INTEGER:: ERRO, option
    REAL::i, PV, FV, n, J
    WRITE(*,*) MostrarMensagem(pergunta,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(taxa,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(juros,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(valorpresente,OpcaoDeLingua)
    WRITE(*,*) MostrarMensagem(valorfuturo,OpcaoDeLingua)
    DO
      READ (*,*,IOstat=Erro) option
      IF (Erro> 0 .OR. option < 1 .OR. option > 4) THEN                
        WRITE(*,*) MostrarMensagem(invalido,OpcaoDeLingua)
      ELSE 
        EXIT
      END IF
    END DO
    SELECT CASE (option)
      CASE ( 1 )
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)
        READ (*,*) PV
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)   
        READ (*,*) n
        WRITE(*,*) MostrarMensagem(fraseJuros,OpcaoDeLingua)
        READ (*,*) J
        WRITE(*,*) MostrarMensagem(frasevalorfuturo,OpcaoDeLingua)
        READ (*,*) FV
        !formula 
        i=((FV/PV)**1/n)-1
        WRITE(*,*) MostrarMensagem(taxae,OpcaoDeLingua)
        WRITE(*,*) i ,"a.m"
      CASE ( 2 )
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)
        READ (*,*) PV
        WRITE(*,*) MostrarMensagem(frasevalorfuturo,OpcaoDeLingua)   
        READ (*,*) FV
        !formula 
        J=FV-PV        
        WRITE(*,*) MostrarMensagem(jurose,OpcaoDeLingua)
        WRITE(*,*) J
      CASE ( 3 )
        WRITE(*,*) MostrarMensagem(frasetaxa,OpcaoDeLingua)
        READ (*,*) i
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)   
        READ (*,*) n
        WRITE(*,*) MostrarMensagem(frasevalorfuturo,OpcaoDeLingua)
        READ (*,*) FV
        !formula                        
        PV= FV/((1+i)**n)
        WRITE(*,*) MostrarMensagem(valorhje,OpcaoDeLingua)
        WRITE(*,*) PV
      CASE ( 4 )
        WRITE(*,*) MostrarMensagem(frasetaxa,OpcaoDeLingua)
        READ (*,*) i
        WRITE(*,*) MostrarMensagem(frasetempo,OpcaoDeLingua)   
        READ (*,*) n
        WRITE(*,*) MostrarMensagem(frasevaloratual,OpcaoDeLingua)
        READ (*,*) PV
        !formula                             
        FV= PV*(1+i)**n
        WRITE(*,*) MostrarMensagem(valorfute,OpcaoDeLingua)
        WRITE(*,*) FV
    END SELECT
  END SUBROUTINE MostrarMenuCompostos
END PROGRAM financeira