Ir ao conteúdo
  • Cadastre-se

algoritmo para ler um numero desconhecido de operários


Posts recomendados

Boa noite, estou com um problema para resolver essa parte do exercício:

 

"Escreva um algoritmo que leia os dados de um número desconhecido de  operários, e calcule e exiba na tela o valor do salário final recebido no final do mês para  cada operário."

eu preciso fazer isso sem adicionar vetores, somente com comandos de repetição, como é um numero desconhecido de operários, preciso que as variáveis vão se acumulando e depois mostre o resultado, mas na estrutura de repetição toda vez que faço isso acabo atualizando a variável e perco o item anterior, estou quebrando a cabeça mais não estou conseguindo fazer essa parte, se poderem me ajudar agradeceria.

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

  • Moderador

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

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

@DiF desculpe, essa não era a intenção, é que o enunciado do exercício era muito grande, então resolvi postar só a parte aonde estava com duvidas, más vou postar inteiro para ter mais noção do problema.

adicionado 0 minutos depois

@Simon Viegasé em visualg, vou postar o enunciado e até onde fiz para poderem avaliar melhor.

adicionado 17 minutos depois

4) Numa fábrica, trabalham homens e mulheres divididos em 3 classes:

A - os que fizeram até 30 peças no mês

B - os que fizeram de  31 a 35 peças no mês

C - os que fizeram mais de 35 peças no mês

Os operários de classe A devem receber um salário-base  (R$ 888,00).

Os operários de classe B devem receber um salário-base  (R$ 888,00), mais 3% do salário-base para cada  peça  acima das 30 iniciais.

Os operários de classe C devem receber um salário-base  (R$ 888,00), mais 5% do salário-base para cada  peça  acima das 30 iniciais

 

Escreva um algoritmo que leia os dados de um número desconhecido de  operários, e calcule e exiba na tela o valor do salário final recebido no final do mês para  cada operário.

Os dados de um operário são:

·       número de matrícula  do operário

·       número de peças fabricadas pelo operário no mês

·       sexo do operário (1 para sexo masculino, 2 para sexo feminino)

O indicador de fim de dados (flag) é um “operário” com número de matrícula igual a zero.

O algoritmo deve calcular e exibir também :

·       o total dos salários pagos pela fábrica;

·       o número de operários em cada uma das três classes (A, B e C);

·       o número de operários de sexo masculino na classe C;

·       o número de operários de sexo feminino na classe A ;

·       o maior e o menor salário pago com o nome, o sexo e a classe desses operários.  (Em caso de empate, exiba a informação de apenas um destes operários. Não utilize vetores para armazenar informações)

 

Estou totalmente perdido, faz muito tempo que estou quebrando a cabeça e não consigo resolver, o enunciado pede que o código leia um numero desconhecido de operários, então ficaria a critério do usuário o numero de operários, depois calcular e exibir o valor do salário de todos na tela, não sei como acumular vários valores sendo que toda vez que adicionar um novo operário a variável iria se atualizar e não acumularia todos os valores. Outro problema é que acima das 35 peças o operário iria ganhar 5% a mais do salário base, e não sei como linkar um numero que será variado de peças para adicionar 5% a cada peça feita. Queria a ajuda de vocês se possível, más não para fazer o exercício para mim e sim para dar um luz nessas partes citadas acima, a partir dessa luz eu vou me virando, abaixo segue até onde consegui desenvolver.

A,B,C,sex,matri,peças,salarioA,salarioB,salarioC : inteiro
nome : caracter


Inicio
   repita
      escreval("Digite o nome do operário : ")
      leia(nome)
      escreval("Digite o número da matricula do operário : ")
      leia(matri)
      Escreval("Digite o número de peças feitas pelo operário : ")
      leia(peças)
      Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
      leia(sex)
      Escolha (peças)

      Se (peças <= 30) então
      A <- A+1
      fimse
      Se (peças >= 31) ou (peças <= 35) então
      B <- B+1
      fimse
      Se (peças >= 36) então
      C <- C+1
      
      salarioA <- 880
      
      se (peças = 31) então
      salarioB <- 880 + (880 * 3/100)
      fimse
      se (peças = 32) então
      salarioB <- 880 + (880 * 6/100)
      fimse
      se (peças = 33) então
      salarioB <- 880 + (880 * 9/100)
      fimse
      se (peças = 34) então
      salarioB <- 880 + (880 * 12/100)
      fimse
      se (peças = 35) então
      salarioB <- 880 + (880 * 15/100)
      fimse

 

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

@Tuufee      seria bom se você postasse  o resto do código, mas aqui nesse trecho

que você postou,tem um erro de sintaxe ali no comando escolha você precisa colocar caso assim

escolha peças
  caso  <= 30
      A <- A+1
  caso  ...
      .....
        .
        .
fimescolha  

para fazer esse algoritmo sem usar vetores é difícil, realmente precisa de uma variável para cada operário então se for uns cinco operários ainda dá para fazer, porém se forem muitos aí fica impraticável.

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

Boa noite, consegui progredir no código, más agora só me faltão 3 coisas parar terminar:

1 - é que não consigo linkar o resultado do "escolha caso" no valor do salário final do operário.

2 - não consigo usar aquele comando para dar espaços iguais no resultado, para criar um resultado mais bonito, alinhado, já tentei usar ele varias  vezes e não deu os espaços.

3 - quando no "escolha caso" é inserido o numero 36 o visualg buga, se alguém souber me dizer porque, vou postar uma foto.

Var
A,B,C,sex,matri,pecas,porc,total,totalOP,MC,FA,maior,menos: inteiro
nome : caracter
salarioA, salarioB, salarioC : real


Inicio
repita
      escreval("Digite o nome do operário : ")
      leia(nome)
      escreval("Digite o número da matricula do operário : ")
      leia(matri)
      se (matri = 0) então
      interrompa
      fimse
      Escreval("Digite o número de peças feitas pelo operário : ")
      leia(pecas)
      Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
      leia(sex)
      Escolha  pecas
             caso <= 30
             salarioA <- 888
             Se (sex = "2") então
             FA <- +1
             fimse
             
             A <- A+1
             
             caso = 31
             salarioB <- 888 + (888 * 3/100)
             B <- +1
             
             caso = 32
             salarioB <- 888 + (888 * 6/100)
             B <- +1
             
             caso = 33
             salarioB <- 888 + (888 * 9/100)
             B <- +1
             
             caso = 34
             salarioB <- 888 + (888 * 12/100)
             B <- +1
             
             caso = 35
             salarioB <- 888 + (888 * 15/100)
             B <- +1
             
             caso >= 36
             Se (sex = "1") então
             MC <- +1
             fimse
             C <- +1
             
             porc <- (pecas - 30) * 5
             salarioC <- 888 + (888 * porc/100)
             
             total <- salarioA + salarioB + salarioC
             totalOP <- A + B + C
      fimescolha
      
      Escreval("Numero da matrícula do operário é ",matri)
      Escreval("Número de peças fabricadas é ",pecas)
      Se (sex = 1) então
      Escreval("O sexo do operário é Masculino ")
      fimse
      Se (sex = 2) então
      escreval("O sexo do operário é Feminino ")
      fimse
      Escreval("O Salário final do operário é ")

      
 ate (matri = 0)


     Escreval ("O total de salários pagos pela fábrica é ",total)
     Escreval ("O número de operários em cada classe é ",totalOP)
     Escreval ("O número de operários masculinos na classe C é ",MC)
     Escreval ("O número de operários feminino na classe A é ",FA)

 

