Sei sulla pagina 1di 6

Problema 1: Revisão de programação

Ricardo Silvestre, Caio Borges, Andre Bahiense, Roberto Machado,


Felipe Araújo, John Santos e João Junior
18 de Abril de 2018

1 OBJETIVOS
Esse trabalho tem como objetivo projetar um algorı́timo para solucionar proble-
mas de pagamentos de uma empresa e dessa forma compreender os fundamentos
e aplicar os conceitos aprendidos em sala.

2 DESENVOLVIMENTO
2.1 FLUXOGRAMA
Inicialmente desenvolvemos um fluxograma considerando como ponto inicial a
introdução da variável “Matricula”, inserida pelo usuário, considerando que,
nesta etapa, não haveriam erros de digitação da matricula e que já existia uma
função que retornaria um valor de salário para cada matricula.
Começamos então a desenvolver um fluxograma com a lógica das funções
que calculariam os valores dos impostos pedidos, individuais e totais.

1
2
2.2 VALORES SALARIAIS
Nos foi informado que já teriamos como condição inicial os valores de salário
referente a respectiva matrı́cula de cada funcionário, para simular tal condição
decidimos utilizar um arquivo de texto com estes dados. Este arquivo foi gerado
no excel através do comando ”=ARRED(ALEATÓRIO()*(8109-954)+954;0)”,
sendo que a função ”ALEATÓRIO” gera um número entre 954 e 8109 e a função
”ARRED” (com parâmetro zero) está garantindo que o número gerado seja um
inteiro.

2.3 VALORES INDIVIDUAIS


Para os impostos individuais criamos uma estrutura que avalia em que faixa
monetária se encontra o salário correspondente a matricula digitada e retorna
o valor do desconto adequado. Baseamos os valores das faixas monetárias em
tabelas encontradas em [1].

2.4 VALORES TOTAIS


Para os valores de impostos e salários totais adotamos uma lógica vetorial onde
varremos o vetor que contém os números de matricula, calculamos os descon-
tos correspondentes a cada trabalhador, através das funções criadas na etapa
anterior, e somamos os valores obtidos. Por fim, imaginando esta etapa como
provisória e simples, consideramos que todas as informações pedidas seriam
mostradas simultaneamente no fim do processo.

2.5 PSEUDOCÓDIGO
A segunda etapa do projeto consistiu em desenvolver um pseudocódigo que
aproximasse o fluxograma da linguagem C. Escolhemos então as estruturas de
repetição e estruturas condicionais, suportadas pela linguagem C, que julgamos
mais adequadas, para cada função e procedimento, e montamos o pseudocódigo.
A terceira etapa do projeto foi baseada na adaptação para a linguagem C.
Adaptamos o pseudocódigo a sintaxe adequada e verificamos a funcionalidade
de programa. Garantida a funcionalidade do programa começamos a testar
possı́veis erros comuns de usuários e adaptamos a lógica objetivando a fluidez
do programa.

3 CONCLUSÃO
Consideramos o desenvolvimento do menu como uma boa oportunidade de ex-
plorar a linguagem e organizar o programa. Adaptamos então o fluxograma
inicial como base de organização da nova estrutura e depois implementamos as
mudanças utilizando a sintaxe correta para a linguagem C.

3
4 CÓDIGO EM C
#include <stdio.h>
#include <stdlib.h>
#define cont 2000
int conta=0;
int vetsb[2000];
float INSS[2000];
float IRRF[2000];
float INSST=0,IRRFT=0,SLT=0,SBT=0;
int i,j,sel,sel0,matricula,pos,cout;

