Ir ao conteúdo
  • Cadastre-se

VisualG Calculo de valor da hora trabalhada


Posts recomendados

Comecei a estudar programação há pouco tempo, então sou bem nova aqui, caso esteja fazendo algo não permitido, apagarei o post. Iniciamos no curso os comandos condicionais de múltipla escolha mas estou com um pouco de dificuldade de compreender a lógica e por isso, queria ajuda para solucionar esse exercício porque vi que os próximos seguem a mesma linha então acredito que se compreender um, já vou conseguir solucionar os seguintes ou ao menos avançar mais. Vou colocar abaixo o exercício, o que consegui até agora e espero que possam me ajudar a entender melhor para eu (finalmente) conseguir solucionar. 🫠

 

Segue o exercício:

Sabendo que uma rede hoteleira deseja informatizar sua folha de pagamento, desenvolva em pseudocódigo uma solução conforme regras apresentadas pela empresa, de acordo com as especificações abaixo:

O funcionário possui os seguintes dados de entrada: código, número de horas trabalhadas no mês, turno de trabalho (M – matutino, V – vespertino ou N – noturno), categoria (F – funcionário, G – gerente).

Faça um algoritmo que:

  • Leia as informações dos funcionários: código (inteiro), número de horas trabalhadas (inteiro) no mês, turno (caractere) e categoria (caractere). Não leia somente o valor da hora trabalhada (real), pois será calculada.
  • Considere sempre a digitação de uma única letra para representar o turno de trabalho e a categoria do funcionário, conforme as tabelas:

image.png.ee7350c49cb52b223a0d74baea273074.png
 

  • Calcule o valor da hora trabalhada, conforme as regras apresentadas na tabela a seguir. O valor do salário mínimo deve ser solicitado pelo algoritmo, pois ele varia de estado para estado e a rede de hotéis está distribuída por todo o País. Utilizar o comando de seleção múltipla (ou um comando escolha e outro pode ser se encadeado – não utilizar se simples para esse item) para testar a categoria e o turno para calcular o valor da hora trabalhada.

image.png.e021fbf79e59e13167021281c3663d55.png

  • Calcule o salário inicial do funcionário com base no valor da hora trabalhada e no número de horas trabalhadas.
  • Calcule o valor do auxílio-alimentação recebido pelo funcionário de acordo com seu salário inicial, conforme a tabela a seguir. Utilizar o comando de seleção composto encadeado.

image.png.3a5e6860b88be083aaeb6502b27743f6.png

  • Imprima como saída o código, número de horas trabalhadas, valor da hora trabalhada, salário inicial, auxílio alimentação e salário final (salário inicial + auxílio-alimentação).

 

  1. Represente uma solução no VisuAlg para o problema descrito em forma de pseudocódigo para simular a folha da empresa. Entregue o arquivo .alg desenvolvido.
  2. Realize o teste para as seguintes entradas:

 image.png.290ea5f38f6f048b9f82c4898a0de2c3.png

Com salário mínimo de R$ 780,00


O que consegui até agora: 

Algoritmo "Folha"
Var
   codigo      :inteiro  //codigo do funcionário
   horas_trab  :inteiro  //número de horas trabalhadas
   turno       :caractere //turno de trabalho
   categoria   :caractere //categoria do funcionário
   sal_minimo  :real     //salario minimo
   valor_hora  :real     //valor da hora trabalhada
   sal_inicial :real     //valor salario inicial
   aux_aliment :real     //valor do auxílio alimentação
   sal_final   :real     //valor do salário final

