Académique Documents
Professionnel Documents
Culture Documents
2 Références générales 16
Objectif
Cet exercice calcule l’impôt sur le revenu.
1
Unisciel algoprog – Impôt sur le revenu [ca03] 2
Exemple
Soient un revenu imposable de 30000 et un quotient familial de 1.5.
Alors le revenu par part vaut 30000/1.5 = 20000 ce qui correspond à la fourchette : « de
9 710 à 26 818 euros » (2è formule).
Outil Java
L’opération bxc s’écrit Math.floor(x).
Solution simple
On déclare une variable rs pour le résultat et une variable rpart pour le revenu par part.
On utilise des structures Si en cascade ainsi que la fonction imposition1 avec les bons
paramètres.
public static double imposition1(double rv, double qf, double taux, double coef)
{
return (rv * taux - coef * qf);
}
/**
Impot sur le revenu
@param[in] rv - revenu
@param[in] qf - quotient familial
@return l’impot sur le revenu
*/
Pour pouvoir calculer le quotient familial (QF), il faut connaı̂tre le nombre de personnes
à charge du contribuable ainsi que son statut familial. On représente ce statut par un
caractère :
• ’c’ pour Célibataire ne vivant pas en concubinage.
• ’u’ pour célibataire vivant en Union-libre ou Divorcé (avec enfants).
• ’m’ pour Marié.
Unisciel algoprog – Impôt sur le revenu [ca03] 5
Déduisez une fonction saisirStatut() qui saisit et renvoie le statut familial du contri-
buable. Elle pose des questions auxquelles le contribuable répond par oui ou non. Voici
un exemple d’exécution :
Etes vous célibataire: caractere (o,n,O,N)? o
Vivez-vous en concubinage: caractere (o,n,O,N)? n
Solution simple
On déclare une variable rep pour saisir la réponse de l’utilisateur. On pose la question du
célibat et on élimine le cas simple (réponse ’n’), le statut étant alors ’m’ (marié). Donc
dans la clause Sinon, on pose alors la question du concubinage et selon la réponse de
l’utilisateur, on met ’u’ (union-libre) ou ’c’ (célibataire) dans le statut que l’on retourne
finalement.
/**
Constante de statut familial
*/
final static char CONCUBINAGE = ’u’;
/**
Constante de statut familial
*/
final static char MARIE = ’m’;
/**
Saisie du statut familial
@return le statut familial
*/
}
else
{
System.out.print("Vivez-vous en concubinage (o/n)? ");
rep = input.next().charAt(0);
statut = (rep == ’o’ || rep == ’O’ ? CONCUBINAGE : CELIBATAIRE);
}
return statut;
}
Le quotient familial (QF) est le nombre de parts dont bénéficie le contribuable. Il est
fonction de sa situation de famille comme décrit ci-après :
if (npers >= 1)
{
rs += incr1pers;
}
if (npers >= 2)
{
rs += 0.5 + (npers - 2);
}
return rs;
}
/**
Quotient familial
@param[in] statut - statut familial parmi une des constantes
@param[in] npers - nombre de personnes à charge >= 0
@return le quotient familial
*/
Écrivez alors une procédure test_quotientFamilial qui demande à l’utilisateur son statut
familial et le nombre de personnes à charge puis calcule et affiche le nombre de parts de
son quotient familial.
Un couple ne vivant pas en concubinage veut savoir s’il est avantageux de se marier.
Voici un exemple :
Revenu imposable de l’homme? 30000
Nombre de personnes à charge de l’homme? 2
Revenu imposable de la femme? 20000
Nombre de personnes à charge de la femme? 1
==> Impot séparés : 882 euros
==> Impot mariés : 1562 euros
==> Restez séparés
input.useLocale(Locale.US);
double rvh;
System.out.print("Revenu global imposable (en euros) de l’homme? ");
rvh = input.nextDouble();
int npersh;
System.out.print("Nombre de personnes a charge? ");
npersh = input.nextInt();
double rvf;
System.out.print("Revenu global imposable (en euros) de la femme? ");
rvf = input.nextDouble();
int npersf;
System.out.print("Nombre de personnes a charge? ");
npersf = input.nextInt();
double qf1 = impotRevenu(rvh,quotientFamilial(CELIBATAIRE,npersh));
double qf2 = impotRevenu(rvf,quotientFamilial(CELIBATAIRE,npersf));
double isepares = qf1 + qf2;
double imaries = impotRevenu(rvh + rvf,quotientFamilial(MARIE,npersh + npersf));
System.out.println("==> Impot separes : " + isepares + " euros");
System.out.println("==> Impot maries : " + imaries + " euros");
if (isepares < imaries)
{
System.out.println("==> Restez separes");
}
else
{
System.out.println("==> Mariez-vous");
}
System.out.println("== Calculs detailles ==");
afficherFicheImpots(rvh,CELIBATAIRE,npersh);
afficherFicheImpots(rvf,CELIBATAIRE,npersf);
afficherFicheImpots(rvh + rvf,MARIE,npersh + npersf);
}
Exemple
Un couple marié sans enfants a 2 parts. S’il a un revenu imposable de 146060 euros, cela
donne un revenu par part de 146060/2 = 73030 euros.
Sur ce revenu imposable net de 73030 euros on paye :
Unisciel algoprog – Impôt sur le revenu [ca03] 13
Écrivez une fonction imposition2(rv,binf,taux) qui, pour un revenu annuel rv (réel), une
borne inférieure binf (réel) et un taux d’imposition taux (réel), calcule et renvoie la valeur
de l’expression : (rv-binf)*taux.
Écrivez une fonction impotRevenu2(rv,qf) qui calcule et renvoie l’impôt sur le revenu cor-
respondant au revenu imposable rv (réel) et au nombre de parts du quotient familial qf
(réel) selon le calcul détaillé. Ne gardez pas les centimes dans le résultat final.
/**
Impot sur le revenu
@param[in] rv - revenu
@param[in] qf - quotient familial
@return l’impot sur le revenu
*/
double rs = 0.0;
if (rpart > 9710)
{
if (rpart <= 26818)
{
rs += imposition2(rpart,9710,0.14);
}
else
{
rs += imposition2(26818,9710,0.14);
if (rpart <= 71898)
{
rs += imposition2(rpart,26818,0.30);
}
else
{
rs += imposition2(71898,26818,0.30);
if (rpart <= 152260)
{
rs += imposition2(rpart,71898,0.41);
}
else
{
rs += imposition2(152260,71898,0.41);
rs += imposition2(rpart,152260,0.45);
}
}
}
}
return Math.floor(rs * qf);
}
public static double imposition3(double rv, double binf, double bsup, double taux)
{
double rs = 0.0;
if (rv < binf)
{
rs = 0.0;
}
else if (rv < bsup)
{
rs = (rv - binf) * taux;
}
else
{
rs = (bsup - binf) * taux;
Unisciel algoprog – Impôt sur le revenu [ca03] 15
}
return rs;
}
/**
Impot sur le revenu
@param[in] rv - revenu
@param[in] qf - quotient familial (uniqt 1)
@return l’impot sur le revenu
*/
Solution commentée
La fonction impotRevenu3 utilise la fonction imposition3 permettant de réaliser une suite
d’alternatives Si. Elle effectue systématiquement les quatre tests. Son intérêt est sa lisi-
bilité et sa symétrie.
La fonction imposition3(rv,binf,bsup,taux) calcule et renvoie l’impôt de la tranche, étant
donnés un revenu annuel rv, la borne inférieure de la tranche binf, la borne supérieure
de la tranche bsup et le taux d’imposition taux de la tranche. Elle renvoie 0.0 si rv est
inférieur à binf.
Écrivez alors une procédure test_impotRevenu2 qui saisit le revenu imposable ainsi que le
nombre de parts du quotient familial, puis calcule et affiche l’impôt sur le revenu grâce
aux méthodes (méthode simple et méthode détaillée).
2 Références générales
Comprend [Routier-PG1]