Ir ao conteúdo
  • Cadastre-se

VisualG Uso condição SE VisuAlg


Posts recomendados

Olá! Gostaria de saber se alguém pode me ajudar a interpretar o erro que o VisuAlg mostra quando insiro a condição no SE no meu algoritmo. Pois na condição do código abaixo o programa retorna uma mensagem dizendo que esperava encontrar um "ENTAO"  nessa linha: 

se (operacao = 3) e (numero2 = 0) entao

O programa não está reconhecendo o elemento já no código, tentei pesquisar o motivo da critica, mas não encontrei nada que me ajudasse.

 

Estou construindo uma calculadora e preciso configurá-la de forma que não aceite denominador igual a 0, quando se tratar de operação de divisão. Não me familiarizo com programação, mas esse semestre tenho no meu curso uma matéria que exige o desenvolvimento desta atividade. Ficarei muito grata se alguém puder me ajudar.

Algoritmo "Calculadora"
Var
numero1, numero2, resultado: vetor [1..3] de real //declarando as variáveis
operacao: inteiro //declarando as variáveis

Inicio
escreva("Escolha a operação: 1.Soma 2.Subtração 3.Divisão 4.Multiplicação 5.Sair: ")
leia(operacao) // Decidindo a operação a ser realizada

escreva("Digite o primeiro número: ")
leia (numero1 [1])//Escolhendo o numerador

escreva("Digite o segundo número: ")
leia(numero2 [2])//Escolhendo o denominador

se (operacao = 3) e (numero2 = 0) entao
escreva ("O denominador deve ser diferente de zero. Digite novamente: ")
leia(numero2[2])
ate (numero2 > 0)
fimse

escolha operacao
caso 1
resultado[3] <- (numero1[1] + numero2[2])
escreva("O resultado é ", (numero1 [1]), " + ", (numero2 [1]), " = " , resultado [3])
caso 2
resultado[3] <- (numero1[1] - numero2[2])
escreva("O resultado é ", (numero1 [1]), " - ", (numero2 [1]), " = " , resultado [3])
caso 3
resultado[3] <- (numero1[1] / numero2[2])
escreva("O resultado é ", (numero1 [1]), " / ", (numero2 [1]), " = " , resultado [3])
caso 4
resultado[3] <- (numero1[1] * numero2[2])
escreva("O resultado é ", (numero1 [1]), " * ", (numero2 [1]), " = " , resultado [3])
fimescolha

Fimalgoritmo

 

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

Teste assim:

repita
  
se (operacao = 3) e (numero2 = 0) entao
escreva ("O denominador deve ser diferente de zero. Digite novamente: ")

leia(numero2[2])
fimse  
ate (numero2 > 0)

Corrigindo o que fez de errado:

voce estava finalizando um laço(repita) porém sem iniciar

 

o comando "se" nao funciona da forma que colocou

funciona assim

se <condição> entao

<ações>

fimse

 

o "até <condição> " é do repita

 

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

  • Membro VIP

Sobre:

19 horas atrás, Talita Silva disse:

Pois na condição do código abaixo o programa retorna uma mensagem dizendo que esperava encontrar um "ENTAO"  nessa linha: 


se (operacao = 3) e (numero2 = 0) entao

O programa não está reconhecendo o elemento já no código, tentei pesquisar o motivo da critica, mas não encontrei nada que me ajudasse.

 

Este erro está ocorrendo porque você esqueceu do colocar a coordenada do vetor numero2. Seguindo a tua lógica do código, ficaria algo assim:

se (operacao = 3) e (numero2[2] = 0) entao

 

Desta forma não ocorrerá mais este erro.

 

Entretanto existem OUTROS erros relacionado às sintaxes do se e do repita, assim como citado por @jpplokox.

 

Vou tentar resumir alguns pontos:

 

 

 

[1] PROBLEMAS RELACIONADOS À SINTAXE DO VISUALG

[1.1] ACESSO AOS ITENS DE UM VETOR

No teu código, você declarou as variáveis numero1, numero2 resultado como sendo um vetor de 3 posições (obs.: cada variável tem 3 posições!). Daí, para acessar uma posição de um dos vetores, precisaria informar o vetor e a posição deste vetor utilizando o "[ ]". Creio que você já saiba disso, apenas ficou faltando lá no se, como citado mais acima, ou seja: apenas faltou o "[2]".