bug.png

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

  • Membro VIP

Olá @Tuufee.

 

1) INDENTAÇÃO DE CÓDIGO

É de suma importância que todo o código sempre esteja sempre bem identado...

Inicialmente levanto 2 pontos interessantes para o seu código.

 

a ) quantidade de espaços

Eu particularmente sugiro utilizar 2 ou 3... a uma dica bem interessante que facilita a configuração, veja:

 

Clique no menu "manutenção/configuração". Na guia "Editor", deixe desmarcado "Usar tabulação inteligente". E escolha em "Largura de Tabulação" a quantidade de espaços.
 

visualg_confguracao_tab.jpg

 

 

b ) padrões de indentação

Não existe um padrão único para indentar, mas devem sempre seguir uma lógica. Por exemplo:

7 horas atrás, Tuufee disse:

      Escolha  pecas
             caso <= 30
             salarioA <- 888
             Se (sex = "2") então
             FA <- +1
             fimse
             
             A <- A+1
             
             caso = 31

 

A terceira linha deveria ficar "um dente para frente", pois ela está "dentro do "caso <=30"... da mesma forma que o "caso<=30" está uma casa a frente em relação a "Escolha pecas".

 

No padrão que eu uso (e estou sugerindo/recomendando), ficaria assim:
 

   Escolha  pecas
      caso <= 30
         salarioA <- 888
         Se (sex = "2") então
            FA <- +1
         fimse
         A <- A+1
      caso = 31
         salarioB <- 888 + (888 * 3/100)
         B <- +1

Observe esse trecho e compare com o seu código original.. perceba que só com o recurso visual, já conseguimos entender a estrutura do trecho...

 

 

 

Abaixo segue seu código reindentenado
 

algoritmo "aa"
Var
A,B,C,sex,matri,pecas,porc,total,totalOP,MC,FA,maior,menos: inteiro
nome : caracter
salarioA, salarioB, salarioC : real


Inicio
repita
   escreval("Digite o nome do operário : ")
   leia(nome)
   escreval("Digite o número da matricula do operário : ")
   leia(matri)
   se (matri = 0) ENTÃO
      interrompa
   fimse
   Escreval("Digite o número de peças feitas pelo operário : ")
   leia(pecas)
   Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
   leia(sex)
   Escolha  pecas
      caso <= 30
         salarioA <- 888
         Se (sex = "2") ENTÃO
            FA <- +1
         fimse
         A <- A+1
      caso = 31
         salarioB <- 888 + (888 * 3/100)
         B <- +1
      caso = 32
         salarioB <- 888 + (888 * 6/100)
         B <- +1
      caso = 33
         salarioB <- 888 + (888 * 9/100)
         B <- +1
      caso = 34
         salarioB <- 888 + (888 * 12/100)
         B <- +1
      caso = 35
         salarioB <- 888 + (888 * 15/100)
         B <- +1
      caso >= 36
         Se (sex = "1") ENTÃO
            MC <- +1
         fimse
         C <- +1
         porc <- (pecas - 30) * 5
         salarioC <- 888 + (888 * porc/100)
         total <- salarioA + salarioB + salarioC
         totalOP <- A + B + C
      fimescolha
   Escreval("Numero da matrícula do operário é ",matri)
   Escreval("Número de peças fabricadas é ",pecas)
   Se (sex = 1) ENTÃO
      Escreval("O sexo do operário é Masculino ")
   fimse
   Se (sex = 2) ENTÃO
      escreval("O sexo do operário é Feminino ")
   fimse
   Escreval("O Salário final do operário é ")
ate (matri = 0)
Escreval ("O total de salários pagos pela fábrica é ",total)
Escreval ("O número de operários em cada classe é ",totalOP)
Escreval ("O número de operários masculinos na classe C é ",MC)
Escreval ("O número de operários feminino na classe A é ",FA)
fimAlgoritmo

 

 

 

2) ATRIBUIÇÃO DE VALORES

O VisuAlg, que eu saiba, não reconhece essa sintaxe:
 

8 horas atrás, Tuufee disse:

B <- +1

 

Ou seja, é necessário fazer o mesmo que foi feito com o A lá no "caso <= 30".

B<-B+1

O mesmo vale para as outras partes com o mesmo erro ("esqueceu de colocar a variável que vai fazer a soma no lado direito").

 

 

2) REANALISANDO O CÓDIGO

Eu não parei para analisar as suas falhas relatadas em si, mas no trecho abaixo acho que tem algo errado:

      caso >= 36
         Se (sex = "1") ENTÃO
            MC <- +1
         fimse
         C <- +1
         porc <- (pecas - 30) * 5
         salarioC <- 888 + (888 * porc/100)
         total <- salarioA + salarioB + salarioC
         totalOP <- A + B + C
   fimEscolha

Ou seja, ao indentar, visualmente ficou claro que essas contas estão apenas dentro do "caso>=36"... teoricamente deveriam ficar em algum lugar depois do fimEscolha, ou seja, primeiro coleta dos dados (o "escolha" está apenas ajudando a "escolher os dados"), depois faz as contas!

 

 

***

 

No aguardo.

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

@Simon Viegas Muito obrigado pelas dicas, to começando agora e ainda to meio perdido na indentação, vou começar a indentar conforme você explicou, realmente fica muito melhor. As variáveis realmente estavam erradas, já arrumei a soma, e também o "caso", mais ainda estou meio perdido nas questões que citei acima.

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

@Simon ViegasEstou com dúvida de como linko o resultado do "escolha caso" no resultado do salario do operário, segue o código.

algoritmo "aa"
Var
A,B,C,sex,matri,pecas,porc,total,totalOP,MC,FA,maior,menor: inteiro
nome : caracter
salarioA, salarioB, salarioC : real


Inicio
repita
   escreval("Digite o nome do operário : ")
   leia(nome)
   escreval("Digite o número da matricula do operário : ")
   leia(matri)
   se (matri = 0) ENTÃO
      interrompa
   fimse
   Escreval("Digite o número de peças feitas pelo operário : ")
   leia(pecas)
   Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
   leia(sex)
   Escolha  pecas
      caso <= 30
         salarioA <- 888
         Se (sex = "2") ENTÃO
            FA <- FA+1
         fimse
         A <- A+1
      caso = 31
         salarioB <- 888 + (888 * 3/100)
         B <- B+1
      caso = 32
         salarioB <- 888 + (888 * 6/100)
         B <- B+1
      caso = 33
         salarioB <- 888 + (888 * 9/100)
         B <- B+1
      caso = 34
         salarioB <- 888 + (888 * 12/100)
         B <- B+1
      caso = 35
         salarioB <- 888 + (888 * 15/100)
         B <- B+1
      caso >= 36
         Se (sex = "1") ENTÃO
            MC <- MC+1
         fimse
         C <- C+1
         
      fimescolha


   porc <- (pecas - 30) * 5
   salarioC <- 888 + (888 * porc/100)
   total <- salarioA + salarioB + salarioC
   totalOP <- A + B + C


   Escreval("Numero da matrícula do operário é ",matri)
   Escreval("Número de peças fabricadas é ",pecas)
   Se (sex = 1) ENTÃO
      Escreval("O sexo do operário é Masculino ")
   fimse
   Se (sex = 2) ENTÃO
      escreval("O sexo do operário é Feminino ")
   fimse
   Escreval("O Salário final do operário é ")
ate (matri = 0)

Escreval ("O total de salários pagos pela fábrica é ",total)
Escreval ("O número de operários em cada classe é ",totalOP)
Escreval ("O número de operários masculinos na classe C é ",MC)
Escreval ("O número de operários feminino na classe A é ",FA)
fimAlgoritmo

 

adicionado 1 minuto depo

 

 

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

  • Membro VIP

Olá @Tuufee.

 

Vamos lá...

 

1) ELABORAÇÃO DO ALGORITMO

A dica é simples: não tente fazer tudo de uma vez. Faça por partes e vá adicionado novos recursos aos poucos, por exemplo, tente fazer apenas ele calcular e exibir o salário de cada funcionário.. até que esteja tudo certo... só após tente inserir um novo recurso, como "o total dos salários pagos pela fábrica". Testa e vai para o próximo.. por ai vai.

 

 

2) SINTAXE DO CASE

Fiz alguns testes, e a forma que eu encontrei para sintaxe do caso para o seu contexto seria utilizando o "até". Veja:

   escolha pecas
      caso  0 ate 30
         escreval("teste de 0 a 30 ok")
      caso 31 ate 35
         escreval("teste de 31 a 35 ok")
      caso 36 ate 1000
         escreval("teste maior que 36")
   fimEscolha

Aqui comigo não funcionou usando "<=" e afins... Ai só esperando outra pessoa te ajudar (quero saber também, rs)
Ou simplesmente tire o caso e use um conjunto de se/senao.

 

 


3) PROPRIEDADE MATEMÁTICA / TEORIA DOS CONJUNTOS (ou algo do tipo)

1 hora atrás, Tuufee disse:

total <- salarioA + salarioB + salarioC

 

Para calcular o total, você está somando 3 variáveis do tipo real, mas está usando uma variável do tipo inteiro para armazenar o resultado, ou seja, "são tipo incompatíveis" (não dá para armazenar o tipo real dentro do inteiro). RESUMINDO: total tem que ser real também.

 

 

4) CÁLCULOS DE SALÁRIO

Você precisa dá uma revisada nos critérios, veja:

Em 29/04/2017 às 17:40, Tuufee disse:

A - os que fizeram até 30 peças no mês

B - os que fizeram de  31 a 35 peças no mês

C - os que fizeram mais de 35 peças no mês

Os operários de classe A devem receber um salário-base  (R$ 888,00).

Os operários de classe B devem receber um salário-base  (R$ 888,00), mais 3% do salário-base para cada  peça  acima das 30 iniciais.

 

A "comissão" é referente a categoria, mas ao mesmo tempo é calculada sobre cada peça!!! Não é fixo!

 

 

***

 

No aguardo.

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

@Simon Viegas Reescrevi todo o código em "se..fimse", acredito que com o "escolha caso" não iria dar certo mesmo, deu quase tudo certo, as únicas coisas que faltam seria o "menor salário" que não entra na variável, acredito que a sintaxe esta errada, más não consegui resolver, outra coisa que preciso é acumular o maior e menor salário com, nome,salário,sexo,classe, se puder me dar uma luz, vou postar o código.

Algoritmo "semnome"
// Disciplina  :  [Algoritmo]
// Professor   :
// Descrição   : 4 - Operários
// Autor(a)    : 
// Data atual  : 04/05/2017
Var
   A,B,C,sex,matri,pecas,porc,MC,FA: inteiro
   nome : caracter
   salarioA, salarioB, salarioC,total,total2,maior,menor : real


Inicio
repita
      escreval("Digite o nome do operário : ")
      leia(nome)
      escreval("Digite o número da matricula do operário : ")
      leia(matri)
      se (matri = 0) então
         interrompa
      fimse
      Escreval("Digite o número de peças feitas pelo operário : ")
      leia(pecas)
      Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
      leia(sex)

      Se (pecas <= 30) então
         salarioA <- 888
         A <- A+1
      Escreval("O salário do operário é ",salarioA)
      Fimse
      
      Se (pecas = 31) então
         salarioB <- 888 + (888 * 3/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 32) então
         salarioB <- 888 + (888 * 6/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 33) então
         salarioB <- 888 + (888 * 9/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 34) então
         salarioB <- 888 + (888 * 12/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 35) então
         salarioB <- 888 + (888 * 15/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      se (pecas >= 36) então
         porc <- (pecas - 30) * 5
         salarioC <- 888 + (888 * porc/100)
         C <- C+1
         Escreval("O salário do operário é ",salarioC)
      fimse

      Se (pecas >= 36) e (Sex = 1) então
         MC <- MC+1
      fimse

      Se (pecas <= 30) e (sex = 2) então
         FA <- FA+1
      fimse
      
      Escreval("Numero da matrícula do operário é ",matri)
      Escreval("Número de peças fabricadas é ",pecas)
      Se (sex = 1) então
         Escreval("O sexo do operário é Masculino ")
      fimse
      Se (sex = 2) então
         escreval("O sexo do operário é Feminino ")
      fimse
      
     Se (salarioA > salarioB) e (salarioA > salarioC) então
        maior <- salarioA
     fimse

     Se (salarioB > salarioA) e (salarioB > salarioC) então
        maior <- salarioB
     fimse

     Se (salarioC > salarioA) e (salarioC > salarioB) então
        maior <- salarioC
     fimse

     Se (salarioA < salarioB) e (salarioA < salarioC) então
        menor <- salarioA
     fimse

     Se (salarioB < salarioA) e (salarioB < salarioC) então
        menor <- salarioB
     fimse

     Se (salarioC < salarioA) e (salarioC < salarioB) então
        menor <- salarioC
     fimse
      
     total <- salarioA + salarioB + salarioC
     total2 <- total2 + total
         
ate (matri = 0)
   Limpatela

   Escreval ("O total de salários pagos pela fábrica é ",total2:20)
   Escreval ("O numero de operários na Classe A é ",A:23)
   Escreval ("O numero de operários na Classe B é ",B:23)
   Escreval ("O numero de operários na Classe C é ",C:23)
   Escreval ("O número de operários do sexo masculino na classe C é ",MC:5)
   Escreval ("O número de operários Do sexo feminino na classe A é ",FA:6)
   Escreval ("O Maior salário é ",maior:43)
   Se (menor = maior) então
      Escreval ("O Menor salário é igual ao maior ")
   senao
      Escreval ("o Menor salário é ",menor:41)
   fimse




Fimalgoritmo

 

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

  • Membro VIP

Olá @Tuufee.

 

Vamos lá:

 

1) ESTRUTURAS DE SELEÇÃO

