Ir ao conteúdo
  • Cadastre-se

VisualG Exercicio de algoritmo com Visualg - Erro


Posts recomendados

Boa Tarde Caros Colegas!

Estive praticando alguns exercicios da Faculdade e novamente me deparei com um erro ao qual não estou conseguindo descobrir a solução, quem puder me ajuda agradeceria muito.

 

Algoritmo "Algoritmo_Sobre_Salario"
//
//
// Descrição   : Aqui você descreve o que o programa faz! (função)
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 17/12/2020
Var
   // Seção de Declarações das variáveis
   salario, divida : real
   resultado: real

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreval ("Qual o seu salário: ")
   leia(salario)
   escreval ("Quanto você esta devendo: ")
   leia(divida)
   resultado <- (salario - divida)

   se salario > 1.0 entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao salario < 0.0
      escreval ("Sua conta do banco está negativa: ",resultado)
   fimse
Fimalgoritmo

 

O Algoritmo condicional não exibe o segundo resultado de "Sua conta do banco está negativa: " ..... Já analisei varias vezes e não descobri o erro.

 

Desde Já Agradeço!

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

@danteerich  Eae man! beleza? Cara... a sua função condicional está errada. Veja:

se salario > 1.0 entao
   escreval ("Sua conta do banco está positiva: ",resultado)
senao salario < 0.0
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

A estrutura condicional "SE" deve avaliar uma váriável, certo. Neste caso a variável SALARIO. Até aqui está correto.
Repare que o SENAO deve ser executado SEMPRE e OBRIGATORIAMENTE toda vez que o SE retornar FALSO. Mas o que você fez foi tentar fazer mais uma vez a verificação da variável.

O correto seria:

se salario > 0 entao EXECUTA SEMPRE QUE O VALOR FOR POSITIVO (MAIOR QUE ZERO).
   escreval ("Sua conta do banco está positiva: ",resultado)
senao EXECUTA PARA TODOS OS OUTROS CASOS (MENOR DO QUE ZERO (NEGATIVO)).
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

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

@danteerich Fiz as alterações e consegui resolver... Espero que ajuddeee!

 

Algoritmo "Algoritmo_Sobre_Salario"
// Descrição  : Aqui você descreve o que o programa faz! (função)
// Autor(a)  : Nome do(a) aluno(a)
// Data atual : 17/12/2020
Var
   // Seção de Declarações das variáveis
   salario, divida : inteiro
   resultado: inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreval ("Qual o seu salário: ")
   leia(salario)
   escreval ("Quanto você esta devendo: ")
   leia(divida)
   resultado <- (salario - divida)

   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao salario < 0 entao
      escreval ("Sua conta do banco está negativa: ",resultado)
   fimse
Fimalgoritmo

 

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

  • Membro VIP

@Gustavo.Loggin, só um adendo.

 

Sobre:

5 minutos atrás, Gustavo.Loggin disse:

se salario > 0 entao EXECUTA SEMPRE QUE O VALOR FOR POSITIVO (MAIOR QUE ZERO).
   escreval ("Sua conta do banco está positiva: ",resultado)
senao EXECUTA PARA TODOS OS OUTROS CASOS (MENOR DO QUE ZERO (NEGATIVO)).
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

 

Para o senao, seria algo meio que "EXECUTA PARA TODOS OS OUTROS CASOS (NÃO MAIORES QUE ZERO)", ou seja: para iguais a 0 ou negativos. Cuidado: nem todo número que não é maior que zero é negativo.

 

 

 

 

@MidoraQuebraTudo, só um adendo também.

 

Sobre:

6 minutos atrás, MidoraQuebraTudo disse:

   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao salario < 0 entao
      escreval ("Sua conta do banco está negativa: ",resultado)
   fimse

 

O senao basicamente funcionado como um "caso contrário" do se. No caso, o computador SEMPRE vai executar, OU o que está no se, OU vai executar o que está no senao. Mas, caso queira ter outra verificação dentro do senao, teria que colocar um outro se. Algo como:

 

   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao
      se salario < 0 entao
         escreval ("Sua conta do banco está negativa: ",resultado)
      fimSe
   fimSe

 

