Ir ao conteúdo
  • Cadastre-se

VisualG Visualg - Algoritmo Caixa Eletrônico


Posts recomendados

Olá pessoal, sou iniciante em programação, e estou fazendo um algoritmo de simulação de um caixa eletrônico no Visualg. Gostaria de saber se vocês acham que é um bom algoritmo, e se sim, qual linguagem vocês acham mais interessante para ser transcrito esse algoritmo. E se mesmo em Portugol, valeria a pena subir esse algoritmo no GitHub.

var



    PROFISSAO           : caractere
    SALARIO             : REAL
    SENHA               : caractere
    OPERACAO            : INTEIRO
    SALDO               : REAL
    SAQUE               : REAL
    DEPOSITO            : REAL
    TRANSFERENCIA       : REAL
    AGENCIA             : INTEIRO
    CONTA               : INTEIRO
    CPF                 : REAL
    CONFIRMACAO         : INTEIRO
    EMPRESTIMO          : REAL
    EMPRESTIMO1         : REAL
    PARCELA             : INTEIRO
    MENU                : INTEIRO
    MES                 : INTEIRO
    MES1                : caractere
    ANO                 : INTEIRO
    SALJUROS            : REAL
    PAGMTOEMP           : INTEIRO
    ACAO                : INTEIRO
    PAGMTO              : INTEIRO
    JUROS               : REAL


inicio



SALJUROS := 1.3/100

MES <- 1

se MES = 1 então
   MES1 <- "Janeiro"
fimse


escreva("Qual o seu salário?:")
leia(SALARIO)
limpatela

escreval("Bem vindo Sr. Tiago")
escreval()


OPERACAO <- 1