No VisuAlg existe basicamente 2: SE e ESCOLHA. Sendo subdivididas em: "se..fimSe" e "se..senão..fimSe"; e "escolha..caso..fimCaso" e "escolha..caso..outroCaso..fimCaso".

 

Como você optou por utilizar o se lá na conta do salário, deverá utilizar o recurso do senao também, pois as condições que "estão sendo selecionas" são mutuamente excludentes, ou seja, se for "escolhido" uma opção, uma outra necessariamente não vai mais ocorrer, logo não faz mais sentido continuar "selecionando" (a estrutura senão controlará isso)... Por favor, dê uma revidada sobre as diferenças entre "se" e "se/senão".

 

Lá na verificação do sex, também deve se utilizar o se..senao, faz sentido perguntar: "É do sexo masculino?", digamos que sim, e após ainda perguntar "É do sexo feminino?", ou seja, se é um anterior, não faz sentido continuar perguntando... (são condição mutuamente excludentes).  Para esse caso é pior: é uma dicotomia, ou seja, se não é masculino, necessariamente será feminino, nem precisaria perguntar... entretanto, como é um dado informado pelo usuário, e ele pode digitar errado, poderia deixar os 2 se, mas incluindo um senao antes do segundo (obs.: vide sintaxe do se..senao).

 

 

 

2) AINDA SOBRE ESTRUTURAS DE SELEÇÃO

Percebo que no seu código, ainda na parte da conta do salário, você está utilizando "se"s individuais para cada inteiro da faixa de valores, mas o mais coerente seria utilizar um "se" para cada faixa... você meio que já sabe fazer isso:

Em 29/04/2017 às 17:40, Tuufee disse:

Se (peças >= 31) ou (peças <= 35) então

 

 

Mas tem um errinho ai... pois seria "E", e não "OU"... Vou tentar explicar (e servi também para quem tem a mesma dúvida).

Veja, assim como os "se"s, podem ter o senao ou não ter, eles também permitem utilizar mais de uma condição na expressão lógica dele, ou seja, um "conjunto de operações lógicas que resultará em VERDADEIRO ou FALSO"...   A "combinações das respostas é que valerá na condição em si"... no exemplo acima, são três "perguntas": "peça é maior igual a 31?", outra sendo  "peças é menor igual a 35?" e por fim  "é um coisa OU é outra?".

 

São 3 operações envolvidas, veja:

A - "peças >= 31", com um operador relacional >=; (resulta em verdadeiro ou falso)

B - "peças <= 35", com outro operador relacional <=; (resulta em verdadeiro ou falso)

C - e um "OU" entre eles, que é um operador lógico OU. (resulta em verdadeiro ou falso)

 

Traduzindo, seria: "se A ou B então"

 

Vamos fazer um "teste de mesa"... Tomemos como exemplo o valor 32.  Para contexto do problema deveria resultar em verdadeiro ou falso? resp.: VERDADEIRO!

 

Então... A=verdadeiro, B=verdadeiro... segundo a tabela verdade do OU (disjunção) , temos, "verdadeiro ou verdadeiro" resultando em "verdadeiro". OK

 

Mas se eu tomarmos o 20? deveria ser FALSO, correto? pelo código, A=falso, B=verdadeiro, pela tabela verdade teríamos VERDADEIRO também! logo, tem algo errado ai!!! Como já citei, o operador lógico seria E (conjução), pois AMBAS AS respostas DEVEM SER VERDADEIRAS... para esse contexto... deve ser "menor maior igual a 31 E ao mesmo tempo menor igual a 35".

 

ADENDO: todo número é maior igual a 31 OU menor igual 35... nunca vai seria falso!

 

Sobre operadores em VisuAlg: http://www.apoioinformatica.inf.br/produtos/item/09-operadores

 

 

 

3) CÁLCULOS DE SALÁRIO

A fórmula é universal... tanto que você fez uma para "pecas >= 36". É a mesma fórmula para os outros números, só que a taxa também é variável (de acordo com a categoria).

 

Ou seja,  por que usar uma fórmula para a faixa ">=36" (que seria de "36 a infinito"), e não usar para "31 a 35"?

 

Para cada categoria, use a mesma fórmula, mudando apenas a taxa.

 

Sugiro usar variáveis, como: salarioBruto, salarioBase, taxaA, taxaB  e taxaC. (cada se usaria uma taxaX específica). O salarioBase, taxaA, taxaB e taxaC podem ser inicializado logo no início do programa, ai dentro dos "se" utilizam elas...

 

 

 

***

 

No aguardo.

 

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

@Simon Viegas No caso do "se..senao" eu sabia que poderia ter colocado ele ali, só que como eu teria que colocar vários "fimse" no final achei que não iria fazer diferença, mas pelo visto faz. Na estrutura de seleção realmente entendi o que você quis dizer, só que no caso desse código acredito que pelo fato de eu ter colocado uma variável para "<=30" o resultado sairia correto, porque o valor se fosse menor seria acumulado na mesma. No salário não entendi muito bem o que você quis dizer, mas acredito que seja o fato de eu ter colocado uma variável para cada resultado de salário, se for isso, eu fiz assim porque o salário é 3% a mais para cada peça acima de 30, a partir do momento que o funcionário fez mais que 30, eu não achei nenhuma solução melhor pra isso então fiz desse jeito.

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

  • Membro VIP

Olá @Tuufee.

 

14 horas atrás, Tuufee disse:

z. Na estrutura de seleção realmente entendi o que você quis dizer, só que no caso desse código acredito que pelo fato de eu ter colocado uma variável para "<=30" o resultado sairia correto, porque o valor se fosse menor seria acumulado na mesma

Então, é preciso revisar os conceitos e os seus termos para não nos confundirmos... o "<=30" não é uma variável, é apenas uma "condição". (não identifiquei se "disse errado" ou está "entendendo errado")

 

Então, a programação estruturada como para o VisuAlg e seu algoritmo apenas vai seguindo etapas... vai "lendo linha a linha e fazendo o que cada linha ordena"...  os "se" (ou if para outras linguagens) funcionam APENAS como estrutura de seleção, ou seja, "seleciona qual caminho o código vai seguir de acordo com o resultado da "expressão lógica" que contém nela (na condição do se), ou seja, "se der VERDADEIRO, ele executa o que está dentro do se, caso seja falso ele pula e vai para a próxima instrução (após o fimSe, ou vai pro senão, caso esteja usando). Faça o seguinte... pegue o seu código e vá pressionando F8 e vai acompanhando a linha azul no lado esquerdo e as variáveis no lado direito do VIsuAlg.

 

 

 

15 horas atrás, Tuufee disse:

No salário não entendi muito bem o que você quis dizer, mas acredito que seja o fato de eu ter colocado uma variável para cada resultado de salário, se for isso, eu fiz assim porque o salário é 3% a mais para cada peça acima de 30, a partir do momento que o funcionário fez mais que 30, eu não achei nenhuma solução melhor pra isso então fiz desse jeito.

Justamente... são X% para cada peça, ou seja:
 

