Algoritmo reajustes de salários!!!

Este forum é destinado a perguntas relacionadas a Oracle, mas que não se enquadram nos forums acima. Aqui serão tratadas também sobre outras tecnologias da oracle, como o Workflow, BPEL, Spatial, OCS, etc.
Responder
edu1333
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 31
Registrado em: Sex, 13 Jun 2008 10:49 pm
Localização: São Paulo- SP

Galera, Bom Dia!!!

Sou inicante em lógica de programação e preciso de uma ajuda para resolver um algoritmo, para resolver os reajustes de um salario.
O código é o seguinte?

Selecionar tudo

var
a,r,t,w: real
inicio
// Seção de Comandos 
escreva("Digite o salario: ")
leia(a)
se a <= 500 então
r:= a*(15/100)
escreval(" Seu salário reajustado em 15% é: ", r)
senao se a > 500 e a <= 1000 então
t:= a*(10/100)
escreval(" Seu salário reajustado em 10% é: ", t)
se a > 1000 então
w:= a*(5/100)
escreval(" Seu salário reajustado em 5% é: ", w)
fimse
fimse
O código verfica o reajuste de acordo com o salario, porém quando eu coloco um salario maior que 1000 ele calcula os 10% e 5%, mas não devia pois maior que 1000 é somente os 5%, por favor me ajudem???

Abraços!!!

Eduardo
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Para condições assim, a gente usa o seguinte...

Selecionar tudo

if 1 = 2 then
  (...)
elsif 1 = 3 then
  (...)
elsif 1 = 4 then
  (...)
elsif 1=5 then
  (...)
elsif 1 = 1 then
  (...)
else 
nenhum igual
end if;
No seu caso, você coloca a seguinte rotina... e evita que ele entre em dois if's

Selecionar tudo

var 
a,r,t,w: real 
inicio 
// Seção de Comandos 
   escreva("Digite o salario: ") 
   leia(a) 
se a <= 500 então 
   r:= a*(15/100) 
   escreval(" Seu salário reajustado em 15% é: ", r) 
senao 
   se a > 500 e a <= 1000 então 
      t:= a*(10/100) 
      escreval(" Seu salário reajustado em 10% é: ", t) 
   senao 
      se a > 1000 então 
        w:= a*(5/100) 
        escreval(" Seu salário reajustado em 5% é: ", w) 
      fimse 
   fimse
fimse
Porém, na sua rotina ainda precisa de um ajuste...

1. não precisa usar 3 variaveis, com uma variavel só já é possível fazer o qeu você deseja.

Selecionar tudo

var 
a,r: real 
inicio 
// Seção de Comandos 
   escreva("Digite o salario: ") 
   leia(a) 
se a <= 500 então --Se for menor igual a 500, entre
   a:= a*(15/100) 
   escreval(" Seu salário reajustado em 15% é: ", a) 
senao --se não for menor igual a 500, entre aqui... 
   se a > 500 e a <= 1000 então --Se for maior que 500 e menor igual a 100, entre...
      a:= a*(10/100) 
      escreval(" Seu salário reajustado em 10% é: ", a) 
   senao --senao for maior que 500 e menor igual a 100... 
      se a > 1000 -- então então ele é maior que 1000
        a:= a*(5/100) 
        escreval(" Seu salário reajustado em 5% é: ", a) 
      fimse 
   fimse
fimse
Acho que é isso!
alexrsilva
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 153
Registrado em: Ter, 27 Mai 2008 1:31 pm
Localização: Rio de Janeiro - RJ

Quando se tem poucas opções para validar, o If é uma boa opção. Pense agora que você tenha mais de 10 verificações para fazer?
Utilize o case que diminui o código e fica mais fácil o entendimento para uma futura manutenção.

Selecionar tudo

ler (x);
case x
when 100:
codigo; 
break; dependendo da linguagem
when 200:
codigo;
break;
else
codigo;
end case;
tem o case com limites

Selecionar tudo

case
when x>100 and x< 500 then
codigo;
end case;

Att,

Alex Silva
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante