Ir ao conteúdo

Posts recomendados

Postado

Eae pessoal, tô aprendendo algoritmos com o Gustavo Guanabara do Curso em Vídeo. Comecei a criar um programa que simulasse um caixa eletrônico. Aos poucos e conforme vou avançando no curso eu vou implementando coisas novas ao programa. No momento ele está assim. Gostaria de saber como posso melhorá-lo, especialmente na linha 52, pois a verificação ficou gigante! kkk. Me arrependi de não ter feito submenus, mas logo logo vou fazer isso. E outra coisa, vocês podem reparar que em alguns comandos de escreva eu digitei "saldo:10:2". Queria saber como mostrar qualquer quantidade de números antes da vírgula, pois colocando 999 números por exemplo, não aparece nada quando inicio o programa. Aí coloquei 10 mesmo.

 

algoritmo "semnome"
var
   opções, codigo, dep: Inteiro
   saque, saldoD, emprestimo, saldo, valor: Real
   repetir, fazerpag, mais_dep, outra_op, outro_pag: caractere
procedimento menu(var V1, V2, V3, V4: real)
var
   T1, T2, T3, T4: real
inicio
      T1 <- V1
      T1 <- T1 + V2
      T1 <- T1 - V3
      T1 <- T1 - V4
      limpatela
      escrevaL("------------------------------------")
      escrevaL("****BEM VINDO AO BANCO DO BOSTIL****")
      escrevaL("------------------------------------")
      escreval(" Digite [1] para depositar")
      escrevaL(" Digite [2] para efetuar saques")
      escrevaL(" Digite [3] para fazer pagamentos")
      escrevaL(" Digite [4] para contratar um empréstimo")
      escrevaL(" Digite [5] para converter moedas")
      escreval(" Digite [6] para encerrar")
      Leia(opções)
      Escolha opções
fimprocedimento


inicio
      limpatela
      escrevaL("------------------------------------")
      escrevaL("****BEM VINDO AO BANCO DO BOSTIL****")
      escrevaL("------------------------------------")
      escreval(" Digite [1] para depositar")
      escrevaL(" Digite [2] para efetuar saques")
      escrevaL(" Digite [3] para fazer pagamentos")
      escrevaL(" Digite [4] para contratar um empréstimo")
      escrevaL(" Digite [5] para converter moedas")
      escreval(" Digite [6] para encerrar")
      Leia(opções)
      Escolha opções
      limpatela

      saldo <- T1
            caso 1
                 repita
                       limpatela
                       escreval("Cédulas aceitas: 100, 50, 20")
                       escreval("--------------------------------")
                       escreva("Digite o valor para depósito: ")
                       leia(dep)
                       se ((((((((dep%100=0)e(dep%50=0))e(dep%20=0))ou((dep%100=0)ou(dep%50=0)))ou(((dep%100=0)ou(dep%20=0))ou((dep%50=0)ou(dep%20=0))))ou(((dep-10)%100=0)ou((dep-30)%100=0)ou((dep-70)%100=0)ou((dep-90)%100=0)))e((dep>0)e(dep>10)))e(dep>30))ou(dep=20)entao
                          escreval("--------------------------------")
                          escreval("Depósito de R$", dep," efetuado.")
                          saldo <- saldo + dep
                       senao
                            escreval("O caixa não aceita este valor")
                       fimse
                       escreval("--------------------------------")
                       escreval("Saldo disponível R$", saldo:10:2)
                       escreval("--------------------------------")
                       escreva("Deseja fazer outra operação? [S/N]")
                       leia(mais_dep)
                 ate(mais_dep = "N")
                 menu(saldo, dep, saque, valor)
            caso 2
                 repita
                       limpatela
                       escrevaL("-----------------------------------------")
                       escrevaL("  FAÇA SEU SAQUE NO BANCO DO BOSTIL  ")
                       escrevaL("-----------------------------------------")
                       escrevaL("Saldo disponível: R$", saldo:10:2)
                       escrevaL("-----------------------------------------")
                       escreva("Digite o valor do saque: ")
                       leia(saque)
                       se (saque > saldo) entao
                          repita
                                limpatela
                                escrevaL("valor indisponível, refaça a operação")
                                escrevaL("--------------------------------------")
                                escreval("Saldo disponível: R$", saldo:10:2)
                                escrevaL("--------------------------------------")
                                escreva("Digite o valor do saque: ")
                                leia(saque)
                          ate (saque <= saldo)
                       fimse
                       saldo <- saldo - saque
                       limpatela
                       escrevaL("-----------------------------------")
                       escreval("Saque de R$",saque, " efetuado.")
                       escrevaL("-----------------------------------")
                       escreval("Saldo disponível: R$", saldo:10:2)
                       escrevaL("-----------------------------------")
                       escreval("Deseja fazer outra operação? [S/N]")
                       leia(repetir)
                       limpatela
                 ate (repetir = "N")
                 escreval("O Banco do Bostil agradece pela preferência.")
                 escreval("-------------------------------------------")
                 escreval("             Tenha um bom dia.")
                 menu(saldo, dep, saque, valor)
            caso 3
                 repita
                 limpatela
                 saldo <- saldo - valor
                 escreval("Saldo disponível: R$", saldo:10:2)
                 escreval("--------------------------------------")
                 escreva("Digite o código de barras (8 números): ")
                 leia(codigo)
                 escreva("Digite o valor: ")
                 leia(valor)
                 se (valor > saldo)entao
                    repita
                          limpatela
                          escreval("Saldo disponível: R$", saldo:10:2)
                          escreval("----------------------------------")
                          escreval("Valor para pagamento indisponível.")
                          escreval("----------------------------------")
                          escreva("Deseja fazer outra operação? [S/N] ")
                          leia(outra_op)
                          limpatela
                          se (outra_op = "N")entao
                             menu(saldo, dep, saque, valor)
                          senao
                               escreva("Digite o código de barras (8 números): ")
                               leia(codigo)
                               escreva("Digite o valor: ")
                               leia(valor)
                          fimse
                    ate (valor < saldo)
                 fimse
                 escreva("Efetuar pagamento de R$", valor, "? [S/N]")
                 leia(fazerpag)
                 se (fazerpag = "S")entao
                    escreva("Aguarde")
                 timer (1000)
                       escreva(".")
                       timer (900)
                             escreva(".")
                             timer (800)
                                   escreva(".")
                 timer (0)
                 senao

                 fimse
                 limpatela
                 escreval("")
                 escreval("    Pagamento de R$", valor, " efetuado.")
                 escreva("Deseja fazer outro pagamento? [S/N]")
                 leia(outro_pag)
                 ate(outro_pag = "N")
                 limpatela
                 escreval("-------------------------------------------")
                 escreval("O Banco do Bostil agradece pela preferência.")
                 escreval("-------------------------------------------")
                 escreval("           Tenha um ótimo dia.")
                 timer(3500)
                 timer(0)
                 menu(saldo, dep, saque, valor)
              caso 3
              
              caso 4
              
              caso 5
              
              caso 6
                   fimalgoritmo
              
              outrocaso
                       escreval("Opção indisponível")
                       timer(2000)
                       timer(0)
                       menu(saldo, dep, saque, valor)
      fimescolha


fimalgoritmo

 

  • Amei 1
Postado

@Ferreira_Theu    olá , e bom começo , e seu código contém alguns erros , como esse aqui :

escreval(" Digite [1] para depositar")
escrevaL(" Digite [2] para efetuar saques")
escrevaL(" Digite [3] para fazer pagamentos")
escrevaL(" Digite [4] para contratar um empréstimo")
escrevaL(" Digite [5] para converter moedas")
escreval(" Digite [6] para encerrar")
Leia( opções )   // variáveis não podem ter acentuação
Escolha opções   // variáveis não podem ter acentuação
  limpatela      // aqui entre o escolha e o caso , tudo que 
                 // estiver aqui não terá nenhum efeito e não 
                 // vai fazer nada
  saldo <- T1    // esse aqui também
  caso 1