Mas de qualquer forma temos um erro conceitual nos códigos... Essa "análise" meio que valeria para todos... Então, o que está sendo verificado é o resultado, e não o salário. Seria algo como:

 

algoritmo "Algoritmo_Sobre_Salario"
// Descrição   : Aqui você descreve o que o programa faz! (função)
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 17/12/2020
var
   salario, divida : real
   resultado: real

inicio
   escreval("Qual o seu salário: ")
   leia(salario)
   escreval("Quanto você esta devendo: ")
   leia(divida)

   resultado <- (salario - divida)

   se resultado > 0 entao
      escreval("Sua conta do banco está positiva. Tem R$ ", resultado:1:2)
   senao
      se resultado = 0 entao
         escreval("Sua conta do banco está zerada. Tem R$: ", resultado:1:2)
      senao
         escreval("Sua conta do banco está negativa. Tem R$: ", resultado:1:2)
      fimSe
   fimSe
fimAlgoritmo



A dica sempre permanece: foquem no problema, e não na solução. :)

 

Por aí vai.

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

33 minutos atrás, Gustavo.Loggin disse:

@danteerich  Eae man! beleza? Cara... a sua função condicional está errada. Veja:

se salario > 1.0 entao
   escreval ("Sua conta do banco está positiva: ",resultado)
senao salario < 0.0
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

A estrutura condicional "SE" deve avaliar uma váriável, certo. Neste caso a variável SALARIO. Até aqui está correto.
Repare que o SENAO deve ser executado SEMPRE e OBRIGATORIAMENTE toda vez que o SE retornar FALSO. Mas o que você fez foi tentar fazer mais uma vez a verificação da variável.

O correto seria:

se salario > 0 entao EXECUTA SEMPRE QUE O VALOR FOR POSITIVO (MAIOR QUE ZERO).
   escreval ("Sua conta do banco está positiva: ",resultado)
senao EXECUTA PARA TODOS OS OUTROS CASOS (MENOR DO QUE ZERO (NEGATIVO)).
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

Agradeço a explicação!

5 minutos atrás, Simon Viegas disse:

@Gustavo.Loggin, só um adendo.

 

Sobre:

 

Para o senao, seria algo meio que "EXECUTA PARA TODOS OS OUTROS CASOS (NÃO MAIORES QUE ZERO)", ou seja: para iguais a 0 ou negativos. Cuidado: nem todo número que não é maior que zero é negativo.

 

 

 

 

@MidoraQuebraTudo, só um adendo também.

 

Sobre:

 

O senao basicamente funcionado como um "caso contrário" do se. No caso, o computador SEMPRE vai executar, OU o que está no se, OU vai executar o que está no senao. Mas, caso queira ter outra verificação dentro do senao, teria que colocar um outro se. Algo como:

 


   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao
      se salario < 0 entao
         escreval ("Sua conta do banco está negativa: ",resultado)
      fimSe
   fimSe

 

Mas de qualquer forma temos um erro conceitual nos códigos... Essa "análise" meio que valeria para todos... Então, o que está sendo verificado é o resultado, e não o salário. Seria algo como:

 


algoritmo "Algoritmo_Sobre_Salario"
// Descrição   : Aqui você descreve o que o programa faz! (função)
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 17/12/2020
var
   salario, divida : real
   resultado: real

inicio
   escreval("Qual o seu salário: ")
   leia(salario)
   escreval("Quanto você esta devendo: ")
   leia(divida)

   resultado <- (salario - divida)

   se resultado > 0 entao
      escreval("Sua conta do banco está positiva. Tem R$ ", resultado:1:2)
   senao
      se resultado = 0 entao
         escreval("Sua conta do banco está zerada. Tem R$: ", resultado:1:2)
      senao
         escreval("Sua conta do banco está negativa. Tem R$: ", resultado:1:2)
      fimSe
   fimSe
fimAlgoritmo



A dica sempre permanece: foquem no problema, e não na solução. :)

 

Por aí vai.

Valeu ! Estava quebrando a cabeça.... mas o meu erro foi na lógica! Agradeço

33 minutos atrás, MidoraQuebraTudo disse:

@danteerich Fiz as alterações e consegui resolver... Espero que ajuddeee!

 


Algoritmo "Algoritmo_Sobre_Salario"
// Descrição  : Aqui você descreve o que o programa faz! (função)
// Autor(a)  : Nome do(a) aluno(a)
// Data atual : 17/12/2020
Var
   // Seção de Declarações das variáveis
   salario, divida : inteiro
   resultado: inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreval ("Qual o seu salário: ")
   leia(salario)
   escreval ("Quanto você esta devendo: ")
   leia(divida)
   resultado <- (salario - divida)

   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao salario < 0 entao
      escreval ("Sua conta do banco está negativa: ",resultado)
   fimse
Fimalgoritmo

 

Valeu !

Me ajudou muito! agora vou prestar mais atenção na lógica!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@danteerich, só para ficar claro:

 

Esse código do @MidoraQuebraTudo está com erro de sintaxe:
 

49 minutos atrás, MidoraQuebraTudo disse:


   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao salario < 0 entao
      escreval ("Sua conta do banco está negativa: ",resultado)
   fimse

 

Ali depois do senao faltou o se (e teria que ficar na linha de baixo). Esse código não era nem para rodar... para provar, veja:

 

image.png

 

2000 não é menor que 0 (é maior)... ou seja: não era para exibir a mensagem... concordam?

 

De um modo geral.., como citado mais acima, o "erro" já estaria em colocar comandos ao lado do senao... o VisualG não aceita isso (por algum bug ele não informa que está errado e simplesmente ignora o que veio depois).. teria que ficar na linha de baixo. Vide meu código na postagem anterior.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

7 minutos atrás, Simon Viegas disse:

@danteerich, só para ficar claro:

 

Esse código do @MidoraQuebraTudo está com erro de sintaxe:
 

 

Ali depois do senao faltou o se (e teria que ficar na linha de baixo). Esse código não era nem para rodar... para provar, veja:

 

image.png

 

2000 não é menor que 0 (é maior)... ou seja: não era para exibir a mensagem... concordam?

 

De um modo geral.., como citado mais acima, o "erro" já estaria em colocar comandos ao lado do senao... o VisualG não aceita isso (por algum bug ele não informa que está errado e simplesmente ignora o que veio depois).. teria que ficar na linha de baixo. Vide meu código na postagem anterior.

 

No aguardo.

Entendo. sua explicação esta me ajudando muito, e o VisualG como você falou não acusa erro, mas o bug é bem evidente. Novamente quero agradecer seu esclarecimento neste problema que tive.

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

  • Membro VIP

Só para complementar e ao mesmo tempo demonstrar... vejam:
 

Como a exibição do saldo está repetido. Daria para simplificar. Exemplo:

 

   se resultado > 0 entao
      escreva ("Sua conta do banco está positiva.")
   senao
      se resultado = 0 entao
         escreva ("Sua conta do banco está zerada.")
      senao
         escreva ("Sua conta do banco está negativa.")
      fimSe
   fimSe
   
   escreval(" Tem R$ ", resultado:1:2)
fimAlgoritmo

 


Outra forma:

   escreval("Saldo no banco: R$", resultado:1:2)
   
   se resultado > 0 entao
      escreval("Sua conta do banco está positiva")
   senao
      se resultado = 0 entao
         escreval("Sua conta do banco está zerada")
      senao
         escreval("Sua conta do banco está negativa")
      fimSe
   fimSe
fimAlgoritmo

 

 

@danteerich, qual o enunciado dessa questão? A criação do algoritmo depende do que foi pedido. Mesmo "corrigindo" esses detalhes da sintaxe, ele pode está errado em relação ao que deveria ser feito...

 