Em 05/05/2017 às 09:36, Simon Viegas disse:

Para cada categoria, use a mesma fórmula, mudando apenas a taxa.

 

Sugiro usar variáveis, como: salarioBruto, salarioBase, taxaA, taxaB  e taxaC. (cada se usaria uma taxaX específica). O salarioBase, taxaA, taxaB e taxaC podem ser inicializado logo no início do programa, ai dentro dos "se" utilizam elas...

 

 

Tente refazer, e poste o seu código atual e onde está com dúvidas.

 

No aguardo.

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

@Simon Viegas Na estrutura de seleção realmente disse errado, é uma condição e não uma variável, em relação a formula desculpe a ignorância mas não entendi como fazer, porque se eu colocar 1 variável para cada taxa, eu teria que colocar vários tipo 3%,6%,9%,12%,15%, então acredito que o código poderia ficar mais "bonito" mais em relação a funcionalidade daria na mesma, não sei se é realmente o que você quis dizer.

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

  • Membro VIP

Olá @Tuufee.

 

8 horas atrás, Tuufee disse:

Na estrutura de seleção realmente disse errado, é uma condição e não uma variável

Tinha imaginado... comentei mesmo para reforçar...

 

 

 

8 horas atrás, Tuufee disse:

[..]em relação a formula desculpe a ignorância mas não entendi como fazer, porque se eu colocar 1 variável para cada taxa[..]

Para o seu contexto só existe 3 taxas: 0% por peça ou 3% por peça ou 5% por peça. Eu não sei se o termo correto é "taxa" mesmo, mas "a taxa" que me refiro é o que está relacionado à categoria... Veja:

 

Em 29/04/2017 às 17:40, Tuufee disse:

Os operários de classe A devem receber um salário-base  (R$ 888,00).

Os operários de classe B devem receber um salário-base  (R$ 888,00), mais 3% do salário-base para cada  peça  acima das 30 iniciais.

Os operários de classe C devem receber um salário-base  (R$ 888,00), mais 5% do salário-base para cada  peça  acima das 30 iniciais

Ou seja, independente de quanto ele vendeu, a taxa, por exemplo, para categoria B é 3%... o mesmo vale para outras. Não muda! Tente focar no processo, e não no resultado!

 

 

 

8 horas atrás, Tuufee disse:

eu teria que colocar vários tipo 3%,6%,9%,12%,15%, então acredito que o código poderia ficar mais "bonito" mais em relação a funcionalidade daria na mesma, não sei se é realmente o que você quis dizer.

Não necessariamente... como sugerido acima, para o mundo da programação não é só importante o resultado final, mas também o processo para chegar ao resultado. Veja, por que para calcular o salário bruto da categoria B você usa vários se:

 

Em 05/05/2017 às 00:00, Tuufee disse:

      Se (pecas = 31) então
         salarioB <- 888 + (888 * 3/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 32) então
         salarioB <- 888 + (888 * 6/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 33) então
         salarioB <- 888 + (888 * 9/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 34) então
         salarioB <- 888 + (888 * 12/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse
      
      Se (pecas = 35) então
         salarioB <- 888 + (888 * 15/100)
         B <- B+1
         Escreval("O salário do operário é ",salarioB)
      fimse

 

 

e para 36 em diante usa uma fórmula?

 

Em 05/05/2017 às 00:00, Tuufee disse:

      se (pecas >= 36) então
         porc <- (pecas - 30) * 5
         salarioC <- 888 + (888 * porc/100)
         C <- C+1
         Escreval("O salário do operário é ",salarioC)
      fimse

 

 

Então vou tentar extrapolar o que estou tentado explicar, na minha interpretação, perde um pouco de coerência "usar uma regra para Chico, e outra para Francisco", ou seja, se são exatamente o mesmo contexto, porque utilizar de duas formas diferentes para resolvê-lo? entende? (poderia fazer? talvez até poderia, mas para mim seria melhor ajustar, é incoerente*)

 

Ainda nessa minha visão, para maior de 36 você deveria fazer o mesmo... um para 36, outro para 37, outro para 38... até o infinito (ou limite de vendas por peças para um vendedor). Logo, ou simplesmente utilizaria uma fórmula também para categoria B. Só frisando: a mesma fórmula vale para 3 categorias. (não confundi "mesma fórmula" com "mesmo valores", por isso podemos utilizar variáveis).

 

Extrapolando mais ainda o que estou tentando demonstrar é que SE SÓ o resultado fosse importante, para a categoria A e B, poderia simplesmente usar um tabela, já que o salário base é fixo, e o valor por peça extra também. Mas não, a minha sugestão é que "use uma fórmula para tudo", precisando "calculando o número de peças extras" e "selecionando a categoria" no caminho...   veja, tente imaginar que não existe categoria e o patrão sempre paga por quantidade de peças uma taxa sobre o salário base...  agora tente incluir as categorias, ou seja, só muda a taxa, a conta é a mesma.

 

 

RESUMIDAMENTE:

Essa "mesma" fórmula:

Em 05/05/2017 às 00:00, Tuufee disse:

         porc <- (pecas - 30) * 5
         salarioC <- 888 + (888 * porc/100)

 

Vale para as 3 categorias. Entretanto, a única coisa que inicialmente precisa ajustar é o que chamei de "taxa", ou seja, em vez de 5 (no contexto seria 5/100, com o 100 que você separou), seria "taxaX" (taxaA, taxaB ou taxaC).

 

Daí que entra a minha sugestão:

 

Em 05/05/2017 às 09:36, Simon Viegas disse:

Para cada categoria, use a mesma fórmula, mudando apenas a taxa.

 

Sugiro usar variáveis, como: salarioBruto, salarioBase, taxaA, taxaB  e taxaC. (cada se usaria uma taxaX específica). O salarioBase, taxaA, taxaB e taxaC podem ser inicializado logo no início do programa, ai dentro dos "se" utilizam elas...

salarioBase = 888;

taxaA = 0

taxaB = 3

taxaC = 5

 

Na fórmula você pode deixar como "taxa" mesmo, e antes, de acordo com a categoria, diz qual o valor dela, algo como "taxa = taxaX" (X=A, B, ou C)  OU  usa direto na fórmula a taxaA ou taxaB ou taxaC, de acordo com a categoria.

 

No aguardo.

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

@Simon Viegas reescrevi o código como você sugeriu, ficou realmente melhor, mas agora estou com problemas para saber o menor salário entre os operários, já tentei de várias formas e não consigo atribuir o menor valor dentro da variável, vou postar o código

Algoritmo "semnome"
// Disciplina  :  [Algoritmo]
// Professor   :
// Descrição   : 4 - Operários
// Autor(a)    :
// Data atual  : 04/05/2017
Var
   A,B,C,sex,matri,pecas,taxaA,taxaB,taxaC,MC,FA,porcentagem: inteiro
   nome : caracter
   salarioBase,salarioBruto,total,total2,maior,menor : real


Inicio
   repita
      salarioBase <- 888
      taxaA <- 0
      taxaB <- 3
      taxaC <- 5


      
      escreval("Digite o nome do operário : ")
      leia(nome)
      escreval("Digite o número da matricula do operário : ")
      leia(matri)
      se (matri = 0) então
         interrompa
      fimse
      Escreval("Digite o número de peças feitas pelo operário : ")
      leia(pecas)
      Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
      leia(sex)

      Se (pecas <= 30) então
         porcentagem <- (pecas - 30) * taxaA
         salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
         A <- A+1
         Escreval("O salário do operário é ",salarioBruto)
      Senao
         se (pecas = 31) então
            porcentagem <- (pecas - 30) * taxaB
            salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
            B <- B+1
            Escreval("O salário do operário é ",salarioBruto)
         senao
            se (pecas = 32) então
            porcentagem <- (pecas - 30) * taxaB
            salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
            B <- B+1
            Escreval("O salário do operário é ",salarioBruto)
            senao
               se (pecas = 33) então
                  porcentagem <- (pecas - 30) * taxaB
                  salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
                  B <- B+1
                  Escreval("O salário do operário é ",salarioBruto)
               senao
                  se (pecas = 34) então
                     porcentagem <- (pecas - 30) * taxaB
                     salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
                     B <- B+1
                     Escreval("O salário do operário é ",salarioBruto)
                  senao
                     se (pecas = 35) então
                     porcentagem <- (pecas - 30) * taxaB
                     salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
                     B <- B+1
                     Escreval("O salário do operário é ",salarioBruto)
                     senao
                        se (pecas >= 36) então
                           porcentagem <- (pecas - 30) * taxaC
                           salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
                           C <- C+1
                           Escreval("O salário do operário é ",salarioBruto)
                        fimse
                     fimse
                  fimse
               fimse
            fimse
         fimse
      fimse
      Se (pecas >= 36) e (Sex = 1) então
         MC <- MC+1
      fimse

      Se (pecas <= 30) e (sex = 2) então
         FA <- FA+1
      fimse

      Escreval("Numero da matrícula do operário é ",matri)
      Escreval("Número de peças fabricadas é ",pecas)
      Se (sex = 1) então
         Escreval("O sexo do operário é Masculino ")
      senao
         Se (sex = 2) então
            escreval("O sexo do operário é Feminino ")
         fimse
      fimse
      
   Se (salarioBruto > maior) e (maior < menor) então
      maior <- salarioBruto
      menor <- maior
   Senao
      Se (salarioBruto > maior) então
      maior <- salarioBruto
   fimse
fimse
   se (salarioBruto < maior) e (salarioBruto < menor)então
      menor <- salarioBruto
   fimse

                 
   total <- salarioBruto
   total2 <- total2 + total

   ate (matri = 0)
   Limpatela

   Escreval ("O total de salários pagos pela fábrica é ",total2:20)
   Escreval ("O numero de operários na Classe A é ",A:23)
   Escreval ("O numero de operários na Classe B é ",B:23)
   Escreval ("O numero de operários na Classe C é ",C:23)
   Escreval ("O número de operários do sexo masculino na classe C é ",MC:5)
   Escreval ("O número de operários Do sexo feminino na classe A é ",FA:6)
   Escreval ("O Maior salário é ",maior:43)
   Escreval ("o Menor salário é ",menor:41)





Fimalgoritmo

 

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

  • Membro VIP

Olá.

 

1) CONDIÇÃO DA CATEGORIA

 

