Ir ao conteúdo
  • Cadastre-se

VisualG Como invalidar uma entrada?


Posts recomendados

Segue em anexo a imagem, e destacado em vermelho a minha dúvida.

 

Acontece que eu quero que não seja possível colocar números na variável cargo, pois o algoritmo funciona colocando números, por causa da última estrutura condicional

Citação

senao
  salnovo <- sal*1.4

 

O que eu fiz de errado e como seria uma solução sem alterar muito meu algoritmo e seguindo  a minha linha de raciocínio.

Screenshot_1.png

adicionado 4 minutos depois

image.png.8fed73383c9e0539ff8dcbcf0cf0f82d.png

Esse é o erro que dá.

adicionado 34 minutos depois

atualizando - consegui fazer porém mudei totalmente o código. quero uma solução com a estrutura condicional "se".

 

image.png.14a02174bc34af0b238c444df073259c.png

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

@JaoProgramador    o visualG é um compilador para iniciantes iniciais ,  não serve para nenhum projeto , é apenas para se acostumar com programação ,  o que faz cada comando , como funciona e como montar um código , e ele não tem  funções mais sofisticadas , pra detectar qual tipo de dado foi inserido pelo usuário ,  então você pode criar uma função sua própria mesmo ,  usando os  comando  do visualg ,  e um modo de fazer isso poderia ser  assim     :

Algoritmo "dado invalido"
Var
  cargo         : caractere
  a,sal,salnovo : inteiro
Inicio
  escreva("Digite o cargo do Funcionario ")
  leia(cargo)
  para a de 1 ate compr(cargo) faca
    se (asc(copia(cargo,a,1))>47) e (asc(copia(cargo,a,1))<58) entao
      escreval("dado Inválido ! . . .")
      interrompa
    fimse
  fimpara
  escreva("Digite o salario do funcionario ")
  leia(salario)
  se cargo = "gerente" entao
    salnovo := sal * 1.1
  senao
    se cargo = "engenheiro" entao
      salnovo := sal * 1.2
    senao
      se cargo = "técnico" entao
        salnovo := sal * 1.3
      senao
        salnovo := sal * 1.4
      fimse
    fimse
  fimse
  escreval("SALÁRIO ANTIGO -: ",sal          )
  escreval("NOVO SALÁRIO ---: ",salnovo      )
  escreval("DIFERENÇA ------: ",salnovo - sal)
Fimalgoritmo

 

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

  • Membro VIP

@JaoProgramador, seja bem vindo ao Fórum do Clube do Hardware.

 

Sobre:

23 horas atrás, JaoProgramador disse:

Acontece que eu quero que não seja possível colocar números na variável cargo, pois o algoritmo funciona colocando números, por causa da última estrutura condicional

Citação


senao
  salnovo <- sal*1.4

 

O que eu fiz de errado e como seria uma solução sem alterar muito meu algoritmo e seguindo  a minha linha de raciocínio.

 

Este senao não está necessariamente relacionado ao uso de números... na verdade, QUALQUER texto digitado que não se encaixe nas 3 opções anteriores vai cair nesse senão, ou seja: tudo que não for exatamente escrito como "GERENTE", "ENGENHEIRO" ou "TÉCNICO"  vai cair no 4º caso... que seria o equivalente ao "OUTRO". (Obs.: no VisualG, não faz diferença para maiúsculo e minúsculo, com exceção das letras com acento).

 

Caso queira forçar que digite necessariamente uma das 4 opções, poderia fazer algo como:

inicio
escreval("-----------------------------------------------")
escreval("CARGOS => GERENTE, ENGENHEIRO, TÉCNICO OU OUTRO")
escreval("-----------------------------------------------")
escreva ("Digite o cargo do funcionário: ")
leia(cargo)
se (cargo <> "GERENTE") e (cargo <> "ENGENHEIRO") e (cargo <> "TÉCNICO") e (cargo <> "OUTRO") entao
   escreval("Cargo inválido")
   fimAlgoritmo
fimSe

Se não for algum dos 4 textos válidos para o contexto, o programa vai finalizar. Se colocar, por exemplo, "TECNICO" (sem acento), não vai aceitar! O "nome da profissão" tem que está exatamente igual.

 

 

 

 

