F90: Programa de matemática financeira
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