14 horas atrás, Tuufee disse:

         se (pecas = 31) então
            porcentagem <- (pecas - 30) * taxaB
            salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
            B <- B+1
            Escreval("O salário do operário é ",salarioBruto)
         senao
            se (pecas = 32) então
            porcentagem <- (pecas - 30) * taxaB
            salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
            B <- B+1
            Escreval("O salário do operário é ",salarioBruto)

 

 

Você ainda está separando as categorias com valores individuais (31, 32, 33...), mas a categoria deveria ser por faixa ("de  31 a 35")... É um se!!! Esse é justamente um motivos para usar uma fórmula geral.

 

 

 

2) REFORMULAÇÃO DAS NOMENCLATURAS

 

14 horas atrás, Tuufee disse:

      porcentagem <- (pecas - 30) * taxaA
      salarioBruto <- salarioBase + (salarioBase * porcentagem/100)
      A <- A+1

 

 

Acho que precisa dá uma revisada nessas nomenclaturas.... pois na segunda linha você está dividindo algo que chamou de "porcentagem" por 100 novamente, ou seja, "porcentagem" por si só sugere que já está sendo dividido por 100... dividir novamente por 100 soa estranho...

 

Dessa vez vou tentar adiantar pra você. Uma maneira mais simples ficaria algo assim:

      salarioFinal <- salarioBase + ((pecas - faixaPecas) * (salarioBase * taxaB))

 

e usar:

      taxaA <- 0/100
      taxaB <- 3/100
      taxaC <- 5/100

 

 

3) MAIOR E MENOR

Essa condição não faz sentido:

14 horas atrás, Tuufee disse:

Se (salarioBruto > maior) e (maior < menor) então

 

Maior nunca vai ser menor que menor... Revise o conceito de descobrir o maior e também descobrir o menor... 

 

Outra coisa, ao encontrar o maior e menor, você precisará de outros dados, como solicitado no enunciado:

 

Em 29/04/2017 às 17:40, Tuufee disse:

·       o maior e o menor salário pago com o nome, o sexo e a classe desses operários.  (Em caso de empate, exiba a informação de apenas um destes operários.

 

 

No aguardo.

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

@Simon Viegas  Fiz as alterações como você sugeriu, adicionei o nome, sexo e classe do maior e menor, só que estou ficando louco tentando colocar o menor valor dentro da variável, nunca da certo de todas formas que tento, o máximo que consegui foi assim, o resultado do salário vai acumulando no maior salário 1000,2000,3000 etc... só que se eu não adiciono um número menor, nunca vai atribuir um valor na variável menor, se depois desses 3 salários eu parar o código o menor valor não será gravado, ao invés de ter 1000 como menor valor, isso foi o mais próximo que consegui, faz horas que estou tentando é nada, vou postar onde estou atualmente.

Algoritmo "semnome"
// Disciplina  :  [Algoritmo]
// Professor   :
// Descrição   : 4 - Operários
// Autor(a)    :
// Data atual  : 04/05/2017
Var
   A,B,C,sex,matri,pecas,MC,FA,faixapecas,sexmaior,sexmenor,classmaior,classmenor: inteiro
   nome,nomemaior,nomemenor : caracter
   salarioBase,salariofinal,total,total2,maiorsalario,menorsalario,taxaA,taxaB,taxaC : real


Inicio
   repita
      salarioBase <- 888
      faixapecas <- 30
      taxaA <- 0/100
      taxaB <- 3/100
      taxaC <- 5/100



      escreval("Digite o nome do operário : ")
      leia(nome)
      escreval("Digite o número da matricula do operário : ")
      leia(matri)
      se (matri = 0) então
         interrompa
      fimse
      Escreval("Digite o número de peças feitas pelo operário : ")
      leia(pecas)
      Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
      leia(sex)

      Se (pecas <= 30) então
         salarioFinal <- salarioBase + ((pecas - faixapecas) * (salarioBase * taxaA))
         A <- A+1
         Escreval("O salário do operário é ",salariofinal)
      Senao
         se (pecas >= 31) e (pecas <= 35) então
            salarioFinal <- salarioBase + ((pecas - faixapecas) * (salarioBase * taxaB))
            B <- B+1
            Escreval("O salário do operário é ",salariofinal)
         senao
            se (pecas >= 36) então
               salarioFinal <- salarioBase + ((pecas - faixapecas) * (salarioBase * taxaC))
               C <- C+1
               Escreval("O salário do operário é ",salariofinal)
            fimse
         fimse
      fimse

      Se (pecas >= 36) e (Sex = 1) então
         MC <- MC+1
      fimse

      Se (pecas <= 30) e (sex = 2) então
         FA <- FA+1
      fimse

      Escreval("Numero da matrícula do operário é ",matri)
      Escreval("Número de peças fabricadas é ",pecas)
      Se (sex = 1) então
         Escreval("O sexo do operário é Masculino ")
      senao
         Se (sex = 2) então
            escreval("O sexo do operário é Feminino ")
         fimse
      fimse

      Se   (pecas <= 30) e (salariofinal > maiorsalario) então
         maiorsalario <- salariofinal
         nomemaior <- nome
         sexmaior <- sex
         classmaior <- A
      senao
         Se   (pecas <= 30) e (salariofinal < menorsalario) então
            menorsalario <- salariofinal
            nomemenor <- nome
            sexmenor <- sex
            classmenor <- A
         senao
            se (pecas >= 31) e (pecas <= 35) e (salariofinal > maiorsalario) então
               maiorsalario <- salariofinal
               nomemaior <- nome
               sexmaior <- sex
               classmaior <- B
            senao
               se (pecas >= 31) e (pecas <= 35) e (salariofinal < menorsalario) então
                  menorsalario <- salariofinal
                  nomemenor <- nome
                  sexmenor <- sex
                  classmenor <- B
               senao
                  se (pecas >= 36) e (salariofinal > maiorsalario) então
                     maiorsalario <- salariofinal
                     nomemaior <- nome
                     sexmaior <- sex
                     classmaior <- C
                  senao
                     se (pecas >= 36) e (salariofinal < menorsalario) então
                        menorsalario <- salariofinal
                        nomemenor <- nome
                        sexmenor <- sex
                        classmenor <- C
                     fimse
                  fimse
               fimse
            fimse
         fimse
      fimse
      total <- salariofinal
      total2 <- total2 + total

   ate (matri = 0)
   Limpatela

   Escreval ("O total de salários pagos pela fábrica é ",total2:20)
   Escreval ("O numero de operários na Classe A é ",A:23)
   Escreval ("O numero de operários na Classe B é ",B:23)
   Escreval ("O numero de operários na Classe C é ",C:23)
   Escreval ("O número de operários do sexo masculino na classe C é ",MC:5)
   Escreval ("O número de operários Do sexo feminino na classe A é ",FA:6)
   Escreval ("O Maior salário é ",maiorsalario:43)
   Escreval ("o Menor salário é ",menorsalario:41)
   Escreval ("o nome do operário com maior salário é ",nomemaior)
   Escreval ("A classe do operário com maior salário é ",classmaior)
   Escreval ("O nome do operário com menor salário é ",nomemenor)
   Escreval ("A classe do operário com menor saláro é ",classmenor)

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Em relação ao menor, está faltando inicializar a variável... uma forma seria colando um valor alto como "99999"... ou atribuir o primeiro valor valor lido como sendo o inicialmente o menor.

 

Veja, ao iniciar o programa, as variáveis são zeradas, logo, menor fica com o valor 0, daí, nenhum salário irá ser menor que ele... inicializando como citado acima, resolverá esse problema.

 

 

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

@Simon Viegas  Agora acredito que o código esta completo, se pudesse, gostaria que desse uma olhada.

Algoritmo "semnome"
// Disciplina  :  [Algoritmo]
// Professor   :
// Descrição   : 4 - Operários
// Autor(a)    :
// Data atual  : 04/05/2017
Var
   A,B,C,sex,matri,pecas,MC,FA,faixapecas,sexmaior,sexmenor: inteiro
   nome,nomemaior,nomemenor,classmaior,classmenor: caracter
   salarioBase,salariofinal,total,total2,maiorsalario,menorsalario,taxaA,taxaB,taxaC : real


Inicio
   Menorsalario <- 9999


   repita
      salarioBase <- 888
      faixapecas <- 30
      taxaA <- 0/100
      taxaB <- 3/100
      taxaC <- 5/100



      escreval("Digite o nome do operário : ")
      leia(nome)
      escreval("Digite o número da matricula do operário : ")
      leia(matri)
      se (matri = 0) então
         interrompa
      fimse
      Escreval("Digite o número de peças feitas pelo operário : ")
      leia(pecas)
      Escreval("Digite o sexo do operário, 1 para masc e 2 para fem : ")
      leia(sex)

      Se (pecas <= 30) então
         salarioFinal <- salarioBase + ((pecas - faixapecas) * (salarioBase * taxaA))
         A <- A+1
         Escreval("O salário do operário é ",salariofinal:30)
      Senao
         se (pecas >= 31) e (pecas <= 35) então
            salarioFinal <- salarioBase + ((pecas - faixapecas) * (salarioBase * taxaB))
            B <- B+1
            Escreval("O salário do operário é ",salariofinal:30)
         senao
            se (pecas >= 36) então
               salarioFinal <- salarioBase + ((pecas - faixapecas) * (salarioBase * taxaC))
               C <- C+1
               Escreval("O salário do operário é ",salariofinal:30)
            fimse
         fimse
      fimse

      Se (pecas >= 36) e (Sex = 1) então
         MC <- MC+1
      fimse

      Se (pecas <= 30) e (sex = 2) então
         FA <- FA+1
      fimse

      Escreval("Numero da matrícula do operário é : ",matri:17)
      Escreval("Número de peças fabricadas é : ",pecas:22)
      Se (sex = 1) então
         Escreval("O sexo do operário é :                            Masculino ")
      senao
         Se (sex = 2) então
            escreval("O sexo do operário é Feminino ")
         fimse
      fimse

      Se   (pecas <= 30) e (salariofinal > maiorsalario) então
         maiorsalario <- salariofinal
         nomemaior <- nome
         sexmaior <- sex
         classmaior <- "A"
      fimse
      Se   (pecas <= 30) e (salariofinal < menorsalario) então
         menorsalario <- salariofinal
         nomemenor <- nome
         sexmenor <- sex
         classmenor <- "A"
      fimse
      se (pecas >= 31) e (pecas <= 35) e (salariofinal > maiorsalario) então
         maiorsalario <- salariofinal
         nomemaior <- nome
         sexmaior <- sex
         classmaior <- "B"
      fimse
      se (pecas >= 31) e (pecas <= 35) e (salariofinal < menorsalario) então
         menorsalario <- salariofinal
         nomemenor <- nome
         sexmenor <- sex
         classmenor <- "B"
      fimse
      se (pecas >= 36) e (salariofinal > maiorsalario) então
         maiorsalario <- salariofinal
         nomemaior <- nome
         sexmaior <- sex
         classmaior <- "C"
      fimse
      se (pecas >= 36) e (salariofinal < menorsalario) então
         menorsalario <- salariofinal
         nomemenor <- nome
         sexmenor <- sex
         classmenor <- "C"
      fimse

      total <- salariofinal
      total2 <- total2 + total

   ate (matri = 0)
   Limpatela

   Escreval ("O total de salários pagos pela fábrica é ",total2:20)
   Escreval ("O numero de operários na Classe A é ",A:23)
   Escreval ("O numero de operários na Classe B é ",B:23)
   Escreval ("O numero de operários na Classe C é ",C:23)
   Escreval ("O número de operários do sexo masculino na classe C é ",MC:5)
   Escreval ("O número de operários Do sexo feminino na classe A é ",FA:6)

   Escreval()
   Se (maiorsalario <> menorsalario) então
      Escreval ("O Maior salário é ",maiorsalario)
      Escreval ("o nome do operário com maior salário é ",nomemaior)
      Escreval ("A classe do operário com maior salário é ",classmaior)
      Se (sexmaior = 1) então
         Escreval ("O sexo do operário com o maior salário é Masculino")
         Escreval()
         Escreval ("o Menor salário é ",menorsalario)
         Escreval ("O nome do operário com menor salário é ",nomemenor)
         Escreval ("A classe do operário com menor saláro é ",classmenor)
         Se (sexmenor = 1) então
            Escreval ("O sexo do operário com menor salário é Masculino")
         senao
            se (sexmenor = 2) então
               Escreval ("O sexo do operário com menor salário é Feminino")
            fimse
         fimse
      fimse
   fimse
   Se (sexmaior = 2) então
      Escreval ("O sexo do operário com maior salário é Feminino")
      Escreval()
      Escreval ("o Menor salário é ",menorsalario)
      Escreval ("O nome do operário com menor salário é ",nomemenor)
      Escreval ("A classe do operário com menor saláro é ",classmenor)
      Se (sexmenor = 1) então
         Escreval ("O sexo do operário com menor salário é Masculino")
      senao
         se (sexmenor = 2) então
            Escreval ("O sexo do operário com menor salário é Feminino")
         fimse
      fimse
   fimse


   Se (maiorsalario = menorsalario) então
      Escreval ("O Maior salário é ",maiorsalario:43)
      Escreval ("o nome do operário com maior salário é ",nomemaior)
      Escreval ("A classe do operário com maior salário é ",classmaior)
      Se (sexmenor = 1) então
         Escreval ("O sexo do operário com menor salário é Masculino")
      senao
         se (sexmenor = 2) então
            Escreval ("O sexo do operário com menor salário é Feminino")
         fimse
      fimse
   fimse





fimalgoritmo

 

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

  • Membro VIP

Olá @Tuufee.

 

1) SE ou SE..SANÃO

