/*Universidade de Brasilia
Instituto de Ciencias Exatas
Departamento de Ciencia da Computacao
Computacao Basica – 01/2012
Aluno(a): Danilo Guimaraes Franco Ramos
Matricula: 12/0028921
Turma: A
Versão do compilador: Code::Blocks 10.05
Descricao: Calcular impostos de renda e mostra-lo, e ao final mostrar os dados e o imposto de renda do contribuinte que possuir o maior imposto de renda.*/
#include <stdio.h>
int main(){
int dependentes,dependentes_maior,i,j,k; /* i,j,k, serviram para transferir dados de strings na linha 71-79*/
float rend_anual, desp_medicas, imposto, taxa, maior_imposto, rend_maior, desp_maior;/* a variavel maior_imposto servira para guardar o maior imposto e em seguida os dados do contruibuinte que possuir esse maior imposto.*/
char RG[11], Nome[31], data[9], RG_maior[11], Nome_maior[31], data_maior[9], continuar; /* As variaveis que possuem o _maior serviram para guardar o valor do RG, Nome, e data, do contruibuinte com maior imposto de renda */
/* A variavel 'continuar' servira para saber se deseja digitar dados de mais um contruibuinte ou encerrar o programa!*/
imposto=0;
do{/* Saber se o usuario ira informar dados de outro contruibuinte ou nao!*/
printf("Informe o RG do contruibuinte:\n");
scanf("%s", &RG);
getchar();
printf("Informe o nome do contruibuinte:\n");
scanf("%[^\n]s%*c", &Nome);
getchar();
printf("Informe a data de nascimento do contruibuinte no formato DD/MM/AA:\n");
scanf("%[^\n]s", &data);
getchar();
printf("Informe o total do rendimento no ano do contruibuinte:\n");/* Aqui o programa ira perguntar e ler todos os dados do contruibuinte.*/
scanf("%f", &rend_anual);
printf("Informe o total de despesas medico-hospitares do contruibuinte:\n");
scanf("%f", &desp_medicas);
while (desp_medicas<0){ /* Aqui testamos a consistencia da informaçao digitada pelo usuario. Nesse caso : Despesas Medicas.*/
printf("ERRO! Despesas medico-hospitalares nao podem ser negativas.\n Por favor informe um valor valido para despesas medico-hospitalares:\n");
scanf("%f", &desp_medicas);
}
printf("Informe o numero de dependentes do contruibuinte:\n");
scanf("%d", &dependentes);
while (dependentes<0){ /* Aqui testamos novamente a consistencia da informaçao digitada pelo usuario. Nesse caso : numero de dependentes.*/
printf("ERRO! Dependentes nao podem ser negativos.\n Por favor informe um numero valido de dependentes:\n");
scanf("%d", &dependentes);
}
if(rend_anual<24000){
printf("Isento\n");
}
else if ((rend_anual>=24000) && (rend_anual<30000)){
taxa=0.07; /* Aqui condicionamos o valor da taxa para calculo do imposto de rodo de acordo
com o rendimento anual do contruibuinte.*/
}
else if ((rend_anual>=30000) && (rend_anual<48000)){
taxa=0.11;
}
else {
taxa=0.15;
}
if ((desp_medicas>=1500) && (rend_anual>=24000)){ /* Aqui fazemos o calculo do imposto de renda de acordo com a taxa e condicionado
no valor das despesas medicas.*/
imposto=(rend_anual*taxa - desp_medicas - dependentes*200);
}
else if ((rend_anual>=24000) && (desp_medicas<1500)) {
imposto=(rend_anual*taxa - dependentes*200);
}
if (imposto<=0){
printf("Imposto de renda = 0, Isento"); /* Aqui imprime o valor do imposto condicionando ele ser menor/igual a zero ou maior que zero.*/
}
else if ((rend_anual>=24000) && (imposto>0)){
printf("Imposto devido: R$ %.2f \n", imposto);
}
if (imposto>maior_imposto){ /* Esse condicional serve para armazenar o maior imposto em uma variavel, e copiar os dados do contruibuinte que possui
esse maior imposto para outras variaveis, como explicado na declaraçao de variaveis no inicio. */
maior_imposto=imposto;
for (i=0;i!=11;i++){
RG_maior[i]=RG[i];
}
for (j=0;j!=31;j++){
Nome_maior[j]=Nome[j];
}
for (k=0;k!=9;k++){
data_maior[k]=data[k];
}
dependentes_maior=dependentes;
rend_maior=rend_anual;
desp_maior=desp_medicas;
}
printf("Deseja cadastrar mais um contruibuinte? (S/N):\n"); /* Saber se o usuario deseja informar mais um contruibuinte.*/
scanf("%s", &continuar);
getchar();
}while (continuar=='S'); /* Condicional para o loop, se o usuario digitar S para informar mais um contruibuinte o loop ocorrera novamente!*/
printf("** CONTRUIBUINTE COM MAIOR VALOR DE IMPOSTO DE RENDA ** \n\nRG: %s\nNOME: %s\nDATA DE NASC.: %s\nTOTAL DE RENDIMENTOS NO ANO: R$ %.2f\nTOTAL DE DESPESAS MEDICO-HOSPITALARES: R$ %.2f\nNUMERO DE DEPENDENTES: %d\nIMPOSTO DEVIDO: R$ %.2f\n", RG_maior, Nome_maior, data_maior, rend_maior, desp_maior, dependentes_maior, maior_imposto);
/* Impressao final de dados*/
getchar();
}