Tipo... é meio que um cliente pedir um cachorro-quente e o garçom trazer um delicioso hambúrguer artesanal, cheio de acompanhamento e tal... mas sendo que o cara quer um cachorro-quente. Não basta ser bem feito, tem que fazer o que se pede.

Link para o comentário
Compartilhar em outros sites

22 minutos atrás, Simon Viegas disse:

Só para complementar e ao mesmo tempo demonstrar... vejam:
 

Como a exibição do saldo está repetido. Daria para simplificar. Exemplo:

 


   se resultado > 0 entao
      escreva ("Sua conta do banco está positiva.")
   senao
      se resultado = 0 entao
         escreva ("Sua conta do banco está zerada.")
      senao
         escreva ("Sua conta do banco está negativa.")
      fimSe
   fimSe
   
   escreval(" Tem R$ ", resultado:1:2)
fimAlgoritmo

 


Outra forma:


   escreval("Saldo no banco: R$", resultado:1:2)
   
   se resultado > 0 entao
      escreval("Sua conta do banco está positiva")
   senao
      se resultado = 0 entao
         escreval("Sua conta do banco está zerada")
      senao
         escreval("Sua conta do banco está negativa")
      fimSe
   fimSe
fimAlgoritmo

 

 

@danteerich, qual o enunciado dessa questão? A criação do algoritmo depende do que foi pedido. Mesmo "corrigindo" esses detalhes da sintaxe, ele pode está errado em relação ao que deveria ser feito...

 

Tipo... é meio que um cliente pedir um cachorro-quente e o garçom trazer um delicioso hambúrguer artesanal, cheio de acompanhamento e tal... mas sendo que o cara quer um cachorro-quente. Não basta ser bem feito, tem que fazer o que se pede.

Entendi! Com suas orientações e dicas vou melhorar muito no entendimentos destes problemas de sintaxes e lógica.

Link para o comentário
Compartilhar em outros sites

19 minutos atrás, Simon Viegas disse:

@danteerich, qual o enunciado do problema?

Crie um Algoritmo que calcule os dividendos sobre o salário mensal de um profissional X, e apresente se sua conta bancaria ficara positiva ou negativa(sempre exibindo o salário final).

 

Esse é o enunciado da questão.

Através do meu entendimento e conhecimento básico, tentei criar aquele algoritmo que postei .

O Professor não deu nenhum valor para nenhuma variável por isso tive muita dificuldade porque sou iniciante ainda.

Link para o comentário
Compartilhar em outros sites

17 horas atrás, Simon Viegas disse:

@Gustavo.Loggin, só um adendo.

 

Sobre:

 

Para o senao, seria algo meio que "EXECUTA PARA TODOS OS OUTROS CASOS (NÃO MAIORES QUE ZERO)", ou seja: para iguais a 0 ou negativos. Cuidado: nem todo número que não é maior que zero é negativo.

 

 

 

 

@MidoraQuebraTudo, só um adendo também.

 

Sobre:

 

O senao basicamente funcionado como um "caso contrário" do se. No caso, o computador SEMPRE vai executar, OU o que está no se, OU vai executar o que está no senao. Mas, caso queira ter outra verificação dentro do senao, teria que colocar um outro se. Algo como:

 


   se salario > divida entao
      escreval ("Sua conta do banco está positiva: ",resultado)
   senao
      se salario < 0 entao
         escreval ("Sua conta do banco está negativa: ",resultado)
      fimSe
   fimSe

 

Mas de qualquer forma temos um erro conceitual nos códigos... Essa "análise" meio que valeria para todos... Então, o que está sendo verificado é o resultado, e não o salário. Seria algo como:

 


algoritmo "Algoritmo_Sobre_Salario"
// Descrição   : Aqui você descreve o que o programa faz! (função)
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 17/12/2020
var
   salario, divida : real
   resultado: real

inicio
   escreval("Qual o seu salário: ")
   leia(salario)
   escreval("Quanto você esta devendo: ")
   leia(divida)

   resultado <- (salario - divida)

   se resultado > 0 entao
      escreval("Sua conta do banco está positiva. Tem R$ ", resultado:1:2)
   senao
      se resultado = 0 entao
         escreval("Sua conta do banco está zerada. Tem R$: ", resultado:1:2)
      senao
         escreval("Sua conta do banco está negativa. Tem R$: ", resultado:1:2)
      fimSe
   fimSe
