Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Vinícius Werneck

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

Recommended Posts

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

 

Editado por Simon Viegas
Alterar tipo de CODE para "C Languages"

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

 

Editado por Simon Viegas
O item 3 estava como 2... apenas atualizei

Compartilhar este post


Link para o post
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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

 

Compartilhar este post


Link para o post
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?

Editado por viniciusv21
erro

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
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.

Editado por viniciusv21
erro no código
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×