Ir ao conteúdo
  • Cadastre-se

VisualG Exercício Visual G - Criança Esperança


Posts recomendados

Olá pessoal, tudo beleza?

Alguém pode dar uma lida no meu código para ver como está?

Agradeço desde já =D

 

algoritmo "Criança Esperança"
var
   N, Valor, Confirmar: inteiro
inicio
      EscrevaL("-----------------------")
      EscrevaL("   CRIANÇA ESPERANÇA   ")
      EscrevaL("-----------------------")
      EscrevaL()
      EscrevaL(" Muito obrigado por participar")
      EscrevaL()
      EscrevaL(" Para doar 15 reais, pressione [1]")
      EscrevaL(" Para doar 20 reais, pressione [2]")
      EscrevaL(" Para doar 30 reais, pressione [3]")
      EscrevaL(" Para doar 40 reais, pressione [4]")
      EscrevaL(" Para doar outros valores, pressione [5]")
      EscrevaL(" Para cancelar, pressione [6]")
      EscrevaL()
      Escreva(" Pressione a opção desejada: ")
      Leia(N)
      Escolha N
              Caso 1
                   Valor := 15
              Caso 2
                   Valor := 20
              Caso 3
                   Valor := 30
              Caso 4
                   Valor := 40
              Caso 5
                   Escreva(" Por favor, digite a quantia que deseja doar:")
                   Leia(Valor)
              Caso 6
                   Valor := 0
      FimEscolha
      Se N <> 6 então
         Enquanto (Confirmar <> 1) e (Confirmar <> 2) faca
            EscrevaL(" [1] Confirma a doação no valor de R$", Valor:3:2)
            EscrevaL(" [2] Cancela a doação")
            Leia(Confirmar)
               Se Confirmar = 1 então
                  EscrevaL(" Você doou R$", Valor, ",00.")
                  Escreva(" Obrigado pela participação!")
               Senao
                    Se Confirmar = 2 então
                       EscrevaL(" Você cancelou a participação. Valor doado: R$0,00.")
                    Senao
                         EscrevaL("Opção inválida")
                    Fimse
               Fimse
         FimEnquanto
      Senao
           EscrevaL(" Você cancelou a participação. Valor doado: R$0,00.")
      Fimse
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @viniciusv21.

 

De um modo geral seu código está bom!

 

Mas veja... vai depender do que foi proposto para ser feito..  um algoritmo (passo para resolver um problema) está sempre associado ao problema em si... fazendo uma analogia exagerada, seria como se pedisse um cachorro quente e você entregasse um delicioso hambúrguer, ou seja, pode está bem feito, mas não foi o que foi solicitado.

 

 

Analisando apenas o código em si (sem entrar no contexto dele), sugiro esses pontos:

 

1- O case 6 não é necessário, apenas retire-o;

2- No cancelamento, não sei se é interessante deixar que "dou R$0,00", ou seja, na verdade não foi feito doação alguma. Cancelar é uma coisa. Doar R$0,00 é outra. Entende?

3- Para o menu principal, o programa só está tratando os números de 1 a 6.. ao inserir um número diferente destes, está sendo solicitado a confirmação da doação (não deveria, é análogo ao item 2)

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

11 horas atrás, Simon Viegas disse:

Olá @viniciusv21.

 

De um modo geral seu código está bom!

 

Mas veja... vai depender do que foi proposto para ser feito..  um algoritmo (passo para resolver um problema) está sempre associado ao problema em si... fazendo uma analogia exagerada, seria como se pedisse um cachorro quente e você entregasse um delicioso hambúrguer, ou seja, pode está bem feito, mas não foi o que foi solicitado.

 

 

Analisando apenas o código em si (sem entrar no contexto dele), sugiro esses pontos:

 

1- O case 6 não é necessário, apenas retire-o;

2- No cancelamento, não sei se é interessante deixar que "dou R$0,00", ou seja, na verdade não foi feito doação alguma. Cancelar é uma coisa. Doar R$0,00 é outra. Entende?

3- Para o menu principal, o programa só está tratando os números de 1 a 6.. ao inserir um número diferente destes, está sendo solicitado a confirmação da doação (não deveria, é análogo ao item 2)

 

 

No aguardo.

 

Olá Simon, tudo bem?

 

O que foi pedido foi bem simples, mas eu quis pensar em todas as situações possíveis que o usuário digitasse.

