Ir ao conteúdo
  • Cadastre-se

VisualG não para a execução quando digito "N" dá erro de "invalid floating point operati


Posts recomendados

Oi pessoal. fiz esse código para repetir ate o usuário dizer que não quer mais continuar. ele vai armazenar sexo e idade, no final vai mostrar quantos usuários do sexo M e F foram inseridos e mostrar a media das idades de cada sexo.

 

o problema: quando executo algumas vezes funciona normal, executo algumas vezes é mostra o resultado  (imagem 1),  mas depois de algum tempo, ele não para a execução quando digito "N" dá erro de "invalid floating point operation" (operação inválida de ponto flutuante) (imagem 2). nas primeiras vezes ele para como e mostra o resultado.

 

Para voltar funcionar tenho que tirar as linhas 25 e 26 e refazer as linhas de novo da mesma forma que era antes ai ele roda algumas vez e volta o erro.

algoritmo "sexo e idade"
var
   sexo: caracter
   m,f : inteiro
   idade : inteiro
   resposta : caracter
   somaidadem, somaidadef: inteiro
   mediam, mediaf: real
inicio
   repita
      escreval("Digite o seu sexo : [M/F] ")
      leia(sexo)
      escreval("Digite a idade: ")
      leia(idade)
      escolha sexo
      caso "M"
         m := m + 1
         somaidadem := somaidadem + idade
      caso "F"
         f := f + 1
         somaidadef := somaidadef + idade
      fimescolha
      escreval("Deseja continuar ? [S/N] ")
      leia(resposta)
   ate (resposta = "N")
   mediam := somaidadem / m
   mediaf := somaidadef / f

   escreval("Quantidade de sexo masculina: ", m)
   escreval("Media de idade do sexo masculina: ", mediam)
   escreval("Quantidade de sexo feminino: ", f)
   escreval("Media de idade do sexo faminino: ", mediaf)
fimalgoritmo

 

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

@Wallys Luan WL       invalid  floating point  operation , é por que você colocou para dividir hum número por zero ,  e isso é impossível no visualG , ali na média 

, então seu código poderia ser assim  :

Algoritmo "sexo e idade"
Var
  sexo                  : caractere
  m,f                   : inteiro
  idade                 : inteiro
  resposta              : caractere
  somaidadem,somaidadef : inteiro
  mediam, mediaf        : real
Inicio
  repita
    escreva("Digite o seu sexo  M / F -: ")
    leia(sexo)
    escreva("Digite a idade -----------: ")
    leia(idade)
    escolha maiusc(sexo)
    caso "M"
       m := m + 1
       somaidadem := somaidadem + idade
    caso "F"
       f := f + 1
       somaidadef := somaidadef + idade
    fimescolha
    escreva("Deseja continuar ? S/N --: ")
    leia(resposta)
  ate maiusc(resposta) = "N"
  se m > 0 entao
    mediam := somaidadem / m// cuidado nas divisões por zero Ímposível no visualG !
  fimse
  se f > 0 entao
    mediaf := somaidadef / f// não se pode dividir nenhum número por zero no visualG
  fimse
  escreval("Quantidade de sexo masculina -----: ",m:2:2      )//limitar casas decimais
  escreval("Media de idade do sexo masculina -: ",mediam:2:2 )
  escreval("Quantidade de sexo feminino ------: ",f :2:2     )
  escreval("Media de idade do sexo faminino --: ",mediaf:2:2 )
Fimalgoritmo

 

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

  • Membro VIP

@Wallys Luan WL, como sugerido por @devair1010, o erro vai ocorrer toda vez que você não inserir um sexo masculino ou um sexo feminino... tendo assim um "contador" zero e por consequência tentando efetuar uma divisão inválida para o computador

 

ADENDOS:

Segue apenas alguns observações para não sermos induzidos a uns possíveis erros.

 

Só para ficar claro.

 

 

Sobre:

22 horas atrás, devair1010 disse:

@Wallys Luan WL       invalid  floating point  operation , é por que você colocou para dividir o número zero por algum outro número

 

Obviamente, e como demonstrado no código, é o contrário, ou seja: o que não pode é dividir um número por zero! O numerador 0 tá liberado!

 

 

 

Sobre:

22 horas atrás, devair1010 disse:

@Wallys Luan WL       invalid  floating point  operation , é por que você colocou para dividir o número zero por algum outro número ,  e isso é impossível na matemática

 

Quase isso... é no Visualg que uma divisão por zero é "impossível", já na matemática, essa impossibilidade existe apenas para os numeradores diferentes de 0. Esses casos também são chamados de "indefinições". Mas se o numerador também for zero (0/0), aí passa ser uma "indeterminação"... que é uma coisa diferente de "impossível".

 

Citando:

22 horas atrás, devair1010 disse:

  se m > 0 entao
    mediam := somaidadem / m// cuidado nas divisões por zero Ímposível !
  fimse
  se f > 0 entao
    mediaf := somaidadef / f// não se pode dividir nenhum número por zero

 

Nesse caso, esses comentários seriam válidos para o Visualg. Na matemática, não necessariamente :)

 

 

 

Sobre:

22 horas atrás, devair1010 disse:

[...] também o escolha só faz quando é igual ao pedido no caso , e como você colocou em maiúsculo , então ele só vai aceitar um maiúsculo e caso o usuário digite minúsculo aí ele falha e não funciona , então é melhor converter a variável pegada no leia para maiúsculo usando o comando 

 

@devair1010, a comparação no Visualg NÃO É case-sensitive. Tanto faz maiúsculo ou minúsculo no escolha/caso.

 

No caso não é necessário "tornar maiúsculo" como no exemplo abaixo:

 

22 horas atrás, devair1010 disse:

escolha maiusc(sexo)//converte para maiúculo p/ poder inserir qq hum

 

O funcionamento das comparações no Visualg é semelhante as nomenclaturas das variáveis. Aqui, por exemplo, tanto faz você usar a variável resposta (como foi declarada) como RESPOSTA, ou RESposTA, ou rEsPoStA etc, que vai funcionar da mesma forma.

 

Att

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

@Simon Viegas     obrigado pelas observações ,  eu não havia testado antes e como estava dando erro , pensei que fosse por isso como em outras linguagens ,  mas agora testei e vi que é isso mesmo que você disse , então editei o poste acima para que fique do jeito certo  . 

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

  • 4 semanas depois...

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