Ir ao conteúdo
  • Cadastre-se

VisualG Calculadora inteligente de Milhas


Posts recomendados

Olá, estou iniciando no mundo do TI e estou aprendendo sobre algoritmos, no momento fiz um teste de todo meu conhecimento ate o momento e gostaria de dicas de como melhorar ou otimizar melhor o algoritmo

 

 

algoritmo "CalculadoraDeMilhas"
var
   Opcao: inteiro
   VMV, VMC, IN, TotM, Porce, TotPorce: real
   Resp: caractere
Procedimento ProcM(VMV, VMC, IN, TotM, Porce, TotPorce:Real)
var
   Resp2:Caractere
inicio
   Escreva("Qual o valor do milheiro para venda? R$")
   Leia(VMV)
   Escreva("Qual o valor do milheiro para compra? R$")
   Leia(VMC)
   Escreva("Quanto voce deseja investir? R$")
   Leia(IN)
   TotM <- (IN/VMC)
   Escreva("Você vai participar de alguma Bonificação?[S/N] ")
   Leia(Resp2)

   Se (Resp2 = "S") então
      Escreva("Qual é a porcentagem da bonificação? ")
      Leia(Porce)
      Escreval("  ")
      TotPorce <- (TotM * Porce)/ 100
      TotM <- TotPorce + TotM
      Escreval("------------------------------------------------------------")
      Escreval("  ")
      Escreval("Nesse caso, o total de milhas é ", TotM*1000:7)
   Fimse

   Escreval("------------------------------------------------------------")
   Escreval("  ")
   Escreval("O valor total da venda das milhas será: R$", TotM*VMV:5:2)
   Escreval("  ")
   Escreval("O lucro dessa operação será: R$", (TotM*VMV)-IN:5:2)
   Escreval("  ")
   Escreval("Em comparação, se você tivesse deixado esse valor rendendo")
   Escreval("100% do CDI, em 3 meses teria rendido: R$", ((IN*3.43)/100):5:2)
fimprocedimento

Procedimento Topo()
inicio
   Escreval("---------------------------------------------------------------")
   Escreval("                     CALCULADORA DE MILHAS                     ")
   Escreval("---------------------------------------------------------------")
   Escreval("  ")
   Escreval(" O que você gostaria de calcular?")
   Escreval(" [1] Pontos")
   Escreval(" [2] Milhas")
   Escreval(" [3] Sair")
   Leia(Opcao)
   Escreval("---------------------------------------------------------------")
Fimprocedimento

inicio
   Topo()
   Escolha (Opcao)
   Caso 1
      ProcM(VMV, VMC, IN, TotM, Porce, TotPorce)
   Caso 2
      ProcM(VMV, VMC, IN, TotM, Porce, TotPorce)
   Caso 3
      Escreval(" Encerrando... ")
      Escreval("---------------------------------------------------------------")
      Timer(2000)
      LimpaTela
      Fimalgoritmo
   Fimescolha
   
   Repita
      Escreval("  ")
      Escreval("---------------------------------------------------------------")
      Escreva("Deseja fazer outro calculo?[S/N]")
      Leia(Resp)
      Se (Resp = "S") então
         LimpaTela
         topo()
         Escolha (Opcao)
         Caso 3
            Escreval(" Encerrando... ")
            Escreval("---------------------------------------------------------------")
            Timer(2000)
            LimpaTela
            Fimalgoritmo
         Fimescolha
         ProcM(VMV, VMC, IN, TotM, Porce, TotPorce)
      Fimse
   Ate (Resp = "N")
   Escreval(" Escerrando...")
   Timer(2000)
   LimpaTela
fimalgoritmo

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Pedro Roth, tá top!

 

Sugeriria partir para outra plataforma... você já passou dos limites do VisualG a muito tempo... Escolha qualquer outra...

 

Que tal criar um mobille app?. O principal você já tem que é a lógica e, principalmente, a organização.

 

 

 

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Em 04/05/2023 às 20:07, Simon Viegas disse:

@Pedro Roth, tá top!

 

Sugeriria partir para outra plataforma... você já passou dos limites do VisualG a muito tempo... Escolha qualquer outra...

 

Que tal criar um mobille app?. O principal você já tem que é a lógica e, principalmente, a organização.

 

 

 

 

 

Obrigado pelo feedback 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Pedro Roth, para não passar em branco, segue algumas dicas:

 

 

Passagem de parâmetros ou uso direto de variáveis globais

 

Em 04/05/2023 às 18:58, Pedro Roth disse:
var
   Opcao: inteiro
   VMV, VMC, IN, TotM, Porce, TotPorce: real
   Resp: caractere
   
Procedimento ProcM(VMV, VMC, IN, TotM, Porce, TotPorce:Real)
var
   Resp2:Caractere
inicio

 

Como as variáveis estão como globais, não precisaria passar por parâmetro. Ainda mais que não estão passando valores, pois estes são lidos dentro do procedimento.

 

Alternativa 1:

Se quer utilizar as variáveis globais, seria só remover os parâmetros mesmo:

 

procedimento ProcM()

 

