Informática, perguntado por LDmineiro9398, 11 meses atrás

Uma empresa concederá um aumento de salário aos seus funcionários, variável de acordo com o cargo, conforme a tabela abaixo. Código Cargo Percentual 101 Gerente 12% 102 Engenheiro 26% 103 Técnico 32% 104 Administrativo 37% 105 Auxiliar 41% Faça um programa que leia o salário e o código do cargo de um funcionário, e calcule o novo salário. Se o cargo do funcionário não estiver na tabela, ele deverá, então, receber 52% de aumento. Mostre o salário antigo, o novo salário, a diferença entre eles e o percentual de aumento. Observação: utilizar o comando switch.


bokomoko: é ótimo quando o professor já limita o pensamento do aluno e diz como ele tem que resolver o problema né ?

Soluções para a tarefa

Respondido por bokomoko
2
Código Cargo             Percentual
101       Gerente           12%
102       Engenheiro      26%
103      Técnico             32%
104      Administrativo   37%
105      Auxiliar              41%

Eis a versão como o professor limitou

#include "stdio.h"

int main(void) {
  int cargo;
  float salario,fator;
  
  printf("Informe o salário\n");
  scanf("%f",&salario);
  
  printf("Informe o código do cargo\n");  scanf("%d",&cargo);
  
  switch( cargo) {
    case 101:
        fator = 0.12;
        break;
    case 102:
        fator = 0.26;
        break;
    case 103:
        fator = 0.32;
        break;
    case 104:
        fator  = 0.37;
        break;
    case 105:
        fator = 0.41;
        break;
    default:
        fator = 0.52;
  }
  printf("O salário antigo era %9.2f \n",salario);
  printf("O salário novo é %9.2f \n",salario * (1+fator));
  printf("A diferença entre eles é %9.2f \n", salario*fator );
  printf("O percentual de aumento foi %9.2f% \n", fator*100);
  return 0;
}
Pode rodá-lo aqui https://repl.it/@bokomoko/aumento-por-cargo

Eu faria assim

#include "stdio.h"

int main(void) {
  int cargo;
  float aumentos[] = { 0.12,0.26,0.32,0.37,0.41 } ;
  
  float salario,fator;
  
  printf("Informe o salário\n");
  scanf("%f",&salario);
  
  printf("Informe o código do cargo\n");
  scanf("%d",&cargo);
  
  if ( 101 <= cargo  && cargo <= 105  ) {
    fator = aumentos[cargo - 101];
  } else {
    fator = 0.52;
  }
  
  printf("O salário antigo era %9.2f \n",salario);
  printf("O salário novo é %9.2f \n",salario * (1+fator));
  printf("A diferença entre eles é %9.2f \n", salario*fator );
  printf("O percentual de aumento foi %9.2f% \n", fator*100);
  return 0;
}

https://repl.it/@bokomoko/aumento-por-cargo-melhor

aqui cabe uma explicação interessante que talvez esteja além do alcance do seu professor.

O comando switch tem algumas semelhanças com um vetor/array. A semelhança é que o switch é um vetor também só que em vez de conter dados ele contém código de programa. Assim como os elementos do vetor são indexados, o switch é o que permite indexar o vetor de códigos com o indexador. No caso, o indexador é o código do departamento.

Então quando usar um vetor de dados e quando usar um vetor de código ? 
Quando o que mudar for o dado, usa-se o vetor de dados. Quando o que mudar é o código, usa-se o vetor de códigos. 

Nesse exemplo infeliz do seu professor fraco o que muda é o dado. No caso, o percentual de aumento que varia. O código é fundamentalmente o mesmo = atribuir (ou calcular) o valor do novo salário. Não muda de um departamento para o outro a forma como o cálculo é realizado. O que muda é o dado, no caso o percentual. Por isso que a segunda forma é mais limpa e mais eficaz que a forma originalmente recomendada pelo professor. Ele sabe como o comando switch funciona mas não sabe muito bem (ou pelo menos não demonstrou de uma forma clara) porque tem que usar o swtich. Nao tem que usar o switch.

Outro ponto que precisa ser destacado é a diferença entre  o switch e uma série de if's. Porque usar switch e não if's ? O programa poderia ser feito assim

if ( cargo = 101) {
    fator = 0.12;
} else if  ( cargo = 102)  {
    fator = 0.26;
} else if ( cargo = 103) { 
    fator = 0.32 ; 
} else if ( cargo = 104) {
    fator = 0.37 ;
} else if (cargo = 105 { 
    fator = 0.41 ;
} else {
    fator = 0.52;
} ; 

Faz a mesma coisa. Só que no switch o desvio é automático. Não há teste. O valor da variável usada no switch é usado como um indexador. Vai direto. Na sequencia de if's, cada if é testado até um ser verdadeiro ou dar o else final.

A vantagem de usar o vetor de dados na alternativa a resposta é que o código do programa fica mais fácil de modificar caso aconteça uma modificação dos departamentos, adição de um novo departamento, fusão de dois departamentos em um só, mudança no percentual de cada departamento. Basta ir no vetor e alterar os dados, adicionando/removendo/alterando conforme o caso. Esses dados podem inclusive estar em um arquivo que o próprio usuário pode modificar. 

Na forma que o professor sugeriu, se houver alguma modificação o PROGRAMA tem que ser modificado.

Pense nisso quando for programar.

Perguntas interessantes