int main (){


/*Entrada de Dados*/
FILE *fp;
fp = fopen("Salarios.txt", "r");
if(fp == NULL){
printf("Erro ao abrir o arquivo!");
exit(1);
}
while( conta < 2000 ){
fscanf(fp, "%d", &vetsb[conta]);
conta++;
}

/*Cálculo do salario bruto total*/


for(i=0;i<cont;i++){
SBT=SBT + vetsb[i];
}

/*Cálculo do INSS total;*/


for(i=0;i<cont;i++){
if (vetsb[i] <= 1693.72){
INSS[i] = vetsb[i]*0.08;
}else if (vetsb[i] >= 1693.72 && vetsb[i]< 2822.91){
INSS[i] = vetsb[i]*0.09;
}else if (vetsb[i]>= 2822.90 && vetsb[i] <5645.81){
INSS[i] = vetsb[i]*0.11;
}else{
INSS[i] = 621.04;
}
INSST = INSST + INSS[i];
}

4
/*Cálculo do IRFF total*/
for(i=0;i<cont;i++){
if (vetsb[i]>= 1903.99 && vetsb[i] <= 2826.65){
IRRF[i] = ((vetsb[i]*0.075) - 142.8);
}else if (vetsb[i]>= 2826.66 && vetsb[i]<= 3751.05){
IRRF[i] = ((vetsb[i]*0.15) - 354.8);
}else if (vetsb[i]>= 3751.06 && vetsb[i] <=4664.68){
IRRF[i] = ((vetsb[i]*0.225) - 636.13);
}else if (vetsb[i] > 4664.68){
IRRF[i] = ((vetsb[i]*0.275) - 869.36);
}else{
IRRF[i] = 0;
}
IRRFT = IRRFT + IRRF[i];
}

/*Cálculo do salário lı́quido total*/


SLT = SBT - INSST - IRRFT;

/*Menu para escolha da opç~


ao;*/
for(i=0;;i++){
system("cls");
printf("O que deseja saber?\n1-Informacoes do Funcionario
\n2-Informacoes da Empresa\n0-Sair\n\n\n");
scanf("%d",&sel0);
if(sel0 == 1){
system("cls");
printf("Digite matricula:");
scanf("%d",&matricula);
if(matricula == 0 || matricula >= 2000){
system("cls");
printf("Matricula Invalida");
printf("\n\n\nDigite:\n1-Digitar a Matricula Novamente.
\nQualquer Tecla-Sair.\n\n\n");
scanf("%d",&j);
if(j==1){
system("cls");
printf("Digite matricula:");
scanf("%d",&matricula);
}else{
break;
}
}
pos = matricula-1;
system("cls");
printf("%s%d\n%s%d\n%s%.2f\n%s%.2f\n%s%.2f\n","Matricula:",matricula,
"Salario Bruto:",vetsb[pos],"Valor do INSS:",INSS[pos],
"Valor do IRRF:",IRRF[pos],"Salario Liquido:",
(vetsb[pos]-INSS[pos]-IRRF[pos]));

5
}else if(sel0 == 2){
system("cls");
printf("O que deseja saber?\n1-INSS Total\n2-IRFF Total\n3-Salario Bruto Total
\n4-Salario Liquido Total\n0-Sair\n\n\n");
scanf("%d",&sel);
if(sel == 1){
system("cls");
printf("INSS Total: ""%.2f",INSST);
}else if(sel == 2){
system("cls");
printf("IRRF Total: ""%.2f",IRRFT);
}else if(sel == 3){
system("cls");
printf("Salario Bruto Total: ""%.2f",SBT);
}else if(sel == 4){
system("cls");
printf("Salario Liquido Total: ""%.2f",SLT);
}else if(sel == 0){
break;
}else{
system("cls");
printf("Comando nao Encontrado");
}
}else if(sel0 == 0){
break;
}else{
system("cls");
printf("Comando nao Encontrado");
}
printf("\n\n\nDigite:\n1-Voltar.\n0-Sair.\n\n\n");
printf("\n");
scanf("%d",&cout);
if(cout == 0){
break;
}
}
return 0;
}

5 Bibliografia
[1] http://blog.convenia.com.br/aprenda-a-calcular-o-irrf-na-folha-de-pagamento/

Potrebbero piacerti anche