O gabarito é assim, do site CursoemVideo.com (...)

 

algoritmo "CriancaEsperanca"
var
   D : Inteiro
   Valor: Real
inicio
      EscrevaL ("---------------------------")
      EscrevaL ("     CRIANCA ESPERANCA     ")
      EscrevaL ("---------------------------")
      Escreval (" Muito obrigado por ajudar ")
      Escreval (" [1] para doar R$10 ")
      Escreval (" [2] para doar R$25 ")
      Escreval (" [3] para doar R$50 ")
      Escreval (" [4] para doar outros valores ")
      Escreval (" [5] para cancelar ")
      Leia (D)
      Escolha D
         Caso 1
              Valor <- 10
         Caso 2
              Valor <- 25
         Caso 3
              Valor <- 50
         Caso 4
              Escreva ("Qual o valor da doacao? R$")
              Leia (Valor)
         Caso 5
              Valor <- 0
      FimEscolha
      Escreval ("------------------------")
      Escreval (" SUA DOACAO FOI DE R$", Valor)
      Escreval (" MUITO OBRIGADO!")
      Escreval ("------------------------")
fimalgoritmo

(...) mas eu pensei em praticar o que eu já tinha aprendido e colocar o máximo de coisas juntas. Hoje eu tentei refazer utilizando procedimento, (...)

Algoritmo "Criança Esperança"
//-----------------------------------
procedimento opções()
var
inicio
   EscrevaL(" Para doar 15 reais, pressione [1]")
   EscrevaL(" Para doar 20 reais, pressione [2]")
   EscrevaL(" Para doar 30 reais, pressione [3]")
   EscrevaL(" Para doar 40 reais, pressione [4]")
   EscrevaL(" Para doar outros valores, pressione [5]")
   EscrevaL(" Para cancelar, pressione [6]")
   EscrevaL()
   Escreva(" Pressione a opção desejada: ")
   escolher_opcao()
fimprocedimento
//-----------------------------------
procedimento escolher_opcao()
var
inicio
   Leia(N)
   Escolha N
      Caso 1
         Valor := 15
      Caso 2
         Valor := 25
      Caso 3
         Valor := 30
      Caso 4
         Valor := 40
      Caso 5
         Escreva(" Por favor, digite a quantia que deseja doar:")
         Leia(Valor)
      Caso 6
         Valor := 0
      OutroCaso
         opcaoinvalida()
fimprocedimento
//-----------------------------------
procedimento confirmacao()
var
inicio
   EscrevaL(" [1] Confirma a doação no valor de R$", Valor:3:2, "?")
   EscrevaL(" [2] Cancela a doação")
      Leia(N)
         Escolha N
            Caso 1
               EscrevaL(" Você doou R$", Valor, ",00.")
               EscrevaL(" Obrigado pela participação!")
            Caso 2
               cancelamento()
            OutroCaso
               opcao_invalida()
         FimEscolha
fimprocedimento
//-----------------------------------
procedimento cancelamento()
var
inicio
   EscrevaL(" Você cancelou a participação.")
fimprocedimento
//-----------------------------------
procedimento opcao_invalida()
var
inicio
   EscrevaL(" Opção inválida.")
   EscrevaL(" [1] Voltar ao menu principal")
   EscrevaL(" [2] Cancelar doação")
   EscrevaL(" Escolha uma opção: ")
   Leia(N)
   Escolha N
      Caso 1
         opções()
      Caso 2
         cancelamento()
      Outrocaso
         opcao_invalida()
   FimEscolha
fimprocedimento
//-----------------------------------
var
   N, Valor : inteiro
inicio
   EscrevaL("-----------------------")
   EscrevaL("   CRIANÇA ESPERANÇA   ")
   EscrevaL("-----------------------")
   EscrevaL()
   opções()
      Escolha N
         Caso 1, 2, 3 , 4 , 5
            confirmacao()
         Caso 6
            cancelamento()
         OutroCaso
            opcao_invalida()
      FimEscolha
Fimalgoritmo

 (...) mas não sei o que fiz de errado. O VisualG me deu a mensagem: "O fim do algoritmo foi encontrado inesperadamente" e "Linha 98: Esperava encontrar FIMALGORITMO"

 

Abraços

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @viniciusv21.

 

1) SOBRE AS SUGESTÕES ANTERIORES

17 horas atrás, viniciusv21 disse:

O gabarito é assim, do site CursoemVideo.com (...)

 

As mesmas dicas estão valendo.

 

 

 

2) ERROS DE SINTAXES

17 horas atrás, viniciusv21 disse:

(...) mas não sei o que fiz de errado. O VisualG me deu a mensagem: "O fim do algoritmo foi encontrado inesperadamente" e "Linha 98: Esperava encontrar FIMALGORITMO"

 

Vou tentar ajudar você achar os possíveis erros. A dica é simples:

- Tire toda indentação do código. (selecione todo o texto, e vá pressionando "shift+tab" até o código ficar totalmente alinhado a esquerda);

- Desabilite a "Tabulação inteligente":
Desativar tabulação inteligente.gif

- Reindente seu código revisando cada estrutura...

- Pronto, no meio do caminho vai encontrar o(s) erro(s).

 

 

 

3) ERROS DE ESTRUTURA

17 horas atrás, viniciusv21 disse:

Hoje eu tentei refazer utilizando procedimento, (...)

Está legal... organiza mais o código, mas tem um pequeno problema:


Resumidamente seria: uma função não pode chamar uma outra função que já está aberta! Mas vou deixar essa questão para depois... primeiro encontre o erro citado acima.

 

 

 

No aguardo.

 

 

Link para o comentário
Compartilhar em outros sites

Opa, beleza? Achei o erro. Estava faltando Enquanto

Mas eu acho que assim ficou mais fácil de entender:

Só que acho que ainda está um pouco confuso. Teria um jeito mais claro de fazer esse código?

Abraços

Algoritmo "Criança Esperança"
//-----------------------------------
procedimento confirmacao()
var
inicio
   EscrevaL("[1] Confirma a doação no valor de R$", Valor:3:2, "?")
   EscrevaL("[2] Cancela a doação")
   Leia(N)
   Se N = 1 então
      EscrevaL(" Você doou R$", Valor, ",00.")
      EscrevaL(" Obrigado pela participação!")
      a <- VERDADEIRO
   Senao
      Se N = 2 então
         cancelamento()
      Senao
         opcao_invalida()
      Fimse
   Fimse
fimprocedimento
//-----------------------------------
procedimento cancelamento()
var
inicio
   EscrevaL(" Você cancelou a participação.")
   a <- VERDADEIRO
fimprocedimento
//-----------------------------------
procedimento opcao_invalida()
var
inicio
   EscrevaL(" Opção inválida.")
   EscrevaL(" [1] Voltar ao menu principal")
   EscrevaL(" [2] Cancelar doação")
   EscrevaL(" Escolha uma opção: ")
   Leia(N)
   Escolha N
      Caso 1
         a <- FALSO
      Caso 2
         cancelamento()
      Outrocaso
         opcao_invalida()
   FimEscolha
fimprocedimento
//-----------------------------------
var
   N, Valor : inteiro
   a: logico
inicio
   EscrevaL("-----------------------")
   EscrevaL("   CRIANÇA ESPERANÇA   ")
   EscrevaL("-----------------------")
   Enquanto a = FALSO faca
      EscrevaL(" Para doar 15 reais, pressione [1]")
      EscrevaL(" Para doar 20 reais, pressione [2]")
      EscrevaL(" Para doar 30 reais, pressione [3]")
      EscrevaL(" Para doar 40 reais, pressione [4]")
      EscrevaL(" Para doar outros valores, pressione [5]")
      EscrevaL(" Para cancelar, pressione [6]")
      EscrevaL()
      Escreva(" Pressione a opção desejada: ")
      Leia(N)
      Escolha N
         Caso 1
            Valor := 15
            confirmacao()
         Caso 2
            Valor := 20
            confirmacao()
         Caso 3
            Valor := 30
            confirmacao()
         Caso 4
            Valor := 40
            confirmacao()
         Caso 5
            Escreva(" Por favor, digite a quantia que deseja doar:")
            Leia(Valor)
            confirmacao()
         Caso 6
            cancelamento()
         OutroCaso
            opcao_invalida()
      FimEscolha
   FimEnquanto
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

1 hora atrás, viniciusv21 disse:

Opa, beleza? Achei o erro. Estava faltando Enquanto

Não, não foi isso. O enquanto apenas adicionou uma nova funcionalidade de repetição. Uma coisa não tem a ver com a outra. Imagine a situação: "o cliente leva o carro para oficina, diz que está com um barulho na roda... ai diz que resolveu ao instalar um ar condicionado e fazer outras alterações no carro".

 