Nesse trecho abaixo também cabe um senão, pois por si só o "sex=1" é excludente em relação a "sex=2" (obs.: nas condições tem um E, logo são necessariamente dependentes dos sex). Se entrar no primeiro se, não entrará no segundo...

   Se (pecas >= 36) e (Sex = 1) então
      MC <- MC+1
   fimse

   Se (pecas <= 30) e (sex = 2) então
      FA <- FA+1
   fimse

 

 

 

2) PADRONIZAÇÃO DE ALINHAMENTO

Nesse trecho observam-se que o alinhamento de um texto não está correspondendo ao do outro... a texto em si também está diferente... um em ":" o outro não.

   Se (sex = 1) ENTÃO
      Escreval("O sexo do operário é :                            Masculino ")
   senao
      Se (sex = 2) ENTÃO
         escreval("O sexo do operário é Feminino ")
      fimse
   fimse

Poderia utilizar o laço de repetição para "traduzir" apenas a variável, ou seja, utilizando uma outra variável que conterá o texto ou "masculino" ou "feminino". Inicializaria essa variável com algo genérico, como "<não cadastrado>"... o se alterará para um dos dois textos de acordo com a código do sexo.. ai usa essa variável no texto após o se..senao...se. (ou vai aparecer o texto genérico ou vai aparecer o sexo por extenso)

 

 

 

3) QUEBRA DE ESTRUTURA

Aqui algo que já queria comentar antes, mas deixei para depois...

   se (matri = 0) ENTÃO
      interrompa

No momento não sei explicar (nem provar) o que eu quero dizer, mas essa estrutura de "forçar o interrompimento do laço" deve ser evitada, ou seja, não é considerado um "boa prática de programação"... A recomendação seria utilizar um se para justamente fazer continuar (em vez de "forçar interromper"). Algo como "se matri<>0 então". Percebe a diferença?

 

obs.: caso for alterar, para reidentar, basta selecionar o texto e pressionar "tab".. daí toda o texto selecionado vai uma casa pra frente. Se quiser fazer recuar, pressiona "shift+tab".

 

 

 

4)  REANALISE DE ESTRUTURAS DE SELEÇÃO

Não consegui entender a parte da verificação, antes de exibir os dados, entre maiorsalario e menorsalario.

Se (maiorsalario <> menorsalario) ENTÃO

(e as outras estruturas relacionadas....)

 

Então, só vão ser iguais em duas situações: ou só existe um; ou todos os salários finais são iguais. Logo, ou ajusta o texto para quando for igual, ou simplesmente não verifica isso.

 

Em relação a restrição que o enunciado impõe:

 

Em 29/04/2017 às 17:40, Tuufee disse:

·       o maior e o menor salário pago com o nome, o sexo e a classe desses operários.  (Em caso de empate, exiba a informação de apenas um destes operários. Não utilize vetores para armazenar informações)

...aí tem que analisar para saber se o empate se refere à mesma categori ou se é empate entre as  categorias, ou seja, se, por exemplo, 2 ou mais operários tem um maior maior salário, ou se o salário do maior e do menor são iguais... mas veja, para o segundo caso, o maior e o menor também, sempre, incluirá a mesma pessoa. Como ocorrerá o que citei acima em vermelho, ou só ele foi cadastrado ou todos são iguais, logo ele também será igual a a ele mesmo...  (o salário dele será o menor e maior ao mesmo tempo)

 

 

***

 

No aguardo.

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

@Simon Viegas  1-) Em relação ao "fim..se" realmente vacilei, não tinha percebido isso, já arrumei. 2-) O alinhamento ficou errado pelo fato de eu ter ficado testando os espaços entre as respostas, para ficar tudo padronizado, como em uma tabela, ai acabei esquecendo assim. 3-) O interrompa já vi vários códigos em outras linguagens assim, achei que seria interessante para mim usar pelo fato de que ele a partir do momento em que eu digitasse "0" o código pararia, e no caso do "se" para o código continuar quando eu digitasse "0" ele continuaria o loop até no "até = 0" e acumularia os valores até chegar no final do código. 4-) o maior e menor era pra realmente ficar assim, exibir o maior e menor caso forem diferentes, e exibir somente um caso ele fosse igual, o problema foi que não adaptei o texto para escrever isso.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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