Daí ajustar as chamadas do procedimentos. Exemplo:

 

   caso 1
      ProcM()

 

 

 

Alternativa 2:

Declarar as variáveis dentro dos procedimento. Acho melhor! Dessa forma, cada procedimento terá tudo que precisa dentro dele mesmo E/OU, se precisasse de um valor externo, usaria o parâmetro (em vez de acessar variáveis globais diretamente).

 

var
   opcao: inteiro
   resp : caractere

irocedimento ProcM()
var
   mvm, vmc, in, totM, porce, totPorce: real
   resp : caractere
inicio

 

Adendo 1: as variáveis internas e globais são distintas (escopos diferentes), por isso é possível utilizar "resp" tanto fora, quanto dentro.

Adendo 2: detalhe é que no VisualG não dá para diferenciar. Aqui só daria para acessar a variável local. ... mas, de qualquer forma, como não devemos utilizar variáveis globais diretamente, acaba não sendo um grande problema... (e para resolver isso, seria simplesmente usar outra nomenclatura 😉)

 

 

 

 

Exemplo de bom* uso de parâmetros

procedimento Menu(var opcao:inteiro)
inicio
   escrevaL("---------------------------------------------------------------")
   escrevaL("                     CALCULADORA DE MILHAS                     ")
   escrevaL("---------------------------------------------------------------")
   escrevaL("  ")
   escrevaL(" O que você gostaria de calcular?")
   escrevaL(" [1] Pontos")
   escrevaL(" [2] Milhas")
   escrevaL(" [3] Sair")
   leia(opcao)
   escrevaL("---------------------------------------------------------------")
fimProcedimento

inicio
   repita
      Menu(opcao)

 

Desta forma, está implícito que o parâmetro foi usado para que o procedimento retorne algo do escopo dele para o global. Ah! Isso é possível devido à palavra reservada var ali no parâmetro.

 

 

Outra forma seria utilizando funções.

 

funcao Menu() : inteiro
var
   op : inteiro
inicio
   escrevaL("---------------------------------------------------------------")
   escrevaL("                     CALCULADORA DE MILHAS                     ")
   escrevaL("---------------------------------------------------------------")
   escrevaL("  ")
   escrevaL(" O que você gostaria de calcular?")
   escrevaL(" [1] Pontos")
   escrevaL(" [2] Milhas")
   escrevaL(" [3] Sair")
   leia(op)
   retorne op
   escrevaL("---------------------------------------------------------------")
fimFuncao

inicio
   repita
      opcao <- Menu()

      escolha (opcao)

 

Perceba que não é obrigado usar a mesma nomenclatura de variável. Mas poderia também. Tanto faz.

 

 

 

Simplificação do "programa principal"

Basicamente poderia remover o trecho "duplicado". Só ajustar o repita com o que está fora dele. Algo como:

 

inicio
   repita
      Menu(opcao)

      escolha (opcao)
      caso 1
         ProcP()
      caso 2
         ProcM()
      caso 3
         escrevaL(" Encerrando... ")
         escrevaL("---------------------------------------------------------------")
         Timer 2000
         Timer 0
         LimpaTela()
      fimEscolha
   ate (opcao = 3)
fimAlgoritmo

 

Adendo:

Em 04/05/2023 às 18:58, Pedro Roth disse:
         Caso 3
            Escreval(" Encerrando... ")
            Escreval("---------------------------------------------------------------")
            Timer(2000)
            LimpaTela
            Fimalgoritmo
         Fimescolha


Na minha visão NÃO é possível utilizar o fimAlgoritmo para finalizar o programa dessa forma no VisualG. Considero com erro de sintaxe. Resumidamente: um algoritmo só deve ter um fimAlgoritmo, que basicamente é aquele associado ao inicio.

 

Por sinal, no Pascal, o fimAlgoritmo seria equivalente ao "end."... e lá tem o os comandos exit e halt. Estes dois últimos "NÃO EXISTEM" no Visualg. E, mesmo lá no Pascal, não seria uma boa prática "forçar o encerramento" dessa forma, o mais correto seria "deixar o fluxo seguir" até que o programa chegue lá no "verdadeiro" fimAlgoritmo... que fica no fim do código, assim como sugerido mais acima.

 

 

 

 

Sobre perguntar sobre novos cálculos

Sugeria deixar ou dentro de cada procedimento ou dentro de cada opção.

 

 

 

Em fim... tudo isso são "técnicas de programação". Independe da linguagem. Por sinal, o VisualG sequer é uma linguagem (é uma pseudolinguagem). O Visualg tem 2 pontos fontes para iniciantes: é em Português e tem essa "áreas de variáveis de memória" bem na cara... que ajuda muito... mas por outro lado tem muitas limitações e bugs, incluse desse de usar fimAlgoritmo onde não deve, rs.

 

Se quiser dar continuidade por aqui não tem problema... mesmo que queira também já imergir em outra linguagem mais forte.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 14/05/2023 às 16:42, Simon Viegas disse:

@Pedro Roth, para não passar em branco, segue algumas dicas:

 

 

Passagem de parâmetros ou uso direto de variáveis globais

 

 