i: inteiro     //i do comando de repetição
Inicio
para i <-1 ate 400 faca
   //leitura de dados do funcionário
   Escreval("Digite o codigo do funcionario:")
   Leia(codigo)
   Escreval("Digite o numero de horas trabalhadas no mês:")
   Leia(horas_trab)
   Escreval("Informe a categoria do (G-Gerente, F-Funcionario)")
   Leia(categoria)
   Escreval("Digite o turno de trabalho (M-Matutino, V-Vespertino, N-Noturno)")
   Leia(turno)
   Escreval("Digite o valor do salario minimo:")
   Leia(sal_minimo)

   Se (categoria = "G") e (turno = "N")então
      valor_hora <- sal_minimo * 0.06
   fimse
   se (categoria = "G") e (turno = "M")então
      valor_hora <- sal_minimo * 0.04
   fimse
   se (categoria = "G") e (turno = "V")então
      valor_hora <- sal_minimo * 0.04
   fimse
   se (categoria = "F") e (turno = "N")então
      valor_hora <- sal_minimo * 0.02
   fimse
   se (categoria = "F") e (turno = "M")então
      valor_hora <- sal_minimo * 0.01
   fimse
   se (categoria = "F") e (turno = "V")então
      valor_hora <- sal_minimo * 0.01
   fimse

   //form calcular o salario inicial
   sal_inicial <- horas_trab * valor_hora

   escolha (sal_inicial)
      {Caso 0 ate 780} 
      Caso 0 ate 780
         aux_aliment <- sal_inicial * 0.25
      Caso 781 ate 1200
         aux_aliment <- sal_inicial * 0.20
      Caso 1201 ate 9999999
         aux_aliment <- sal_inicial * 0.15
      outrocaso
         escreval ("Opção Invalida")
   fimescolha
   sal_final  <- sal_inicial + aux_aliment
   Escreval("Codigo:",codigo," Horas Trabalhadas:",horas_trab)
   Escreval("Valor da Hora Trabalhada:",valor_hora," Salario Inicial:",sal_inicial)
   Escreval("Auxilio Alimentação:",aux_aliment," Salario Final:",sal_final)
fimpara
Fimalgoritmo

 

Cheguei até aí mas tem algo dando errado e não consigo mais avançar. 😞
Também aceito dicas de vídeos ou sites para aprender mais sobre. 

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

  • Membro VIP
14 horas atrás, ElliePJ disse:

Cheguei até aí mas tem algo dando errado e não consigo mais avançar. 😞

 

O que está dando errado?

 

Para achar uma solução de um problema, é preciso definir qual é o problema... 🙂

 

Para adiantar, sugiro o seguinte: crie uma planilha com os dados dos testes e adicione também os respectivos resultados esperados, algo como:

 

image.png

 

Aí executar o programa e compara os dados... Identifique qual problema seria e busca corrigir. Se for outra coisa, tenta demonstrar o que é...

 

 

Adendo:

15 horas atrás, ElliePJ disse:
   Escreval("Digite o codigo do funcionario:")
   Leia(codigo)
   Escreval("Digite o numero de horas trabalhadas no mês:")
   Leia(horas_trab)
   Escreval("Informe a categoria do (G-Gerente, F-Funcionario)")
   Leia(categoria)
   Escreval("Digite o turno de trabalho (M-Matutino, V-Vespertino, N-Noturno)")
   Leia(turno)
   Escreval("Digite o valor do salario minimo:")
   Leia(sal_minimo)

 

Sugiro deixar na ordem do enunciado, ou seja, o turno vem antes da categoria.

 

Adendo 2:

15 horas atrás, ElliePJ disse:
      outrocaso
         escreval ("Opção Invalida")

 

Essa validação não faz parte do enunciado, basta remover.

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

6 horas atrás, Simon Viegas disse:

O que está dando errado?

 

Para achar uma solução de um problema, é preciso definir qual é o problema... 🙂

Acredito que estou errando na hora parte da estrutura, com o se e então, ou até mesmo na parte de escolha. Não sei se é realmente isso mas acredito que seja. Quando tentei, os cálculos chegavam apenas a zero. 
Realizei as alterações dos adendos, agora vou fazer a planilha com os dados e ver se consigo encontrar a causa para correção.

Obrigada!!

 

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

  • Membro VIP
Em 22/11/2023 às 21:18, ElliePJ disse:

Acredito que estou errando na hora parte da estrutura, com o se e então, ou até mesmo na parte de escolha. Não sei se é realmente isso mas acredito que seja. Quando tentei, os cálculos chegavam apenas a zero. 

 

Pronto! Já temos um norte! "Os resultados estão dando 0". Poderia ter mandando um print da tela para analisar melhor, mas vamos lá...

 