enquanto OPERACAO <= 9 faca


         se (OPERACAO = 1) então
            limpatela
            escreval("Mês: ",MES1,  "       Ano:",ANO)
            escreval()
            escreval()
            escreval("Qual operação o senhor deseja realizar?:")
            escreval()
            escreval("2 - Saldo")
            escreval("3 - Saque")
            escreval("4 - Depósito")
            escreval("5 - Transferência")
            escreval("6 - Empréstimo")
            escreval("7 - Investismento")
            escreval()
            escreval("8 - Avançar um mês")
            escreval()
            escreval("9 - SAIR")
            se EMPRESTIMO1 > 0 então
               escreval()
               escreval()
               escreval()
               escreval()
               escreval("===============================================")
               escreval("     Há um empréstimo em andamento!")
               escreval("     No valor de R$",EMPRESTIMO1:2:2)
               escreval("===============================================")
               se PAGMTO = PAGMTOEMP então
                  escreval("Este mês está marcada para a quitação da dívida")
                  EMPRESTIMO  <- 0
                  EMPRESTIMO1 <- 0
                  PAGMTO      <- 0
                  PAGMTOEMP   <- 0
                  SALDO := SALDO - EMPRESTIMO1
               fimse
            fimse
            escreval()
            LEIA(OPERACAO)
            limpatela
         fimse


         se (OPERACAO = 2) então
            limpatela
            escreval("Mês: ", MES)
            escreval()
            escreval()
            escreval("Saldo: R$ ",SALDO:2:2)
            escreval()
            escreval()
            escreval()
            escreval()
            escreval("Digite 1 para voltar ao menu.")
            escreval()
            leia(OPERACAO)
         fimse


         se (OPERACAO = 3) então
            escreval("Mês: ", MES)
            escreval()
            escreval()
            escreval("Qual valor o senhor deseja sacar?:")
            escreva("R$")
            leia(SAQUE)

            se (saque<=saldo) então
               limpatela
               escreval("Valor a ser sacado: R$",SAQUE)
               escreval()
               escreval("Deseja continuar? (1 - Sim; 2 - Não)")
               escreval()
               leia(CONFIRMACAO)

               se (CONFIRMACAO = 1) então
                  limpatela
                  escreval("Saque realizado com sucesso!")
                  escreval()
                  escreval("Valor sacado: R$",SAQUE)
                  SALDO := SALDO - SAQUE
                  escreval()
                  escreval()
                  escreval()
                  escreval()
                  escreval("Digite 1 para voltar ao menu.")
                  escreval()
                  leia(OPERACAO)
               senao
                  OPERACAO <- 1
                  limpatela
               fimse
            senao
               escreval()
               escreval("Saldo insuficiente!")
               escreval()
               escreval()
               escreval()
               escreval("Digite 1 para voltar ao menu.")
               escreval()
               leia(OPERACAO)
            fimse
         fimse


         se (OPERACAO = 4) então
            escreval("Qual valor o senhor deseja depositar?:")
            escreva("R$")
            leia(DEPOSITO)
            limpatela

            escreval("Valor a ser depositado: R$",DEPOSITO)
            escreval()
            escreval("Deseja continuar? (1 - Sim; 2 - Não)")
            leia(CONFIRMACAO)
            
            se (CONFIRMACAO = 1) então
               limpatela
               escreval("Saque realizado com sucesso!")
               escreval()
               escreval("Valor sacado: R$",DEPOSITO)
               SALDO := SALDO + DEPOSITO
               escreval()
               escreval()
               escreval()
               escreval("Digite 1 para voltar ao menu.")
               escreval()
               leia(OPERACAO)
            senao
               OPERACAO <- 1
               limpatela
            fimse
         fimse

         se (OPERACAO = 5) então
            escreval("Qual valor o senhor deseja transferir?:")
            escreva("R$")
            leia(TRANSFERENCIA)
            
            se (TRANSFERENCIA<=SALDO) então
               escreval()
               escreval("-----Dados do Receptor-------")
               escreva("Agência: ")
               leia(AGENCIA)
               escreva("Conta: ")
               leia(CONTA)
               escreva("CPF: ")
               leia(CPF)
               limpatela
               escreval("Confirme os dados:")
               escreval()
               escreval("Agência: ",AGENCIA)
               escreval("Conta: ",CONTA)
               escreval("CPF: ", CPF)
               escreval()
               escreval("Valor a transferir: R$",TRANSFERENCIA)
               escreval()
               escreval("Deseja continuar? (1 - Sim; 2 - Não)")
               leia(CONFIRMACAO)

               se (CONFIRMACAO = 1) então
                  limpatela
                  escreval("Tranferência realizada com sucesso!")
                  escreval()
                  escreval("Valor transferido: R$",TRANSFERENCIA)
                  SALDO := SALDO - TRANSFERENCIA
                  escreval()
                  escreval()
                  escreval()
                  escreval("Digite 1 para voltar ao menu.")
                  escreval()
                  leia(OPERACAO)
               senao
                  OPERACAO <- 1
               fimse
            senao
               escreval()
               escreval("Saldo insuficiente para transferência!")
               escreval()
               escreval()
               escreval()
               escreval("Digite 1 para voltar ao menu.")
               escreval()
               leia(OPERACAO)
            fimse
         fimse


         se (OPERACAO = 6 ) então
            escreval("Qual o valor do empréstimo desejado?:")
            escreva("R$")
            leia(EMPRESTIMO)
      
            se EMPRESTIMO <= SALDO*1.1 então
               limpatela
               escreval("Empréstimo disponível")
               escreval()
               escreval("A quitação da dívida será daqui quantos meses?")
               leia(PARCELA)
               escreval()
               JUROS := 9.9/100
               EMPRESTIMO1 := (EMPRESTIMO * (1 + JUROS) ^ PARCELA)
               escreval("Valor da dívida: R$",EMPRESTIMO1:2:2)
               escreval()
               escreval("Deseja continuar? (1 - Sim; 2 - Não)")
               leia(CONFIRMACAO)

               se (CONFIRMACAO = 1) então
                  limpatela
                  escreval("Empréstimo realizado com sucesso!")
                  escreval()
                  escreval("O valor de R$",EMPRESTIMO," já consta em sua conta bancária!")
                  escreval()
                  escreval()
                  escreval()
                  escreval("Digite 1 para voltar ao menu.")
                  escreval()
                  leia(OPERACAO)
                  SALDO := SALDO + EMPRESTIMO
                  PAGMTOEMP := MES + PARCELA
               senao
                  EMPRESTIMO  <- 0
                  EMPRESTIMO1 <- 0
                  PAGMTO      <- 0
                  PAGMTOEMP   <- 0
                  PARCELA     <- 0
                  OPERACAO    <- 1
               fimse
            senao
               escreval()
               escreval("Empréstimo não será concedido!")
               EMPRESTIMO  <- 0
               EMPRESTIMO1 <- 0
               PAGMTO      <- 0
               PAGMTOEMP   <- 0
               PARCELA     <- 0
               escreval()
               escreval()
               escreval()
               escreval("Digite 1 para voltar ao menu.")
               escreval()
               leia(OPERACAO)
            fimse
         fimse
         
         

         se (OPERACAO = 7) então
            escreval("Qual o tipo de investimento irá realizar?")
            escreval("1 - Tesouro Direto")
            escreval("2 - CDB")
            escreval("3 - Letras de crédito (LCI e LCA)")
            escreval("4 - Ações de empresas")
            escreval()
            leia(ACAO)

            escreva("R$")

            se ACAO = 1

            fimse

            se ACAO = 2

            fimse

            se ACAO = 3

            fimse

            se ACAO = 4

            fimse
         fimse
   
   
         se  OPERACAO = 8 então
            MES <- MES + 1
                se MES = 1 então
                   MES1 <- "Janeiro"
                fimse
                se MES = 2 então
                   MES1 <- "Fevereiro"
                fimse
                se MES = 3 então
                   MES1 <- "Março"
                fimse
                se MES = 4 então
                   MES1 <- "Abril"
                fimse
                se MES = 5 então
                   MES1 <- "Maio"
                fimse
                se MES = 6 então
                   MES1 <- "Junho"
                fimse
                se MES = 7 então
                   MES1 <- "Julho"
                fimse
                se MES = 8 então
                   MES1 <- "Agosto"
                fimse
                se MES = 9 então
                   MES1 <- "Setembro"
                fimse
                se MES = 10 então
                   MES1 <- "Outubro"
                fimse
                se MES = 11 então
                   MES1 <- "Novembro"
                fimse
                se MES = 12 então
                   MES1 <- "Dezembro"
                fimse
                se MES = 13 então
                   ANO <- ANO + 1
                   MES <- 1
                   MES1 <- "Janeiro"
                fimse
            SALDO <- (SALDO *(1 + SALJUROS) + SALARIO)
            se EMPRESTIMO > 0 então
               PAGMTO <- PAGMTO + 1
            fimse
            escreval("Mês: ",MES1,  "       Ano:",ANO)
            escreval()
            escreval()
            escreval("Digite 1 para voltar ao menu.")
            escreval()
             leia(OPERACAO)
         fimse

         
         se (OPERACAO = 9) então
            escreval("Logout feito com sucesso!")
            escreval()
            fimalgoritmo
         fimse