Sugiro que revive novamente o seu código e descubra o real erro. Só após, faça modificações... (no processo ganhará experiência).

 

 

 

1 hora atrás, viniciusv21 disse:

Mas eu acho que assim ficou mais fácil de entender:

Assim como? utilizando enquanto?

 

 

 

1 hora atrás, viniciusv21 disse:

Só que acho que ainda está um pouco confuso.

Peraê... está mais fácil ou tá mais confuso? :confused:

 

 

 

1 hora atrás, viniciusv21 disse:

Teria um jeito mais claro de fazer esse código?

Existem infinitas formas de fazer um código.. tudo vai depender primeiramente da necessidade (requisitos) e da criatividade (melhorias, adaptações etc)

 

Primeiramente precisa resolver a questão do erro anterior (item 2 da postagem anterior). Não dar para ir atropelando as etapas. Ache o erro e tente resolver (sem alterar o código ainda), pois o erro pode influenciar nas novas alterações. Posta aqui o código corrigido...

 

Depois, começa a ver as melhorias... aí já se atentando no item 3... "uma função não pode chamar uma outra função que já está aberta", veja, no seu novo código, a função opcao_invalida() está chamando novamente a função opcao_invalida(). Não pode! Isso (uma função chamar a se mesma) tem até nome: recursividade! mas que só é usada para contextos específicos...

RESUMINDO:

Primeiro ache o erro e corrija. Depois vemos as modificações.

 

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Simon Viegas disse:

Olá.

 

Não, não foi isso. O enquanto apenas adicionou uma nova funcionalidade de repetição. Uma coisa não tem a ver com a outra. Imagine a situação: "o cliente leva o carro para oficina, diz que está com um barulho na roda... ai diz que resolveu ao instalar um ar condicionado e fazer outras alterações no carro".

Quis dizer que faltou o FimEscolha.

Esse é código corrigido sem modificação:

Algoritmo "Criança Esperança"
//-----------------------------------
procedimento opções()
var
inicio
   EscrevaL(" Para doar 15 reais, pressione [1]")
   EscrevaL(" Para doar 20 reais, pressione [2]")
   EscrevaL(" Para doar 30 reais, pressione [3]")
   EscrevaL(" Para doar 40 reais, pressione [4]")
   EscrevaL(" Para doar outros valores, pressione [5]")
   EscrevaL(" Para cancelar, pressione [6]")
   EscrevaL()
   Escreva(" Pressione a opção desejada: ")
   escolher_opcao()
fimprocedimento
//-----------------------------------
procedimento escolher_opcao()
var
inicio
   Leia(N)
   Escolha N
      Caso 1
         Valor := 15
      Caso 2
         Valor := 25
      Caso 3
         Valor := 30
      Caso 4
         Valor := 40
      Caso 5
         Escreva(" Por favor, digite a quantia que deseja doar:")
         Leia(Valor)
      Caso 6
         Valor := 0
      OutroCaso
         opcao_invalida()
   FimEscolha
fimprocedimento
//-----------------------------------
procedimento confirmacao()
var
inicio
   EscrevaL(" [1] Confirma a doação no valor de R$", Valor:3:2, "?")
   EscrevaL(" [2] Cancela a doação")
   Leia(N)
   Escolha N
      Caso 1
         EscrevaL(" Você doou R$", Valor, ",00.")
         EscrevaL(" Obrigado pela participação!")
      Caso 2
         cancelamento()
      OutroCaso
         opcao_invalida()
   FimEscolha
fimprocedimento
//-----------------------------------
procedimento cancelamento()
var
inicio
   EscrevaL(" Você cancelou a participação.")
fimprocedimento
//-----------------------------------
procedimento opcao_invalida()
var
inicio
   EscrevaL(" Opção inválida.")
   EscrevaL(" [1] Voltar ao menu principal")
   EscrevaL(" [2] Cancelar doação")
   EscrevaL(" Escolha uma opção: ")
   Leia(N)
   Escolha N
      Caso 1
         opções()
      Caso 2
         cancelamento()
      Outrocaso
         opcao_invalida()
   FimEscolha
fimprocedimento
//-----------------------------------
var
N, Valor : inteiro
inicio
   EscrevaL("-----------------------")
   EscrevaL("   CRIANÇA ESPERANÇA   ")
   EscrevaL("-----------------------")
   EscrevaL()
   opções()
   Escolha N
      Caso 1, 2, 3 , 4 , 5
         confirmacao()
      Caso 6
         cancelamento()
      OutroCaso
         opcao_invalida()
   FimEscolha
Fimalgoritmo

 

1 hora atrás, Simon Viegas disse:

.Depois, começa a ver as melhorias... aí já se atentando no item 3... "uma função não pode chamar uma outra função que já está aberta", veja, no seu novo código, a função opcao_invalida() está chamando novamente a função opcao_invalida(). Não pode! Isso (uma função chamar a se mesma) tem até nome: recursividade! mas que só é usada para contextos específicos..

Por que não posso usar recursividade nesse caso?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
17 horas atrás, viniciusv21 disse:

Quis dizer que faltou o FimEscolha.

Beleza!!! Creio que era que era só isso mesmo. :)

 

 

17 horas atrás, viniciusv21 disse:

Por que não posso usar recursividade nesse caso?

Creio que primeiro por que,  provavelmente, você ainda não "chegou" nesse tema (senão já tinha entendido)..., ou seja, não é nada de outro mundo, mas é relativamente um conceito mais avançado. O ponto é que recursividade geralmente é utilizada para outros fins... o que não inclui o seu contexto. Seria como dizer que "está utilizando um recurso erroneamente ou por engano"... e este "engano" tem custos! Mesmo que o código funcione  (apresente um resultado como deseja), seria um erro de lógica (quebrando as técnicas de programação).

 

Você está utilizando da recursividade para fins apenas de repetição... e a recursividade não serve para isso.. se quer repetir, utilize repita/ate ou enquanto/fimenquanto.

 

Caso tenha interesse, dê uma pesquisada no Google com os termos "recursividade no visualg". Mas se atente que não tem nada a ver com o seu código...

 

 

***

 

Para demonstrar o que acontece, abaixo inseri algumas linhas no código para exibir quando ENTRA e quando SAI de um procedimento. Experimente inserir no menu principal a opção 8 umas 20 vezes (fique apertando 8 e ENTER várias vezes, quanto mais erro, mais claro fica)... depois volte para o menu principal e faça uma doação. Veja o que acontece.

Algoritmo "Criança Esperança"
//-----------------------------------
procedimento opcao()
   inicio
   EscrevaL("Entrou em OPCAO()")
   EscrevaL(" Para doar 15 reais, pressione [1]")
   EscrevaL(" Para doar 20 reais, pressione [2]")
   EscrevaL(" Para doar 30 reais, pressione [3]")
   EscrevaL(" Para doar 40 reais, pressione [4]")
   EscrevaL(" Para doar outros valores, pressione [5]")
   EscrevaL(" Para cancelar, pressione [6]")
   EscrevaL()
   Escreva (" Pressione a opção desejada: ")
   EscrevaL("SAIU de OPCAO()")
   escolher_opcao()
   EscrevaL("VOLTOU para OPCAO()")
   EscrevaL("FINALIZOU de OPCAO()")
fimprocedimento

//-----------------------------------
procedimento escolher_opcao()
   inicio
   EscrevaL("Entrou em ESCOLHER_OPCAO()")
   Leia(N)
   Escolha N
      Caso 1
         Valor := 15
      Caso 2
         Valor := 25
      Caso 3
         Valor := 30
      Caso 4
         Valor := 40
      Caso 5
         Escreva(" Por favor, digite a quantia que deseja doar:")
         Leia(Valor)
      Caso 6
         Valor := 0
      OutroCaso
         EscrevaL("SAIU de ESCOLHER_OPCAO()")
         opcao_invalida()
         EscrevaL("VOLTOU para ESCOLHER_OPCAO()")
   FimEscolha
   EscrevaL("FINALIZOU de ESCOLHER_OPCAO()")
fimprocedimento

//-----------------------------------
procedimento confirmacao()
   inicio
   EscrevaL("Entrou em CONFIRMACAO()")
   EscrevaL(" [1] Confirma a doação no valor de R$", Valor:3:2, "?")
   EscrevaL(" [2] Cancela a doação")
   Leia(N)
   Escolha N
      Caso 1
         EscrevaL(" Você doou R$", Valor, ",00.")
         EscrevaL(" Obrigado pela participação!")
      Caso 2
         cancelamento()
      OutroCaso
         EscrevaL("SAIU de CONFIRMACAO()")
         opcao_invalida()
         EscrevaL("VOLTOU para CONFIRMACAO()")
   FimEscolha
   EscrevaL("FINALIZOU de CONFIRMACAO()")
fimprocedimento

//-----------------------------------
procedimento cancelamento()
   inicio
   EscrevaL("Entrou em CANCELAMENTO()")
   EscrevaL(" Você cancelou a participação.")
   EscrevaL("FINALIZOU de CANCELAMENTO()")
fimprocedimento
//-----------------------------------
procedimento opcao_invalida()
   inicio
   EscrevaL("Entrou em OPCAO_INVALIDA()")
   EscrevaL(" Opção inválida.")
   EscrevaL(" [1] Voltar ao menu principal")
   EscrevaL(" [2] Cancelar doação")
   EscrevaL(" Escolha uma opção: ")
   Leia(N)
   Escolha N
      Caso 1
         opcao()
      Caso 2
         cancelamento()
      Outrocaso
         EscrevaL("SAIU de OPCAO_INVALIDA()")
         opcao_invalida()
         EscrevaL("VOLTOU para OPCAO_INVALIDA()")
   FimEscolha
   EscrevaL("FINALIZOU de OPCAO_INVALIDA()")
fimprocedimento
//-----------------------------------
var
N, Valor : inteiro
inicio
   EscrevaL("-----------------------")
   EscrevaL("   CRIANÇA ESPERANÇA   ")
   EscrevaL("-----------------------")
   EscrevaL()
   opcao()
   Escolha N
      Caso 1, 2, 3 , 4 , 5
         confirmacao()
      Caso 6
         cancelamento()
      OutroCaso
         opcao_invalida()
   FimEscolha
Fimalgoritmo

 

Veja que cada vez que você entra em "recursividade", o procedimento anterior fica aberto, aguardando finalizar o atual...

 

Em fim... se seu objetivo é confirmar a opção, você poderia ficar repetindo até que utilize uma opção válida. Utilizando o comando "repita/ate". O que não pode é chamar um procedimento que já está aberto...

 

 

 

MINHA SUGESTÃO

Pegue o gabarito e faça alterações SEM UTILIZAR procedimentos, ou seja, inserir o conceito de "Confirmação", "Cancelamento" e "Opção inválida" utilizando laços de repetições (repita ou enquanto). Só depois tente encontrar o que pode ser colocado como procedimento. Por exemplo, abaixo peguei o gabarito e apenas substitui partes por procedimentos.

algoritmo "CriancaEsperanca"
var
   D : Inteiro
   Valor: Real

procedimento MenuOpcoes()
inicio
   EscrevaL ("---------------------------")
   EscrevaL ("     CRIANCA ESPERANCA     ")
   EscrevaL ("---------------------------")
   Escreval (" Muito obrigado por ajudar ")
   Escreval (" [1] para doar R$10 ")
   Escreval (" [2] para doar R$25 ")
   Escreval (" [3] para doar R$50 ")
   Escreval (" [4] para doar outros valores ")
   Escreval (" [5] para cancelar ")
fimprocedimento

procedimento lerOpcao()
inicio
   leia(D)
fimprocedimento

procedimento processamento()
inicio
   Escolha D
      Caso 1
         Valor <- 10
      Caso 2
         Valor <- 25
      Caso 3
         Valor <- 50
      Caso 4
         Escreva ("Qual o valor da doacao? R$")
         Leia (Valor)
      Caso 5
         Valor <- 0
   FimEscolha
   Escreval ("------------------------")
   Escreval (" SUA DOACAO FOI DE R$", Valor)
   Escreval (" MUITO OBRIGADO!")
   Escreval ("------------------------")
fimprocedimento

inicio
menuOpcoes()
lerOpcao()
processamento()
fimalgoritmo

 

Deu para pegar a ideia? os procedimento estão servindo basicamente para organizar o código (algo que já estava pronto)... esqueça os procedimentos por enquanto... estará mais atrapalhando que ajudando!

 

Mais pra frente, quanto tiver mais experiência e entender melhor o funcionamento dos procedimento e funções, já daria para ir pensando na construção do algoritmo utilizando eles.... da forma como você planejou os procedimentos anteriormente, não servirá, pois está quebrando uns princípios, como foi o caso do uso da recursividade de modo "errado".

 

Apenas faça as melhorias como se não existissem procedimentos!

 

No aguardo.

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