Peguei o código e inseri os dados da primeira linha dos testes:

 

image.png

 

Não saiu zerado. 🙂

 

 

Provavelmente está informando os dados errados: 

 

Em 22/11/2023 às 14:28, Simon Viegas disse:

[...] o turno vem antes da categoria.

 

Exemplo informando errado:

image.png

 

Aí vai sair zerado mesmo... 

 

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

  • 4 meses depois...

Boa tarde, estou com o mesmo problema na atividade e mesmo assim não aparece o resultado final, apenas uma parte dele

 

Var
   codigo, horas_trab :inteiro
   turno, categoria :caractere
   sal_minimo, valor_hora, sal_inicial, aux_aliment, sal_final  :real

Inicio
    Escreval("Digite o codigo do funcionario:")
   Leia(codigo)
   Escreval("Digite o numero de horas trabalhadas no mês:")
   Leia(horas_trab)
    Escreval("Digite o turno de trabalho (M-Matutino, V-Vespertino, N-Noturno)")
   Leia(turno)
   Escreval("Informe a categoria do (G-Gerente, F-Funcionario)")
   Leia(categoria)
   Escreval("Digite o valor do salario minimo:")
   Leia(sal_minimo)

   Se (categoria = "G") e (turno = "N")então
      valor_hora <- sal_minimo * 0.06
   fimse
   se (categoria = "G") e (turno = "M")então
      valor_hora <- sal_minimo * 0.04
   fimse
   se (categoria = "G") e (turno = "V")então
      valor_hora <- sal_minimo * 0.04
   fimse
   se (categoria = "F") e (turno = "N")então
      valor_hora <- sal_minimo * 0.02
   fimse
   se (categoria = "F") e (turno = "M")então
      valor_hora <- sal_minimo * 0.01
   fimse
   se (categoria = "F") e (turno = "V")então
      valor_hora <- sal_minimo * 0.01
   fimse
   
   sal_inicial <- horas_trab * valor_hora

   escolha (sal_inicial)
      Caso 0 ate 780
         aux_aliment <- sal_inicial * 0.25
      Caso 781 ate 1200
         aux_aliment <- sal_inicial * 0.20
      Caso 1201 ate 9999999
         aux_aliment <- sal_inicial * 0.15
   fimescolha
   sal_final  <- sal_inicial + aux_aliment
   Escreval("Codigo:",codigo," Horas Trabalhadas:",horas_trab)
   Escreval("Valor da Hora Trabalhada:",valor_hora," Salario Inicial:",sal_inicial)
   Escreval("Auxilio Alimentação:",aux_aliment," Salario Final:",sal_final)
fimpara

Fimalgoritmo

 

Estou tentando a horas achar o erro, mas parece q e impossível. me ajudem pelo menos a enteder o problema

ajuda plz.png

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

@Sants_021       o enunciado diz que é apenas um funcionário :

Em 21/11/2023 às 23:49, ElliePJ disse:

O funcionário possui os seguintes dados

e sendo assim diferente do código da @ElliePJ seu código está certo seguindo fielmente o que diz o enunciado e está funcionando bem , mas precisa deletar essa linha 

Escreval("Auxilio Alimentação:",aux_aliment," Salario Final:",sal_final)
fimpara // <----------  essa linha Aqui, pois não tem o outro comando, o "para" 

Fimalgoritmo

e informar os dados certos conforme citados por @Simon Viegas   ,  e seguindo a ordem em que  for pedidos ,          o restante tudo certo , basta digitar os dados corretos na entrada e sairá todos os resultados .     e seu código modificado , sem o "fimpara" ,    ficou assim :

Algoritmo "valor de horas trab"
Var
   codigo, horas_trab       : inteiro
   turno, categoria         : caractere
   sal_minimo, valor_hora   : real
   sal_inicial, aux_aliment : real
   sal_final                : real