a Questão das casas decimais , você colocou :10:2

saldo := 15.87
escrevaL("-----------------------------------------")
escrevaL("  FAÇA SEU SAQUE NO BANCO DO BOSTIL  ")
escrevaL("-----------------------------------------")
escrevaL("Saldo disponível: R$", saldo:9:4)  
  // os 1º dois pontos faz escrevar a partir do
  // do ultimo caractere da msg e o numero é a qtd de digitos que vai escrever
  // formatando a coluna na posição ultimo digito e o 2º dois pontos é para
  // asas decimais e o numero é a qtd de casas decimais
escrevaL("-----------------------------------------")

saldo := 45.87
escreval("valor de A=",saldo)  // sem nada soma um espaço depois do ultimo  
                               // caratere da msg

 

  • Membro VIP
Postado

Sobre:

Em 03/07/2021 às 08:28, Ferreira_Theu disse:

@devair1010 valeu pela ajuda. No caso da variável com acentuação eu não sei o que houve, porque abri o código no Viusalg agora, e tava sem acentuação O.o

 

Pode ser que o fórum ou algum editor efetuou uma "autocorreção", mas o importante é que não use acentos em variáveis. :)

 

 

 

 

EM RELAÇÃO AOS MENUS

Entenda a diferença entre esses dois exemplos:

  1. ao finalizar uma dos casos (lá do escolha), eu inicio um novo menu; [Errado]
  2. ao finalizar uma dos casos (lá do escolha), eu volto para menu; [Certo]

Você meio que estaria tentando fazer do modo 1 ou algo meio "estranho" (que não deveria funcionar!!!). Entretanto, uma forma mais correta seria fazer do modo 2. Resumidamente, ao terminar uma opção do menu, o programa deve eventualmente voltar para menu... O que é diferente de "invocar novamente menu já dentro de um caso" ou algo do tipo. Seria algo assim:

 

algoritmo "Caixa Eletrônico v0.1"
var
   opcao: inteiro
   aguardar: caractere

procedimento menu()
inicio
   escrevaL("------------------------------------")
   escrevaL("****BEM VINDO AO BANCO DO BOSTIL****")
   escrevaL("------------------------------------")
   escrevaL(" Digite [1] para depositar")
   escrevaL(" Digite [2] para efetuar saques")
   escrevaL(" Digite [3] para fazer pagamentos")
   escrevaL(" Digite [4] para contratar um empréstimo")
   escrevaL(" Digite [5] para converter moedas")
   escrevaL(" Digite [6] para encerrar")
fimProcedimento

inicio
   repita
      LimpaTela()
      menu()
      leia(opcao)

      escolha opcao
      caso 1
         escrevaL("Entrou no caso 1")
      caso 2
         escrevaL("Entrou no caso 2")
      caso 3
         escrevaL("Entrou no caso 3")
      caso 6
         escrevaL("Foi tarde!!!")
      outroCaso
         escrevaL("Caso ainda não tratado")
      fimEscolha

      escrevaL()
      escrevaL("Pressione qualquer ENTER para continuar!")
      leia(aguardar)
   ate (opcao = 6)

fimAlgoritmo

 

É possível também ler a opção no próprio procedimento. Exemplo:

...
procedimento menu()
inicio
   escrevaL("------------------------------------")
   escrevaL("****BEM VINDO AO BANCO DO BOSTIL****")
   escrevaL("------------------------------------")
   escreval(" Digite [1] para depositar")
   escrevaL(" Digite [2] para efetuar saques")
   escrevaL(" Digite [3] para fazer pagamentos")
   escrevaL(" Digite [4] para contratar um empréstimo")
   escrevaL(" Digite [5] para converter moedas")
   escrevaL(" Digite [6] para encerrar")
   leia(opcao)
fimProcedimento

inicio
   repita
      LimpaTela()
      menu()

      escolha opcao
      caso 1
         escrevaL("Entrou no caso 1")
      caso 2
         escrevaL("Entrou no caso 2")
