Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
  • Membro VIP
Postado

@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
  • Membro VIP
Postado
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
Postado

@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

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!