Inicio
                                      // entrada dos Dados
  Escreval("Digite o codigo do funcionario:"                  )
  Leia    ( codigo     )
  Escreval("Digite o numero de horas trabalhadas no mês:"     )
  Leia    ( horas_trab )
  Escreval("Digite o turno de trabalho (M-Matutino, V-Vespertino, N-Noturno)")
  Leia    ( turno      )
  Escreval("Informe a categoria do (G-Gerente, F-Funcionario)")
  Leia    ( categoria  )
  Escreval("Digite o valor do salario minimo:"                )
  Leia    ( sal_minimo )
                                      // calcular o valor da hora trabalhada
  Se (categoria = "G") então          // categoria igual G
    se (turno = "N")então             // horArio noturno
      valor_hora <- sal_minimo * 0.06
    senao                             // horArio vespertino ou matutino
      valor_hora <- sal_minimo * 0.04
    fimse
  senao                               // categoria igual  F
    se (turno = "N")então             // horArio noturno
      valor_hora <- sal_minimo * 0.02
    senao                             // horArio vespertino ou matutino
      valor_hora <- sal_minimo * 0.01
    fimse
  fimse
                                      // calcular o salArio inicial
  sal_inicial <- horas_trab * valor_hora
                                      // calcuLar o ticket AlimentaCAo
  escolha (sal_inicial)
  Caso 0 ate 800                      // para salArio até 800
    aux_aliment <- sal_inicial * 0.25
  Caso 801 ate 1200                   // para salArio De 801 até 1200
    aux_aliment <- sal_inicial * 0.20
  outrocaso                           // para salArio acima De 1200
    aux_aliment <- sal_inicial * 0.15
  fimescolha
                                      // calcular o salArio FinaL
  sal_final  <- sal_inicial + aux_aliment
                                      // Mostrar os ResuLtados
  Escreval("Codigo Do Funcionário ----: " , codigo     )
  escreval("Horas Trabalhadas --------: " , horas_trab )
  Escreval("Valor da Hora Trabalhada -: " , valor_hora )
  EscrevaL("Salario Inicial ----------: " , sal_inicial)
  EscrevaL("Auxilio Alimentação ------: " , aux_aliment)
  EscrevaL("Salario Final ------------: " , sal_final  )
                                      // fim, pois Eh apenas um FuncionArio
                                      // para mais funcionArios use um laCo
                                      // de repetiCAo que pode ser o "Repita/ate"
Fimalgoritmo

visualg_cod_sants_021.jpg.07e4bce1a4e735e8007b369cd5dd4119.jpg

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

  • Membro VIP

Opa! Vou tentar detalhar alguns pontos.

 

 

Em 11/04/2024 às 17:50, Sants_021 disse:

Estou tentando a horas achar o erro, mas parece q e impossível.

 

Testei nas versões 2.5.1920, 3.0.6.5 e 3.0.7.0 do VisualG, e todos apresentaram o mesmo erro.

 

Segue tela de teste:

image.png.9fe8dc9601c712076e25b7e35598b1a9.png

Tela com resultado da execução mostrando o resultado final, mas com uma tela de aviso sobrepondo a tela anterior, indicando que encontrou o erro "FIMPARA sem PARA correspondente."

 

Ou seja: exatamente o sugerido por @devair1010:

Em 11/04/2024 às 22:30, devair1010 disse:
Escreval("Auxilio Alimentação:",aux_aliment," Salario Final:",sal_final)
fimpara // <----------  essa linha Aqui, pois não tem o outro comando, o "para" 

Fimalgoritmo

 

Para resolver esse erro, antes um dica: sempre que for programando, vá pressionando Ctrl+G no VisualG para efetuar a indentação automática (o ideal é meio que já programar deixando indentando também). Com isso, ficará bem visível que tinha "algo a mais". Veja:

 

image.png.9ebbb5803c99eea079bf19ef5cc50604.png

Print de tela indicando menu, do VisualG, onde consta a item "Indentação Ctrl+G"

 

 

image.png.0a1d25f6ae4f0fc20bba863ab7f6a5fd.png

Print de tela destacando o comando fimpara na linha 52

 

Ou seja: o fimpara está recuado "um dente" para esquerda, ao procurar nas linhas de cima (na mesma coluna), não encontra o respectivo comando para, logo, precisa corrigir... que seria simplesmente remover a linha ou eventualmente inserir o tal para, se fosse o caso.

 

 