fimAlgoritmo



A dica sempre permanece: foquem no problema, e não na solução. :)

 

Por aí vai.

 
@Simon Viegas  Tem razão. Boa observação. Mas fiquei intrigado com a sua informação "nem todo número que não é maior que zero é negativo". Com isso tu se referiu ao próprio ZERO? Se não, dê-me um exemplo por favor.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, Gustavo.Loggin disse:

Com isso tu se referiu ao próprio ZERO?

 

Isso. No sentido que eu estou falando, a (ideia¹ da) lógica no teu código estaria correta:

 

18 horas atrás, Gustavo.Loggin disse:

se salario > 1.0 entao
   escreval ("Sua conta do banco está positiva: ",resultado)
senao salario < 0.0
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

 

Ali, antes, estaria verificando se é menor que zero, ou seja: não bastaria simplesmente ser um "senao" (não ser positivo)... precisaria existir OUTRA verificação específica (ser menor que 0).

 

Já abaixo... poderia levar a uma interpretação errada para quem ler desatento. Vide:

 

18 horas atrás, Gustavo.Loggin disse:

se salario > 0 entao EXECUTA SEMPRE QUE O VALOR FOR POSITIVO (MAIOR QUE ZERO).
   escreval ("Sua conta do banco está positiva: ",resultado)
senao EXECUTA PARA TODOS OS OUTROS CASOS (MENOR DO QUE ZERO (NEGATIVO)).
   escreval ("Sua conta do banco está negativa: ",resultado)
fimse

 

Ao dizer "EXECUTA PARA TODOS OS OUTROS CASOS" estaria meio que dizendo que "todos os outros casos são negativos". E não seria. Se existir um caso que não é, o "todo" deixa de existir na frase.

 

De um modo prático... o se/senão é uma estrutura que SEMPRE ou vai executar o que está no se, ou vai executar o que está no senao. Seria um caso de ou exclusivo... sempre será uma coisa ou outra.. nunca ambos, e nunca nenhum dos dois.

 

 

 

Como analogia, vejamos o conjunto ℤ+ = {0, 1, 2, 3, 4, ...}. É comum, erroneamente, denominar de "conjunto dos números positivos", quando na verdade seria definido de "conjunto dos números não-negativos". É um sutil diferença que faz toda a diferença. O conjunto dos números positivos seria Z+*, que seria o conjunto dos números inteiros, sem os negativos e sem o zero. Por aí vai.

 

 

 

 

 

¹ falo de "ideia", pois, como citei em outra postagem, faltou o se e teria que ficar na linha de baixo.

Ficar algo assim:

19 horas atrás, Gustavo.Loggin disse:

se salario > 1 entao
   escreval ("Sua conta do banco está positiva: ", resultado)
senao

  se salario < 0 entao
     escreval ("Sua conta do banco está negativa: ", resultado)
fimSe


Cada se é uma estrutura isolada. Daí um se pode ter senao ou não. O teu código estaria assim:


image.png

 

Para o retângulo vermelho, sempre vai executar ou o que tá no se, ou o que está no senao. Para o azul, ou executar o se, ou simplesmente não executa...

 

Poria ser assim também:

image.png

 

Percebam que o retângulo azul está dentro do vermelho. Caso o se vermelho resultar em falso, vai executar o senao. Tudo que está lá.. eventualmente tem um outro se/senao... mas poderia ter qualquer coisa... não existe vínculo entre um uma estrutura e outra, sacam? aí o se azul vai segui a mesma lógica normal do se/senao... computador simplesmente vai seguindo o fluxo... os se servem para direcionar para um caminho ou outro.

 


Adendo: se não me engano, tem uns bugs usando casa decimal (ex.: 0.0). Tô com preguiça de testar nesse momento, rs.

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!