fimenquanto

 

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

  • Membro VIP
Em 16/02/2023 às 14:30, Tiago Veloso disse:

Gostaria de saber se vocês acham que é um bom algoritmo, e se sim, qual linguagem vocês acham mais interessante para ser transcrito esse algoritmo.

 

 

O programa já está muito bom! E você pode ir aprimorando alguns detalhes aos poucos!

 

Em relação para qual linguagem transcrever, eu deixo para outros visitantes ajudarem nas sugestões... vou me atentar à lógica e sintaxe do código em si. (A base da lógica meio que pode ser aproveitado lá quando migrar.)

 

 

 

Em 16/02/2023 às 14:30, Tiago Veloso disse:

E se mesmo em Portugol, valeria a pena subir esse algoritmo no GitHub.


Creio que sim! Não deixa de ser um portfólio. Se já mexe com GitHub, melhor ainda!

 

Tenho um bem simples largado por lá. Tá bem simplisão. Se quiser dar uma olhada e/ou contribuir.

https://github.com/SimonViegas/CodesForumClubeDoHardware/tree/master/VisualG

 

 

 

Alguns pontos em relação ao código:

 

1# Sobre o uso do comando fimAlgoritmo

O comando fimAlgoritmo não pode ser utilizado com essa finalidade. Esse código nem era para rodar!!! Roda porque o VisualG não compila e o interpretador é problemático. Num código, só pode ter um fimAlgoritmo, que seria o último comando lá do algoritmo. Até para corroborar que é um erro, até o Ctrl+G (para identar) bagunça o código.

 

Um exemplo de ajustes:

   enquanto (operacao < 9) faca
        .
        .
        .
        se (operacao = 9) então
         escreval("Logout feito com sucesso!")
         escreval()
      fimSe
   fimEnquanto
fimAlgoritmo

 

Adendo: no Pascal, pai do VisualG, tem o exit e o halt, mas no VisualG não existe um equivalente. Já vi até vídeos (aulas profissionais, inclusive) sugerindo utilizar como você fez, mas, pelo menos eu, entendo que é um erro! (Estou aberto para discussão.)

 

 

 

2# Estruturação do menu

Aqui existe dois pontos centrais:

2.1 Não utilização de uma opção para ser especificamente o menu principal. (Não ter isso de "Operação 1".)

2.2 Uso de estrutura de seleção que evite verificações desnecessárias. (Utilizar uma cadeia de se/senão, ou, simplesmente utilizar um escolha. Em detrimento de ter um monte de se isolados.)

 

Eu ia destrinchar cada uma das opções, mas eu sou muito prolixo.. Desisti. kkkkkkk

 

Vou exemplificar na prática o problema!

 

image.png

 

Eu entrei no Saldo, daí pressionei 3. Foi direto pro Saque (???). Vê? Por que isso ocorre? Pois TODA VEZ que uma opção é escolhida, todas as outras verificações se é ou não a escolhida é verificada... ou seja: se pressionar 4, vai verificar se é 2, depois se é 3, depois se é 4, como é 4, vai entrar na estrutura de seleção, vai fazer o que tem que fazer, mas depois vai continuar verificando se é 5, se é 6, se é 7........ isso TODA VEZ. Independe do valor escolhido. Com se/senão ou escolha, para quando acha.

 

Não sei se isso era proposital... seria possível, mas do jeito que está ficou estranho. É mais comum simplesmente voltar para o menu principal sempre. (Num sistema mais sofisticado, no sentido de uma tentativa de mais adaptabilidade de uso no dia-a-dia, poderia ir implementando essas funcionalidades. Mas não acho o momento!)

 

Exemplo de base de código utilizando escolha:

algoritmo "Caixa Eletrônico v1.01"
const
   SALJUROS = 0.013
var
   profissao           : caractere
   salario             : real
   senha               : caractere
   operacao            : inteiro
   saldo               : real
   saque               : real
   deposito            : real
   transferencia       : real
   agencia             : inteiro
   conta               : inteiro
   cpf                 : real
   confirmacao         : inteiro
   emprestimo          : real
   emprestimo1         : real
   parcela             : inteiro
   menu                : inteiro
   mes                 : inteiro
   mesExtenso          : caractere
   ano                 : inteiro
   pagmtoEmp           : inteiro
   acao                : inteiro
   pagmto              : inteiro
   juros               : real

inicio
   mes <- 2
   ano <- 2023

   se MES = 2 então
      mesExtenso <- "Fevereiro"
   fimSe

   escreva("Qual o seu salário?:")
   leia(salario)

   enquanto (operacao <> 9) faca
      limpaTela()

      escrevaL("Bem vindo, Sr. Tiago") //vírgula antes do vocativo
      escrevaL()

      escrevaL("Mês: ", mesExtenso, "":10, "Ano: ", ano:1)
      escrevaL()
      escrevaL()
      escrevaL("Qual operação o senhor deseja realizar?:")
      escrevaL()
      escrevaL("2 - Saldo")
      escrevaL("3 - Saque")
      escrevaL("4 - Depósito")
      escrevaL("5 - Transferência")
      escrevaL("6 - Empréstimo")
      escrevaL("7 - Investismento")
      escrevaL()
      escrevaL("8 - Avançar um mês")
      escrevaL()
      escrevaL("9 - SAIR")
      escreva ("==> ")
      leia(operacao)

      limpaTela()
      escrevaL("Mês: ", mes:1)
      escrevaL()
      escrevaL()

      escolha operacao
      caso 2
         escrevaL("Saldo: R$ ", saldo:1:2)
         escrevaL()
         escrevaL()
         escrevaL()
         escrevaL()
         escreva ("Pressione ENTER para voltar ao menu principal")
         leia(confirmacao)

      caso 3
         escrevaL("Qual valor o senhor deseja sacar?")
         escreva ("R$")
         leia(saque)

         se (saque <= saldo) então
            limpatela
            escrevaL("Valor a ser sacado: R$ ", saque:1:2)
            escrevaL()
            escrevaL("Deseja continuar? (1 - Sim; 2 - Não)")
            escrevaL()
            leia(confirmacao)

            se (confirmacao = 1) então
               limpaTela()
               escrevaL("Saque realizado com sucesso!")
               escrevaL()
               escrevaL("Valor sacado: R$ ", saque:1:2)
               saldo := saldo-saque
               escrevaL()
               escrevaL()
               escrevaL()
               escrevaL()
            senao
               escrevaL("Operação cancelada")
               escreva ("Pressione ENTER para voltar ao menu principal")
               leia(confirmacao)
            fimSe
         senao
            escrevaL()
            escrevaL("Saldo insuficiente!")
            escrevaL()
            escrevaL()
            escrevaL()
            escrevaL("Operação cancelada")
            escreva ("Pressione ENTER para voltar ao menu principal")
            leia(confirmacao)
         fimSe

      caso 4

      caso 5


      fimEscolha
   fimEnquanto
fimAlgoritmo

 

 

PS: o conceito de "procedimentos" e "funcoes" é bem simples no VisualG. Se já quiser entrar (lá ele) nesse mundo. Exemplos:

 

Para aguardar um ENTER.

procedimento aguardarUmEnter()
inicio
   escreva ("Pressione ENTER para voltar ao menu principal")
   leia(confirmacao)
fimProcedimento

 

Aí, toda vez que chamar esse procedimento, vão ser executados o que estiver dentro dele. Daí usa onde quiser. Exemplo:

 

      caso 2
         escrevaL("Saldo: R$ ", saldo:1:2)
         escrevaL()
         escrevaL()
         escrevaL()
         escrevaL()
         aguardarUmEnter()

 

É basicamente isso! Meio que "dar um nome a um conjunto de comando e em algum momento invocar pelo nome escolhido".

 

Exemplo para traduzir o mês. Aqui só muda que a própria função retorna algo nela mesma (olha o tipo ali caractere), e nesse exemplo também está recebendo um parâmetro (o uso dos colchetes e a declaração do parâmetro dentro deles):

funcao mesPorExtenso(numMes : inteiro) : caractere
inicio
   escolha numMes
   caso 1
      retorne "Janeiro"
   caso 2
      retorne "Fevereiro"
   caso 3
      retorne "Março"
   caso 4
      retorne "Abril"
   caso 5
      retorne "Maio"
   caso 6
      retorne "Junho"
   caso 7
      retorne "Julho"
   caso 8
      retorne "Agosto"
   caso 9
      retorne "Setembro"
   caso 10
      retorne "Outubro"
   caso 11
      retorne "Novembro"
   caso 12
      retorne "Dezembro"
   fimEscolha
fimFuncao

 

Única diferença entre procedimento e função, é que função retorna algo em si mesma. Em outra linguagem mais populares... tudo é "funcao". E quando não retorna algo em si mesmo, define, por exemplo, com o "retorno void" ("vazio").

 