Eu rodei o programa e consegui ver o erro. Entendi agora, não dá para colocar para abrir um procedimento que está aberto porque ele vai ter que finalizar várias vezes. Acho que entendi mais ou menos.

 

Em 16/10/2017 às 11:09, Simon Viegas disse:

 

MINHA SUGESTÃO

Pegue o gabarito e faça alterações SEM UTILIZAR procedimentos, ou seja, inserir o conceito de "Confirmação", "Cancelamento" e "Opção inválida" utilizando laços de repetições (repita ou enquanto). Só depois tente encontrar o que pode ser colocado como procedimento. Por exemplo, abaixo peguei o gabarito e apenas substitui partes por procedimentos.

 

 

Eu usei procedimento de novo , mas dessa vez só para organizar mesmo, aí não dá problemas rs.

 

Algoritmo "Criança Esperança"
//-----------------------------------
procedimento menu_principal()
var
inicio
   EscrevaL(" Para doar 15 reais, pressione [1]")
   EscrevaL(" Para doar 20 reais, pressione [2]")
   EscrevaL(" Para doar 30 reais, pressione [3]")
   EscrevaL(" Para doar 40 reais, pressione [4]")
   EscrevaL(" Para doar outros valores, pressione [5]")
   EscrevaL(" Para cancelar, pressione [6]")
   EscrevaL()
   Escreva(" Pressione a opção desejada: ")
fimprocedimento
//-----------------------------------
procedimento msg_voce_doou()
var
inicio
   EscrevaL(" Você doou R$", Valor, ",00.")
   EscrevaL(" Obrigado pela participação!")
fimprocedimento

//-----------------------------------
procedimento pergunta_confirmacao()
var
inicio
   EscrevaL(" [1] Confirma a doação no valor de R$", Valor:3:2)
   EscrevaL(" [2] Cancela a doação")
fimprocedimento
//-----------------------------------
procedimento msg_voce_cancelou()
var
inicio
   EscrevaL(" Você cancelou a participação.")
fimprocedimento
//-----------------------------------
procedimento parar_programa()
var
inicio
   executar_programa := falso
fimprocedimento
//-----------------------------------
procedimento voltar_ao_menu_principal()
var
inicio
   executar_programa := verdadeiro
fimprocedimento
//-----------------------------------
procedimento msg_opcao_invalida()
var
inicio
   EscrevaL(" Opção Inválida.")
   EscrevaL(" [1] Voltar ao menu principal")
   EscrevaL(" [2] Cancelar doação")
   EscrevaL(" Escolha uma opção: ")
fimprocedimento
//-----------------------------------
var
   N, Valor, B : inteiro
   executar_programa : logico
inicio
   EscrevaL("-----------------------")
   EscrevaL("   CRIANÇA ESPERANÇA   ")
   EscrevaL("-----------------------")
   EscrevaL()
   executar_programa := verdadeiro
   Enquanto executar_programa = verdadeiro faca
      menu_principal()
      Leia(N)
      Escolha N
         Caso 1
            Valor := 15
         Caso 2
            Valor := 20
         Caso 3
            Valor := 30
         Caso 4
            Valor := 40
         Caso 5
            Escreva("Digite a quantia: ")
            Leia(Valor)
         Caso 6
            msg_voce_cancelou()
            parar_programa()
         OutroCaso
            Se N <> 6 então
               repita
                  msg_opcao_invalida()
                  leia(B)
                  Se B = 1 então
                     voltar_ao_menu_principal()
                  Senao
                     Se(B = 2) então
                        msg_voce_cancelou()
                        parar_programa()
                     Fimse
                  Fimse
               ate (B = 1) ou (B = 2)
            Fimse
      FimEscolha
      Se (N >= 1) e (N <= 5) então
         pergunta_confirmacao()
         leia(B)
         Se B = 1 então
               msg_voce_doou()
               parar_programa()
         Senao
            Se B = 2 então
               msg_voce_cancelou()
               parar_programa()
            Senao
               repita
                  msg_opcao_invalida()
                  leia(B)
                  Se B = 1 então
                     voltar_ao_menu_principal()
                  Senao
                     Se (B = 2) então
                        msg_voce_cancelou()
                        parar_programa()
                     Fimse
                  Fimse
               ate (B = 1) ou (B = 2)
            Fimse
         Fimse
      Fimse
   FimEnquanto
Fimalgoritmo

Edit : Faltou umas coisas e tirar comando repetido.

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