RESUMINDO: provavelmente, OU esqueceu de inserir o trecho o para no código:

Em 21/11/2023 às 23:49, ElliePJ disse:
para i <-1 ate 400 faca

 

OU esqueceu de remover o fimPara quando decidiu remover o comando supracitado... 🙂

 

 

 

Outro ponto importante que tinha passado... Essa estrutura escolha abaixo não existe (pelo menos até onde me lembro e pesquisei):

Em 11/04/2024 às 17:50, Sants_021 disse:

   escolha (sal_inicial)
      Caso 0 ate 780
         aux_aliment <- sal_inicial * 0.25
      Caso 781 ate 1200
         aux_aliment <- sal_inicial * 0.20
      Caso 1201 ate 9999999
         aux_aliment <- sal_inicial * 0.15
   fimescolha

 

Ou seja: o escolha não funciona para "faixas de valores", mas sim apenas para "lista de valores" (separados por ",", caso exista mais de um). Não tem isso de "x até y" para os casos. É assim no Pascal (pai do VisualG), seria assim no VisualG. Tá rodando, mas não necessário está executando corretamente. O código estaria apresentando problemas no VisualG... Tenho 94.7% de certeza disso. Favor me corrijam se estiver enganado... Em outras palavras, poderia utilizar a estrutura se e/ou se/senao. Veja:

 

 

 

algoritmo "Folha"
var
   codigo, horas_trab :inteiro
   turno, categoria :caractere
   sal_minimo, valor_hora, sal_inicial, aux_aliment, sal_final :real

inicio
   escrevaL("Digite o codigo do funcionario:")
   leia(codigo)
   escrevaL("Digite o numero de horas trabalhadas no mês:")
   leia(horas_trab)
   escrevaL("Digite o turno de trabalho (M-Matutino, V-Vespertino, N-Noturno)")
   leia(turno)
   escrevaL("Informe a categoria do (G-Gerente, F-Funcionario)")
   leia(categoria)
   escrevaL("Digite o valor do salario minimo:")
   leia(sal_minimo)

   se (categoria = "G") e (turno = "N")então
      valor_hora <- sal_minimo * 0.06
   fimSe

   se (categoria = "G") e (turno = "M")então
      valor_hora <- sal_minimo * 0.04
   fimSe

   se (categoria = "G") e (turno = "V")então
      valor_hora <- sal_minimo * 0.04
   fimSe

   se (categoria = "F") e (turno = "N")então
      valor_hora <- sal_minimo * 0.02
   fimSe

   se (categoria = "F") e (turno = "M")então
      valor_hora <- sal_minimo * 0.01
   fimSe

   se (categoria = "F") e (turno = "V")então
      valor_hora <- sal_minimo * 0.01
   fimSe

   sal_inicial <- horas_trab * valor_hora

   se (sal_inicial >= 0) E (sal_inicial <= 800) então
      aux_aliment <- sal_inicial * 0.25
   fimSe

   se (sal_inicial > 800) E (sal_inicial <= 1200) então
      aux_aliment <- sal_inicial * 0.20
   fimSe

   se (sal_inicial > 1200) então
      aux_aliment <- sal_inicial * 0.15
   fimSe

   sal_final  <- sal_inicial + aux_aliment

   escrevaL("Codigo: ", codigo:1, " Horas Trabalhadas: ", horas_trab:1)
   escrevaL("Valor da Hora Trabalhada: ", valor_hora:1:2, " Salario Inicial: ", sal_inicial:1:2)
   escrevaL("Auxilio Alimentação: ", aux_aliment:1:2, " Salario Final: ", sal_final:1:2)
fimAlgoritmo

 

 

Pontos para verificar posteriormente:

  1. a verificação de turnos "M" e "V" podem ser agrupados em uma verificação só, do jeito que está, está "duplicando código";
  2. como existem condições mutuamente excludentes entre si nessas sequências de se, poderia utilizar estruturas com conjuntos de se/senão, em vez de um monte de se isolados.

 

 No aguardo.

  • Obrigado 1
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!