...

 

Ou utilizar um funcao que retorne o valor escolhido nela mesma.. Tanto faz*... vai da organização e padrões utilizados.

 

Observe que o menu ficaria dentro de um laço de repetição... O VisualG funciona como um fluxo de passos...

 

limpe a tela
exiba o menu
leia a opção
selecione um caminho de acordo com a opção escolhida
finalize o programa

 

Como quero que fique repetindo:

repita
   limpe a tela
   exiba o menu
   leia a opção
   selecione um caminho de acordo com a opção escolhida
até que determinada condição seja correspondente
finalize o programa

 

O menu eventualmente reaparece porque o programa voltou para lá (foi estruturado para fazer isso)... o fluxo do programa se repete. Já da forma que você fez:

image.png

 

Esse "escolha" aí solto estaria incorreto... não faço ideia porque o programa funciona! Bug sinistro! 😄, mas de qualquer forma não está seguindo a sintaxe do VisualG (que é análogo ao do Pascal)... Se lá no "curso" tiver assim ou tiver alguma explicação, por favor me apresente.

 

 

Adendo sobre a forma atual:

Em 02/07/2021 às 11:52, Ferreira_Theu disse:
menu(saldo, dep, saque, valor)

 

Essa informações repassada para o "menu" não tem nada a ver com um menu... o menu seria apara para "listar as opções" mesmo. Esses dados seriam tratados em outro local... ou no programa principal (como está atualmente) ou, seguindo o suposto padrão, em um procedimento que trate desses dados (fique a vontade para reorganizar)...

 

No programa principal:

inicio
   repita
      LimpaTela()
      menu()

      escolha opcao
      caso 1
         repita
            LimpaTela()
            escreval("Cédulas aceitas: 100, 50, 20")
            escreval("--------------------------------")
            escreval()
            escreva ("Digite o valor para depósito: ")
            leia(dep)

            saldo <- saldo + dep
            escrevaL()
            escreval("Depósito de R$", dep:1:2," efetuado.")
            escreval("--------------------------------")
            escreval("Saldo disponível R$", saldo:1:2)
            escreval("--------------------------------")
            escreva("Deseja fazer outra operação? [S/N]")
            leia(mais_dep)
         ate (mais_dep = "N")
      caso 2
         escrevaL("Entrou no caso 2")

 

Quando mais_dep for igual a "N", vai sair do repita interno... como não tem nada mais dentro do caso 1 o programa vai para próxima linha após fimEscolha... (ele não passado caso 2 como imaginável) e lá no outro ate, como opcao eventualmente está com 1 (que é diferente de 6), vai voltar lá para o respectivo repita lá em cima... que por sua vez vai limpar a tela... exibir o menu... etc, ou seja: o fluxo se repete...

 

 

 

Sobre:

Em 02/07/2021 às 11:52, Ferreira_Theu disse:

Gostaria de saber como posso melhorá-lo, especialmente na linha 52, pois a verificação ficou gigante! kkk

 

Acho que poderia ficar assim:

se (dep%20 = 0) OU (dep%50 = 0) OU ((dep > 50) E (dep-50%20=0)) entao

 

 

 

 

Sobre:

image.png

 

Não sei se também foi ensinado isso, mas esta estrutura estaria errada... só deveria existir um fimAlgoritmo no código. Simplesmente deixe o fluxo continuar até que chegue no fimAlgoritmo lá de baixo como no meu exemplo.

 

Adendo: no Pascal, o pai do VisualG, para finalizar o programa, existe o

end.

 

E também existe outros comandos como o exit() e o halt()... que meio que serviriam para fazer da forma que você tentou fazer no VisualG... entretanto NÃO existe (desconheço) comando equivalente no VisualG.... RESUMINDO: mesmo lá no Pascal, não seria recomendado utilizar esses comandos... e, como no VisualG sequer existe, não teria como fazer da forma que você fez. (Mas estou aberto à discussão sobre)

 

Qualquer dúvida é só postar.

  • Curtir 1

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!