Exemplo do uso acima:

 escrevaL("Mês: ", mesPorExtenso(2), "":10, "Ano: ", ano:1)

 

image.png

 

Vai retornar o valor que foi usando no retorne. (Que no caso o correspondente ao 2, que foi o valor passado por parâmetro ao ser invocado dentro do procedimento escrevaL().). Por aí vai.

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

@Simon Viegas

Cara, desde já lhe agradeço muito, por esse feedback.

 

Citação
Em 17/02/2023 às 18:57, Simon Viegas disse:

1# Sobre o uso do comando fimAlgoritmo

Desta informação, eu não tinha ideia de que não é certo, valeu.

 

 

Citação
Em 17/02/2023 às 18:57, Simon Viegas disse:

2# Estruturação do menu

Do menu, eu tinha percebido esse problema, porém resolvi deixar e cuidar da parte das funções primeiro. Mais para frente eu iria de fato mexer nisso.

 

 

 

Citação
Em 17/02/2023 às 18:57, Simon Viegas disse:

Aí, toda vez que chamar esse procedimento, vão ser executados o que estiver dentro dele. Daí usa onde quiser. Exemplo:

Tentei fazer essa parte do aguardar enter e não deu certo cara.

 

Obrigado pelo feedback mais uma vez. Eu vou corrigir, e quando achar que está melhor, eu mando aqui para você ver! kkkkkk valeu cara 

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

  • Membro VIP
Em 18/02/2023 às 23:59, Tiago Veloso disse:

Tentei fazer essa parte do aguardar enter e não deu certo cara.

 

Diz aí o que não deu certo.

 

 

Vou chutar que seja porque eu acho que esqueci de indicar onde declara os procedimentos e funções... 😄

 

Basicamente inserir acima do inicio. Exemplo:

 

   ...
   pagmto              : inteiro
   juros               : real

procedimento aguardarUmEnter()
inicio
   escreva ("Pressione ENTER para voltar ao menu principal")
   leia(confirmacao)
fimProcedimento

funcao mesPorExtenso(numMes : inteiro) : caractere
inicio
   escolha numMes
   caso 1
      retorne "Janeiro"
   caso 2
      retorne "Fevereiro"
   caso 3
      retorne "Março"
   caso 4
      retorne "Abril"
   caso 5
      retorne "Maio"
   caso 6
      retorne "Junho"
   caso 7
      retorne "Julho"
   caso 8
      retorne "Agosto"
   caso 9
      retorne "Setembro"
   caso 10
      retorne "Outubro"
   caso 11
      retorne "Novembro"
   caso 12
      retorne "Dezembro"
   fimEscolha
fimFuncao

inicio
   ...
   escrevaL("Mês: ", mesPorExtenso(2), "":10, "Ano: ", ano:1)
   aguardarUmEnter()
   ...

 

O VisualG vai executando os comando da esquerda para direita, de cima para baixo. Ele meio que ler toda uma linha e executa o que ela entendeu. Para os procedimentos (como o aguardarUmEnter()), ao ser chamado, o VisualG vai "deslocar a ordem de execução" lá para onde está declarado o procedimento, e vai executando tudo que está lá, como se fosse um "subprograma". Ao terminar, volta para a linha onde foi invocada e continua o processo.

 

Para o caso de funções, é bem semelhante, apenas o que muda é que a função seria um procedimento que ao mesmo tempo retorna um valor nela mesma. Só muda isso. Ao tentar executar essa linha onde está o mesPorExtenso(2), o VisualG primeiro vai lá onde está a função... vai executar linha por linha lá, vai encontrar a opção 2 e vai retornar um valor na função. Daí, vai imprimir o texto "Mês: Fevereiro", pois vai utilizar o valor que foi retornado pela função. Função seria como uma "variável", só que o conteúdo é retornando por ela mesma (lá do "subprograma" que foi definido).

 

Adendo: ao ter contato com uma 9dade, se for do interesse, dá uma pesquisada no google.. Por exemplo: "como utilizar procedimentos no VisualG". E se joga!

 

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!