Ir ao conteúdo
  • Cadastre-se
Wallys Luan WL

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

Compartilhar este post


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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 @Simon Viegas  obrigado pessoal, logo que fiz o tópico encontrei o erro e prontamente corrigir. encontrei em outro tópico no próprio fórum.

obrigado pela a correção e as explicações.

  • 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

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

×
×
  • Criar novo...

Redes de Computadores - Gabriel Torres

PROMOÇÃO DE QUARENTENA

De R$ 39,90 por apenas R$ 9,90 só até as 23h59min desta sexta-feira 03/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!