Como as variáveis estão como globais, não precisaria passar por parâmetro. Ainda mais que não estão passando valores, pois estes são lidos dentro do procedimento.

 

Alternativa 1:

Se quer utilizar as variáveis globais, seria só remover os parâmetros mesmo:

 

procedimento ProcM()

 

Daí ajustar as chamadas do procedimentos. Exemplo:

 

   caso 1
      ProcM()

 

 

 

Alternativa 2:

Declarar as variáveis dentro dos procedimento. Acho melhor! Dessa forma, cada procedimento terá tudo que precisa dentro dele mesmo E/OU, se precisasse de um valor externo, usaria o parâmetro (em vez de acessar variáveis globais diretamente).

 

var
   opcao: inteiro
   resp : caractere

irocedimento ProcM()
var
   mvm, vmc, in, totM, porce, totPorce: real
   resp : caractere
inicio

 

Adendo 1: as variáveis internas e globais são distintas (escopos diferentes), por isso é possível utilizar "resp" tanto fora, quanto dentro.

Adendo 2: detalhe é que no VisualG não dá para diferenciar. Aqui só daria para acessar a variável local. ... mas, de qualquer forma, como não devemos utilizar variáveis globais diretamente, acaba não sendo um grande problema... (e para resolver isso, seria simplesmente usar outra nomenclatura 😉)

 

 

 

 

Exemplo de bom* uso de parâmetros

procedimento Menu(var opcao:inteiro)
inicio
   escrevaL("---------------------------------------------------------------")
   escrevaL("                     CALCULADORA DE MILHAS                     ")
   escrevaL("---------------------------------------------------------------")
   escrevaL("  ")
   escrevaL(" O que você gostaria de calcular?")
   escrevaL(" [1] Pontos")
   escrevaL(" [2] Milhas")
   escrevaL(" [3] Sair")
   leia(opcao)
   escrevaL("---------------------------------------------------------------")
fimProcedimento

inicio
   repita
      Menu(opcao)

 

Desta forma, está implícito que o parâmetro foi usado para que o procedimento retorne algo do escopo dele para o global. Ah! Isso é possível devido à palavra reservada var ali no parâmetro.

 

 

Outra forma seria utilizando funções.

 

funcao Menu() : inteiro
var
   op : inteiro
inicio
   escrevaL("---------------------------------------------------------------")
   escrevaL("                     CALCULADORA DE MILHAS                     ")
   escrevaL("---------------------------------------------------------------")
   escrevaL("  ")
   escrevaL(" O que você gostaria de calcular?")
   escrevaL(" [1] Pontos")
   escrevaL(" [2] Milhas")
   escrevaL(" [3] Sair")
   leia(op)
   retorne op
   escrevaL("---------------------------------------------------------------")
fimFuncao

inicio
   repita
      opcao <- Menu()

      escolha (opcao)

 

Perceba que não é obrigado usar a mesma nomenclatura de variável. Mas poderia também. Tanto faz.

 

 

 

Simplificação do "programa principal"

Basicamente poderia remover o trecho "duplicado". Só ajustar o repita com o que está fora dele. Algo como:

 

inicio
   repita
      Menu(opcao)

      escolha (opcao)
      caso 1
         ProcP()
      caso 2
         ProcM()
      caso 3
         escrevaL(" Encerrando... ")
         escrevaL("---------------------------------------------------------------")
         Timer 2000
         Timer 0
         LimpaTela()
      fimEscolha
   ate (opcao = 3)
fimAlgoritmo

 

Adendo:


Na minha visão NÃO é possível utilizar o fimAlgoritmo para finalizar o programa dessa forma no VisualG. Considero com erro de sintaxe. Resumidamente: um algoritmo só deve ter um fimAlgoritmo, que basicamente é aquele associado ao inicio.

 

Por sinal, no Pascal, o fimAlgoritmo seria equivalente ao "end."... e lá tem o os comandos exit e halt. Estes dois últimos "NÃO EXISTEM" no Visualg. E, mesmo lá no Pascal, não seria uma boa prática "forçar o encerramento" dessa forma, o mais correto seria "deixar o fluxo seguir" até que o programa chegue lá no "verdadeiro" fimAlgoritmo... que fica no fim do código, assim como sugerido mais acima.

 

 

 

 

Sobre perguntar sobre novos cálculos

Sugeria deixar ou dentro de cada procedimento ou dentro de cada opção.

 

 

 

Em fim... tudo isso são "técnicas de programação". Independe da linguagem. Por sinal, o VisualG sequer é uma linguagem (é uma pseudolinguagem). O Visualg tem 2 pontos fontes para iniciantes: é em Português e tem essa "áreas de variáveis de memória" bem na cara... que ajuda muito... mas por outro lado tem muitas limitações e bugs, incluse desse de usar fimAlgoritmo onde não deve, rs.

 

Se quiser dar continuidade por aqui não tem problema... mesmo que queira também já imergir em outra linguagem mais forte.

 

 

Muito obrigado pelas dicas e correções, esse código serviu para testar meu conhecimento sobre algoritmos

Resolvi aprender algoritmo para ter uma base para passar a aprender outras linguagens 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!