Mas por que o VisualG simplesmente não disse algo como "Está faltando o definir a posição do vetor"? ou dizer algo como "A variável número2 é um vetor, e você está tentando comparar com um número (são tipos incompatíveis)"?. Eu apenas diria que seria uma "limitação do VisualG", ou seja: ele não foi capaz de identificar o problema corretamente e/ou não soube dar um retorno adequado para o programador... Em fim.. colocando o "[2]" resolveria este problema.

 

Do mesmo modo, ficou faltando o "[2]" lá no "ate".

 


[1.2] SINTAXES DAS ESTRUTURAS

Cada estrutura do VisualG tem a sua própria sintaxe. E ela deve ser seguida para um funcionamento adequado do programa. De um modo resumido, poderíamos dizer que OU as estruturas ficam isoladas uma das outras (vem um, depois vem o outro), OU uma fica dentro da outra, ou seja: uma estrutura completa dentro de outra estrutura... nunca "mescladas". Imagine como cada estrutura sendo como "caixas de papelão".. ou as caixas ficam lá separadas, ou podem ficar uma dentro da outra.. mais será sempre uma coisa completa dentro da outra...

 

 

RESUMINDO:

Ex.:

Teu código está assim:

19 horas atrás, Talita Silva disse:

se (operacao = 3) e (numero2 = 0) entao
   escreva ("O denominador deve ser diferente de zero. Digite novamente: ")
   leia(numero2[2])
   ate (numero2 > 0)
fimse

 

Nesse caso aí, só colocar o "[2]" e comando o repita... Ficaria algo assim:

   se (operacao = 3) e (numero2[2] = 0) entao
      repita
         escreva ("O denominador deve ser diferente de zero. Digite novamente: ")
         leia(numero2[2])
      ate (numero2[2] > 0)
   fimse

Traduzindo seria algo assim: "Se escolheu a opção de multiplicação e o denominador é igual a 0, então repita a leitura de um novo valor para o denominador até que ele digite um valor maior que 0". ;)

 

Teu código corrigido estes pontos ficaria mais ou menos assim:

algoritmo "Calculadora"
var
   numero1, numero2, resultado: vetor [1..3] de real //declarando as variáveis
   operacao: inteiro //declarando as variáveis

inicio
   escreva("Escolha a operação: 1.Soma 2.Subtração 3.Divisão 4.Multiplicação 5.Sair: ")
   leia(operacao) // Decidindo a operação a ser realizada
   escreva("Digite o primeiro número: ")
   leia(numero1 [1])//Escolhendo o numerador
   escreva("Digite o segundo número: ")
   leia(numero2 [2])//Escolhendo o denominador

   se (operacao = 3) e (numero2[2] = 0) entao
      repita
         escreva ("O denominador deve ser diferente de zero. Digite novamente: ")
         leia(numero2[2])
      ate (numero2[2] > 0)
   fimSe

   escolha operacao
   caso 1
      resultado[3] <- (numero1[1] + numero2[2])
      escreva("O resultado é ", (numero1 [1]), " + ", (numero2 [1]), " = " , resultado [3])
   caso 2
      resultado[3] <- (numero1[1] - numero2[2])
      escreva("O resultado é ", (numero1 [1]), " - ", (numero2 [1]), " = " , resultado [3])

   caso 3
      resultado[3] <- (numero1[1] / numero2[2])
      escreva("O resultado é ", (numero1 [1]), " / ", (numero2 [1]), " = " , resultado [3])

   caso 4
      resultado[3] <- (numero1[1] * numero2[2])
      escreva("O resultado é ", (numero1 [1]), " * ", (numero2 [1]), " = " , resultado [3])
   fimEscolha
fimAlgoritmo

Pronto! este 2 pontos (colocar os "[]" e inserir o repita) basicamente resolve os problemas de sintaxe.

 

 

[2] ALGUNS PONTOS RELACIONADOS A SUGESTÕES/CORREÇÕES

Aqui vamos ver alguns pontos relacionados a lógica e algumas sugestões de correção. Vamos lá:


[2.1] NOMENCLATURA DAS OPERAÇÕES

Não é bem um erro de lógica, mas apenas uma sugestão de correção mesmo.. no caso, o nome correto da operação é ADIÇÃO, em detrimento de SOMA... este último na verdade é o nome do "resultado da adição". Assim como o nome correto é Multiplicação, e não Produto... é Divisão, e não Quociente etc.

 

[2.2] EXIBIÇÃO DOS DADOS NA TELA

Atualmente a exibição está "quebrando" tela (pelo menos aqui no meu PC), ex.:

tela01.png

 

Quando digito uma opção, o número nem aparece.

 

Uma sugestão seria quebrar a linha:

Exemplo 1:

Inicio
   escreval("Escolha a operação")
   escreval("1.Adição 2.Subtração 3.Divisão 4.Multiplicação 5.Sair: ")

image.png

 

 

Exemplo 2:

inicio
   escreval("Escolha a operação")
   escreval("1. Adição       ")
   escreval("2. Subtração    ")
   escreval("3. Divisão      ")
   escreval("4. Multiplicação")
   escreval("5. Sair:        ")
   escreval("")
   escreva ("==> ")
   leia(operacao)

image.png

 

Por aí vai.



[3] ALGUNS PONTOS RELACIONADOS À LÓGICA

[3.1]  ATENÇÃO AO USO DAS COORDENADAS DOS VETORES

Como citado mais acima, você está utilizando um vetor de 3 posições para cada variável, ou seja: é um conjunto de 3 variáveis para cada uma das variáveis (são 9 variáveis, mas você só precisa de 3. Mais a frente em comento mais sobre isto).

 

Daí, ao exibir o resultado, você está passando a coordenada errada. Segue:

20 horas atrás, Talita Silva disse:

   escolha operacao
   caso 1
      resultado[3] <- (numero1[1] + numero2[2])
      escreva("O resultado é ", (numero1 [1]), " + ", (numero2 [1]), " = " , resultado [3])
   //...
   fimEscolha

 

Observe ali que você estava utilizando "numero[2]" para ler o dado (e calcular tb), mas na hora de escrever está utilizando "numero2[1]". Em vez de continuar usando a 2 posição do vetor, está utilizado a posição 1 (que contém um outro valor). Repare que o resultado está calculando corretamente, mas o texto final pode ficar divergente (ali sempre vai exibir 0, pois é o valor inicial).

 

Só mudar tudo para "numero2[2]".

 

 

[3.2] SOBRE "SEGUIR O ENUNCIADO"


Você cita:

20 horas atrás, Talita Silva disse:

Estou construindo uma calculadora e preciso configurá-la de forma que não aceite denominador igual a 0

 

OK. Por definição o numerador não pode ser igual a zero para o teu contexto. Mas, lá no código, está verificando apenas se é maior que 0:

20 horas atrás, Talita Silva disse:

ate (numero2[2] > 0)

 

Basta utilizar algo como:

ate (numero2[2] <> 0)

 

[3.3] USO DE VETORES

Como já reforçado.. você declarou um vetor para cada variável sem necessidade. Segue opções:

 

[3.3.1] USAR VARIÁVEIS SIMPLES

var
   numero1, numero2, resulado : real //elementos da operação
   codigo : inteiro //código da operação


[3.3.2] UM VETOR SÓ

var
   elementos : vetor [1..3] de real //elementos da operação
   codigo : inteiro //código da operação

 

 

##########

 

Faz os ajustes aí no código. Qualquer dúvida é só postar.

Outros pontos:

- ao selecionar a opção 5, o programa não deve ler os números;

- no VisualG, por algum motivo obscuro, o programa insere um espaço a esquerda para as variáveis numéricas ao utilizar o "escreva()", daí, o resultado vai ficar com o espaço que você já colocou antes mais o espaço automático, assim ficando com 2!!! (é visualmente feio). Para contornar, poderia utilizar algo assim:

      escreva("O elementos é", elementos[1], " +", elementos[2], " =" , elementos[3])

ou

      escreva("O elementos é ", elementos[1]:1, " + ", elementos[2]:1, " = " , elementos[3]:1)

Eu prefiro esta segunda forma.

image.png

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!