Impôt sur le revenu [ca03] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 10 avril 2015 Table des matières 1 Impôt sur le revenu / pg-impotrva1 (alg) 1 1.1 Fonction impotrevenu............................ 1 1.2 Procédure saisirstatutfamilial........................ 3 1.3 Fonction quotientfamilial.......................... 4 1.4 Procédure afficherficheimpot........................ 5 1.5 Est-il avantageux de se marier?....................... 7 1.6 Calcul détaillé de l impôt........................... 8 1 Impôt sur le revenu / pg-impotrva1 (alg) Mots-Clés Calculs, Algorithmique, Programmation, C++. Requis Structures de base, Structures conditionnelles, Algorithmes paramétrés. Cet exercice calcule l impôt sur le revenu. 1.1 Fonction impotrevenu L impôt sur le revenu se calcule en fonction du revenu par part. Le barème de calcul est le suivant : Rpart = R / QF Montant de l impôt brut (R=revenu imposable, QF=quotient familial) (en euros) N excédant pas 5 963 euros 0 de 5 963 à 11 896 euros R 0.055 327.97 QF de 11 896 à 26 420 euros R 0.14 1339.13 QF de 26 420 à 70 830 euros R 0.30 5566.33 QF au-delà de 70 830 euros R 0.41 13247.63 QF Exemple Soient un revenu imposable de 30000 et un quotient familial de 1.5. Alors le revenu par 1
Unisciel algoprog Impôt sur le revenu / ca03 2 part vaut 30000/1.5=20000 ce qui correspond à la fourchette : «de 11 896 à 26 420 euros» (3è formule). Écrivez une fonction imposition1(rv,qf,taux,coef) qui, pour un revenu annuel rv (réel), un quotient familial qf (réel), un taux d imposition taux (réel) et un coefficient coef (réel), calcule et renvoie la valeur de l expression rv*taux-coef*qf. Écrivez une fonction impotrevenu(revenu,qf) qui calcule et renvoie l impôt correspondant au revenu imposable revenu (réel) et au nombre de parts du quotient familial qf (réel). Ne gardez pas les centimes dans le résultat final. Attention, les comparaisons s effectuent par rapport au revenu par part et non pas le revenu imposable. Aide simple Déclarez une variable rs pour le résultat et une variable rpart pour le revenu par part. Écrivez des structures Si en cascade (son équivalent en programmation) et utilisez la fonction imposition1 avec les bons paramètres. Outil alg L opération x s écrit Ent(x). Validez vos fonctions avec la solution. alg @[impotrva1a.alg] Écrivez une procédure test_impotrevenu qui demande à l utilisateur son revenu imposable et le nombre de parts de son quotient familial. Affichez les invites : Revenu global imposable (en euros)? Nombre de part du coefficient familial? Calculez et affichez l impôt sur le revenu : ==> Votre impot est... euros
Unisciel algoprog Impôt sur le revenu / ca03 3 alg @[pg-impotrva1a.alg] 1.2 Procédure saisirstatutfamilial Pour pouvoir calculer le quotient familial (QF), il faut donc connaître le statut familial du contribuable. 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é. Écrivez une procédure saisirouinon(txt,rep) qui affiche la chaine de caractères txt puis saisit le caractère dans rep jusqu à ce qu il soit o ou n. Aide détaillée L erreur classique est d écrire : Si (rep = o) Alors... Ce test compare les éléments rep et o et non pas l élément rep à la lettre o. Pour réaliser ceci, il faut écrire : Si (rep = o ) Alors... Écrivez une procédure saisirstatutfamilial(statut,npers) qui demande et restitue le statut familial du contribuable dans statut (caractère) et le nombre de personnes à charge dans npers (entier). Pour le statut, la procédure pose des questions auxquelles le contribuable répond par oui ou non. Voici un exemple d exécution. Etes vous célibataire (o/n)? o Vivez-vous en concubinage (o/n)? n Nombre de personnes à charge? 2 Aide détaillée Avant de commencer à rédiger une procédure (ou une fonction), réfléchissez toujours aux transmissions de paramètres. Dans le cas présent, le statut statut et le nombre de personnes npers, sont-ce des entrées (données D), des sorties (résultats R) ou des mixtes (DR) pour la procédure? De cette réflexion, écrivez l en-tête de votre procédure. Passez ensuite au corps de la procédure. Déclarez une variable rep pour saisir la réponse de l utilisateur. Posez la question du célibat. Éliminez le cas simple (réponse n ), le statut étant alors m (marié). Donc dans la clause Sinon (son équivalent en programmation), posez la question du concubinage et selon la réponse de l utilisateur, mettez u (unionlibre) ou c (célibataire) dans statut.
Unisciel algoprog Impôt sur le revenu / ca03 4 Rappel de cours alg Les paramètres résultats sont préfixés par le mot-clé R. Validez vos procédures avec la solution. alg @[impotrva1b1.alg] 1.3 Fonction quotientfamilial 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 : Célibataire ne Célibataire vivant vivant pas en en concubinage ou Couple marié concubinage Divorcé (enfant) Statut Familial c u m Sans personne à charge 1 part 1 part 2 parts Avec 1 personne à charge 2 parts 1.5 part 2.5 parts Avec 2 personnes à charge 2.5 parts 2 parts 3 parts Chaque personne à charge suivante +1 part +1 part +1 part Écrivez une fonction QFcelibataire(npers) qui calcule et renvoie le nombre de parts du quotient familial d un Célibataire (ne vivant pas en concubinage) ayant npers (entier) personnes à charge. Écrivez une fonction QFconcubinage(npers) qui calcule et renvoie le nombre de parts du quotient familial d un célibataire vivant en Concubinage ou Divorcé (enfant) ayant npers (entier) personnes à charge. Écrivez une fonction QFmarie(npers) qui calcule et renvoie le nombre de parts du quotient familial d un couple Marié ayant npers (entier) personnes à charge. Déduisez une fonction quotientfamilial(statut,npers) qui calcule et renvoie le nombre de parts du quotient familial de la personne de statut familial statut (caractère) ayant npers (entier) personnes à charge.
Unisciel algoprog Impôt sur le revenu / ca03 5 Validez vos fonctions avec la solution. alg @[impotrva1b2.alg] É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. alg @[pg-impotrva1b.alg] 1.4 Procédure afficherficheimpot Ce problème utilise la fonction impotrevenu, la fonction quotientfamilial et la procédure saisirstatutfamilial.
Unisciel algoprog Impôt sur le revenu / ca03 6 Écrivez une procédure afficherficheimpot(revenu,statut,npers) qui, à partir du revenu imposable revenu (réel), du statut familial statut (caractère) du contribuable et du nombre de personnes à charge npers (entier), affiche la fiche récapitulative de l impôt sous la forme suivante : ==> Vous etes :... ==> Nombre de personnes a charge :... ==> Nombre de parts :... ==> Revenu imposable :... euros ==> Votre impot sur le revenu :... euros alg @[impotrva1c.alg] Écrivez alors une procédure test_impotfinal qui : Demande et saisit le revenu imposable de l utilisateur. Demande et saisit son statut familial et le nombre de personnes à charge. Affiche la fiche récapitulative de son impôt.
Unisciel algoprog Impôt sur le revenu / ca03 7 alg @[pg-impotrva1c.alg] 1.5 Est-il avantageux de se marier? Un couple ne vivant pas en concubinage veut savoir s il est avantageux de se marier. Voici un exemple d exécution. 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 : 1296 euros ==> Impot mariés : 1643 euros ==> Restez séparés Écrivez une procédure saisirstatutperso(sexe,revenu,npers) qui demande et saisit le revenu imposable dans revenu (réel) et le nombre de personnes à charge dans npers (entier). Le paramètre sexe (caractère) contient la lettre h ( de l homme ) ou f ( de la femme ). Affichez les invites : Revenu imposable [texte du sexe]? Nombre de personnes à charge [texte du sexe]? Aide simple Ici encore réfléchissez à la transmission des paramètres. alg @[impotrva1d.alg] Écrivez une procédure test_mariage qui : Demande et saisit le revenu imposable et le nombre de personnes à charge du (futur?) mari. Demande et saisit le revenu imposable et le nombre de personnes à charge de la (future?) femme. Calcule l impôt séparé pour chaque personne. Calcule l impôt en tant que couple marié. Compare l impôt en tant que couple marié avec la somme des impôts séparés. Affiche s il est plus avantageux ou non d être marié. On pourra, à titre de comparaison, afficher chacune des fiches d impôt : celle de l homme, celle de la femme et celle du couple.
Unisciel algoprog Impôt sur le revenu / ca03 8 alg @[pg-impotrva1d.alg] 1.6 Calcul détaillé de l impôt En fait, le revenu imposable est soumis au barème progressif par tranches : On divise le revenu imposable par le nombre de parts du quotient familial. Ce revenu par part est imposé par tranches selon le barème suivant : jusqu à 5 963 euros : 0% de 5 963 euros à 11 896 euros : 5.5% de 11 896 euros à 26 420 euros : 14.0% de 26 420 euros à 70 830 euros : 30.0% au delà de 70 830 euros : 41.0% Le montant ainsi obtenu est multiplié par le nombre de parts du quotient familial. Exemple Un couple marié sans enfants a 2 parts. S il a un revenu imposable de 70060 euros, cela donne un revenu par part de 70060/2=35030 euros. Sur ce revenu imposable net de 35030 euros on paye : 0% sur la tranche inférieure à 5963 e 5.5% sur la tranche de revenu comprise entre 5963 e et 11896 e. Soit 5.5% (11896 5963) = 5.5% 5933 = 326.32 14% sur la tranche de revenu comprise entre 11896 e et 26420 e. Soit 14% (26420 11896) = 14% 14524 = 2033.36 30% sur la tranche de revenu supérieure à 26420 e. Soit 30% (35030 26420) = 30% 8610 = 2583 Soit au total : 326.32 + 2033.36 + 2583 = 4942.68. L impôt de ce couple marié est donc 2 4942.68 qui arrondi donne 9885 e.
Unisciel algoprog Impôt sur le revenu / ca03 9 É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(revenu,qf) qui calcule et renvoie l impôt sur le revenu correspondant au revenu imposable revenu (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. Outil alg L opération x s écrit Ent(x). Validez vos fonctions avec la solution. alg @[impotrva1e.alg] alg @[impotrva1e-autre.alg] Autre solution Commentaires 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 lisibilité et sa symétrie. La fonction imposition3(revenu,binf,bsup,taux) calcule et renvoie l impôt de la tranche, étant donnés un revenu annuel revenu, 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 si revenu est inférieur à binf. Écrivez alors une procédure test_impotrevenu2 qui : Demande et saisit le revenu imposable. Demande et saisit le nombre de parts du quotient familial. Calcule et affiche l impôt sur le revenu grâce aux deux méthodes (méthode simple et méthode détaillée).
Unisciel algoprog Impôt sur le revenu / ca03 10 alg @[pg-impotrva1e.alg]