Sobre:

23 horas atrás, JaoProgramador disse:

atualizando - consegui fazer porém mudei totalmente o código. quero uma solução com a estrutura condicional "se".

 

Como citado anteriormente, a existência de número ou não no texto não é necessariamente o problema, mas sim todo e qualquer texto que não esteja exatamente como está nas condições (lembrando que maiúsculas e minúsculas no VisuaG não tem diferença). Daí, a lógica utilizando caractere ou utilizando inteiro é a mesma: "só vai funcionar se informar um valor igual as 4 opões válidas". Observe como o se do teu segundo código está análogo ao do meu código acima... apenas utilizei caractere (aí precisando das aspas duplas).

 

Já em relação a estrutura de seleção, se você quer utilizar se/entao, em vez de escolha/caso, basta usá-lo... assim como usou quando era caractere. Algo como:

 

se (cargo = 101) entao
  salNovo <- sal*1.1
senao
  se (cargo = 102) entao
    salNovo <- sal*1.2
  senao
    se (cargo = 103) entao
      salNovo <- sal*1.3
    senao
        salNovo <- sal*1.4
    fimSe
  fimSe
fimSe

 

 

RESUMINDO:

- estava caindo no "sal*1.4" para qualquer coisas diferente do que exatamente* eram as opções anteriores;

- tanto usando caractere, tanto usando inteiro, pode usar o se também.

adicionado 5 minutos depois

Uma outra forma seria ficar lendo até que informe um valor válidos, ex.:

algoritmo "Dado inválido"
var
  cargo       : caractere
  salario     : real
  salarioNovo : real

inicio
cargo <- ""
enquanto ((cargo <> "GERENTE") e (cargo <> "ENGENHEIRO") e (cargo <> "TÉCNICO") e (cargo <> "OUTRO")) faca
  LimpaTela()
  escreval("-----------------------------------------------")
  escreval("CARGOS => GERENTE, ENGENHEIRO, TÉCNICO OU OUTRO")
  escreval("-----------------------------------------------")
  escreva ("Digite o cargo do funcionário: ")
  leia(cargo)
fimEnquanto
//...




fimAlgoritmo


Utilizando código é a mesma lógica... basta adaptar para inteiro e usar os valores correspondentes.

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

@Simon Viegas valeu, ajudou demais

adicionado 0 minutos depois

@devair1010 valeu, ajudou demais

adicionado 31 minutos depois

Vocês sabem como faz pra invalidar uma entrada real, por exemplo só quero que entre numeros inteiros. Se vir um numero real aí eu mostro uma mensagem.

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

  • Membro VIP
2 horas atrás, JaoProgramador disse:

Vocês sabem como faz pra invalidar uma entrada real [?], por exemplo só quero que entre numeros inteiros. Se vir um numero real aí eu mostro uma mensagem.

 

No VisualG meio que não precisa.. ele vai pega a parte inteira. Se não tiver parte inteira, vai ficar 0.

 

Faça testes.

adicionado 4 minutos depois

...e se não quiser 0, coloque para ler um novo número. Por aí vai. De um modo geral vai depender da necessidade.

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

@JaoProgramador    você pode usar a mesma lógica do outro caso , e verificar se foi digitado ponto e também se foi digitado vírgula , que indicam que seja um número real ,  e isso poderia ser assim  :

Algoritmo "so inteiros"
Var
  a    : inteiro
  c    : caractere
  flag : logico
Inicio
  repita
    escreva("um numero inteiro ")
    leia(c)
    flag := falso
    para a de 1 ate compr(c) faca
      se ( copia(c,a,1) = "." ) ou (copia(c,a,1) = "," ) entao
        escreval("Não Pode Ser Número Real ! . . .")
        escreval("O Número Digitado Foi -> ",c)
        flag := verdadeiro
        interrompa
      fimse
    fimpara
    se nao flag entao
      a := caracpnum(c)
      escreval("O Número Inteiro é -> ",a)
    fimse
    escreva("Outro Número S/N ")
    leia(c)
  ate maiusc(c) = "N"
  // aqui , nesse caso , ele faz distinção de maiúsculo e minúsculo
Fimalgoritmo

 

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!