Poster un nouveau sujet Poster une réponse
Programme impôts
Auteur Message
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Jeu 09 Jui 2011, 20:27   Citer 

Bonsoir! Aujourd'hui, dernier cours de SES de l'année, il était temps, au programme calcul sur les impôts... Ayant fini avant, je me lance dans un petit programme vite fait avec les formules fournies... Vous y connaissez vous?
Voilà le programmes plus ou moins optimiser... ^^
ps: désoler pour la syntaxe, mais en copiant collant de TI-Editor, j'ais eu tt les caractères spéciaux... Je remplace parles touches entre crochets;
Pour info (^^) [->] c'est la touche Sto...

Code
:Lbl A
:EffEcr
:Input "REVENU ANNUEL? ",[THETA]
:.9[THETA][->]R:
:Input "NB D'ADULTES? ",A
:Input "NB D'ENFANTS? ",E
:If E[INFERIEUR OU EGAL]2:E/2[->]E
:If E>2:1+(.3(E-2))[->]E:
:If E=0:0[->]E
:E+A[->]N
:R/N[->]Q
:If Q[INFERIEUR OU EGAL]5875
:0[->]I
:0[->]T
:I/[THETA][->]X
:End
:If Q>5875 et Q[INFERIEUR OU EGAL]11720
:Then
:5.5[->]T
:(.055R)-(323.13N)[->]I
:I/[THETA]100[->]X
:End
:If Q>11720 et Q[INFERIEUR OU EGAL]26030
:Then
:14[->]T
:(.14R)-(1319.33N)[->]I
:I/[THETA]100[->]X
:End
:If Q>26030 et Q[INFERIEUR OU EGAL]69783
:Then
:30[->]T
:(.3R)-(5484.13N)[->]I
:I/[THETA]100[->]X
:End
:If Q>69783
:Then
:40[->]T
:(.4R)-(12462.43N)[->]I
:I/[THETA]100[->]X
:End
:EffEcr
:Disp "QUOTIENT","FAMILIAL:
:Output(2,11,Q
:Output(3,1,"IMPOTS:
:Output(3,9,I
:Pause
:EffEcr
:Disp "TAUX","MARGINAL:
:Output(2,11,T
:Output(3,1,"TAUX
:Output(4,1,"MOYEN:
:Output(4,8,X
:Pause
:Menu("IMPOTS","RECOMMENCER",A,"QUITTER",B
:Lbl B
:EffEcr
:Output(1,1,"


Voilà le lien du .8xp:http://www.megaupload.com/?d=I12HLJSU

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 09 Jui 2011, 20:54   Citer 

Je ne peut pas te commenter le programme du point de vue des fomules de SES (j'y ai miraculeusement échapé en fuyant en 1erS), mais ça m'a au premier coup d'oeil l'ai pas mal quoiqu'optimisable


Code
:Lbl A
:EffEcr
:Input "REVENU ANNUEL? ",[THETA]
:.9[THETA][->]R:
:Input "NB D'ADULTES? ",A
:Input "NB D'ENFANTS? ",E
:If E[INFERIEUR OU EGAL]2:.5E[->]E       //.5E est un peut plus rapide que E/2
:If E>2:.4+.3E[->]E:                     //1+(.3(E-2))=1+(-.6+.3E)=.4+.3E
         //ne rien mettre  If E=0:0[->]E ne sert à rien : si E vaut déjà 0, il est inutile de lui affecter 0
:E+A[->]N
:R/N[->]Q
:If Q[INFERIEUR OU EGAL]5875           //il ne manquerait pas un :Then
:EffVar I:Effvar TI/[THETA][->]X       // supprime le ":" s'il y a bien un Then
:End
:If Q>5875 et Q[INFERIEUR OU EGAL]11720
:Then
:5.5[->]T
:.055R-323.13N[->]I                //ici
:I/[THETA]100[->]X         //??? I/([théta]*100) ou I/[théta] *100. Si cas n°1,                           .01I/[théta]. Si cas n°2, 100I/[théta]
:End
:If Q>11720 et Q[INFERIEUR OU EGAL]26030
:Then
:14[->]T
:.14R-1319.33N[->]I           //ici
:I/[THETA]100[->]X            //idem quelques lignes audessus
:End
:If Q>26030 et Q[INFERIEUR OU EGAL]69783
:Then
:30[->]T
:.3R-5484.13N[->]I          //ici
:I/[THETA]100[->]X          //idem quelques(s) lignes audessus
:End
:If Q>69783
:Then
:40[->]T
:.4R-12462.43N[->]I      //ici
:I/[THETA]100[->]X       //idem plus haut
:End
:EffEcr
:Disp "QUOTIENT","FAMILIAL:
:Output(2,11,Q
:Output(3,1,"IMPOTS:
:Output(3,9,I
:Pause
:EffEcr
:Disp "TAUX","MARGINAL:
:Output(2,11,T
:Output(3,1,"TAUX
:Output(4,1,"MOYEN:
:Output(4,8,X
:Pause
:Menu("IMPOTS","RECOMMENCER",A,"QUITTER",B
:Lbl B
:EffEcr
:"              //idem sauf qu'en attérit sur la seconde ligne (sans le fait mais que l'on économise des octés



----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Jeu 09 Jui 2011, 20:59   Citer 

Effectivement l'histoire du If E=0... J'ai été un peu bête... crazy.gif J'ai honte... crazy.gif
Sais tu ce qui est le plus rapide/prend le moins de place entre 0->E et EffVar E???

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 09 Jui 2011, 21:07   Citer 

EffVar libère la mémoire de la variable et occupe un octet de moins et la prochaine instruction peut y être collé sans ":". On gagne 15 octet de variable et 2 octets de code.
C'est très légèrement plus rapide.

exemple : EffVar AEffVar BClrHome

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Jeu 09 Jui 2011, 21:10   Citer 

Ok merci bien! Quand on regarde bien, c'est logique que ça prennes moins de place... crazy.gif

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 09 Jui 2011, 21:13   Citer 

En vitesse Effvar E est plus rapide (il n'y a pas de résultat).
En mémoire, c'est parreil en soit (car Effvar prend 2 octés) mais après Effvar E, les deuxpoints sont facultatifs (donc l'octé corespondant est économisé) sauf avant un End; ATTENTION : Effvar Xinstruction non séparée par ":", compte pour une seule instruction donc, par example :

Code
0 -> G
2 -> F
If 0     //condition jamais réalisée (tu peut remplacer par G=1 si ça te perturbe
Effvar F3 -> G


Doone F=2 (logique) et G=0 (car le 3 -> G fais partit de la même instruction que le Effvar E)

Pour plus de détails, va voir le tuto https://web.archive.org/web/20121014224732/http://www.siteduzero.com/tutoriel-3-407892-apprenez-a-programmer-en-ti-basic.html, partie 3 : "grenier des astuces", chapitre 1 : "optimisation", paragraphe "La magie de Delvar" (Delvar=Effvar)

En espérant avoir été assez clair,
Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 09 Jui 2011, 21:26   Citer 

Et le joli bug trouvé par un débutant de notre forum et que j'ai expliqué avant de connaître le tuto :
Il ne faut pas mettre de "End" sur la ligne des EffVar s'il ferme un Then.


Code
If A
Then
...
EffVar BEnd  // à éviter sinon le End n'est pas détecté lorsque A=0



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Jeu 09 Jui 2011, 21:27   Citer 

Je crois avoir compris, merci! =)

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes