Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
DM sur les fractions égyptiennes
francis le 05/01/2014 à 11:31
Bonjour,
Suite a un DM sur lequel je bloque depuis une semaine a cause d'un seul mot

, qui sait comment écrire " arrondi supérieur " en language ti-82 ?
Merci d'avance.
linkakro le 05/01/2014 à 11:50
Quand tu n'as pas une fonction pour le faire, tu dois le faire avec des conditions ou des astuces mathématiques.
La calculatrice TI 82 dispose de trois manières d'arrondir bien que ce vocabulaire "arrondir" soit faux.
-round(X,N) pour arrondir x à n décimales, en respectant la comparaison à 5.
-int(X) pour réduire à l'entier inférieur ou égal
-iPart(X) pour tronquer
Note que int et iPart ne sont pas équivalents dans le domaine négatif.
Tu n'as pas dis explicitement si tes nombres sont positifs.
"arrondi suppérieur" est ambigu car cela ne fait pas la différence entre troncature, excès et réduction.
EDIT : Je traite l'arrondi par excès.
Je te conseille d'utiliser int puis d'incrémenter si le nombre n'était pas déjà entier. Cela fonctionne dans tous les réels.
Code
int(X->I
If X-I // X différent de I
I+1->I
//
Astuce mathématique (proposée par m@thieu41 ailleurs) : rendre le nombre négatif, réduire à l'inférieur, puis rendre positif. Ne fonctionne bien sûr que si le nombre de départ est positif.
EDIT : car on obtiendrait le nombre algébriquement suppérieur, pas l'arrondi par excès. m@thieu41 le 05/01/2014 à 11:51
Bonjour,
("Langage ti82" c'est un peu flou : il s'agit du ti basic, mais attention au modèle (ti82 ce n'est pas la même chose que ti82stats) ).
Un arrondi "standard" est simple à faire (avec la fonction round(nombre,précision) ). (arrondi sur ti82stats.fr)
Une troncature se fait avec iPart (ent sur une ti82stats.fr).
Pour arrondir par excès il faut ruser:
Soit A le nombre à arrondir
Code
sur 82: -int -A
sur 82stats: -int(-A
sur 82stats.fr: -PartEnt(-A
int/partEnt se trouve dans le menu MATH, onglet NUM
- c'est celui à côté du point.
Explications:
int(nombre) donne le premier entier inférieur ou égal au nombre passé en argument.
(tu peux t'en servir pour arrondir par défaut un nombre)
int(5.5) = 5
int(-5.5) = 6
int(6) = 6
Donc en prenant l'entier inférieur ou égal à l'opposé du nombre, c'est comme si on prenait l'opposé de l'arrondi du nombre.
Ex: int(-5.5) = -6
et si on arrondi 5.5 par excès on obtient 6.
int(5.5) = 5
et si on arrondi -5.5 par excès on obtient -5.
Donc -int(-nombre) donne bien l'arrondi par excès de nombre.
J'espère ne pas t'avoir embrouillé avec mes explications, demande s'il y a des points à éclaircir
EDIT: Linka a posté avant moi, mais l'astuce marche aussi pour les nombres négatifs.
francis le 05/01/2014 à 11:55
Merci . Que veut dire ton // car je ne comprend pas ^^m@thieu41 le 05/01/2014 à 11:57
C'est juste pour indiquer qu'il y a des commentaires après (c'est une convention dans de nombreux langages, mais pas en ti-basic, bien qu'on s'en serve souvent dans les codes qu'on poste sur le forum).
Je supprime si ça te gène.francis le 05/01/2014 à 11:58
D'accord

Je revient d'ici une demi-heure pourvoir le résultat et vous tenir au courant :p
linkakro le 05/01/2014 à 12:06
Source qu'on aurait pu signaler.
https://tout82.pages-perso.fre[...].php?sujet=2317
Je maintien que l'opposition de signe des nombres négatifs pose un problème.
Cela donne le nombre algébriquement suppérieur mais pas l'arrondi par excès de la valeur absolue.
C'est l'expression "arrondi suppérieur" qui porte à confusion.
"arrondi par excès" est différent de "arrondi au nombre entier algébriquement suppérieur".
-int(-2.6=3
-int(--2.6=-2
francis le 05/01/2014 à 12:07
Nouveau problème --' Quand je fait tourner mon algorithme, je rentre mes nombres A et B de départ et a la fin on doit m'afficher un nombre P mais quand je l'exécute, Il me dit juste Fait et ne m'affiche rien . Qui a une solution pour moi ?

linkakro le 05/01/2014 à 12:13
Il faut commander l'affichage avec Disp, Pause, Output() ou Text().
Ce serait automatique si l'expression à afficher était sur la dernière commande du programme.
francis le 05/01/2014 à 12:30
C'est bien ce que j'ai fait et cela m'affiche 1 .
En fait il faut écrire un algorithme pour démontrer que la fraction 11/12 s'écrit en fraction égyptiennes : 1/2 + 1/3 + 1/12 .
On nous donne :
- A partir d'une fraction a/b < 1 , déterminer le plus petit entier p tel que p > ou = b/a
Mémoriser p ( donc dans la calculette je ne sais pas comment le retenir ou le mémoriser )
- Calculer a/b - 1/p . Si cette fraction vaut 0, passez a l'étape 3 ; Sinon reprendre du début avec la. nouvelle fraction obtenu .
- On écrit la décomposition de a/b en la somme des inverses de tous les entiers p mémorisés .
Voilà --' Help ! Merci a ceux qui consacreront leurs temps a ce problême

linkakro le 05/01/2014 à 13:58
a/b<1 <=> a<b donc on peut simplifier l'écriture de la condition.
Je réaliserai cette vérification avec une boucle.
Je vérifierai aussi que les nombres sont entiers et strictement positifs.
Tu peux enlever cette boucle si tu respectes les conditions en effectuant la saisie.
Trouver P est déjà résolu. Et on peut même utiliser une boucle pour se rapprocher de la phrase.
Tu considères plusieurs P. Tu dois donc les stocker quelque part où tu pourras les différencier. Le TI-Basic n'a que des variables globales donc tu devras utiliser une variable à plusieurs champs comme une liste.
Ou bien on évite de tout conserver et on affiche au fur et à mesure.
Je préfère stocker dans une liste et afficher une seule fois à la fin.
Je ne gérerai pas de dimension des listes pour faire plus simple, car affecter le prochain terme incrémente la taille en même temps.
Tu peux stocker des nombres réels et afficher en fraction (ou plutôt essayer) avec >Frac.
Code
ClrList L1
Repeat A<B and A>0 and B>0 and not(fPart(A)) and not(fPart(B
Prompt A,B
End
A/B->F
0->N
While F // tant que F est non-nul (vrai la première fois)
-int(-1/F->P // excès de b/a
F-1/P->F
N+1->N
P->L1(N
End
Pause 1/L1>Frac
La pause permet de défiler avec les flèches quand cela dépasse de l'écran.
Comme c'est à la fin, on peut enlever la pause : les défilements fonctionneront tant qu'on n'aura pas fait autre chose, et il n'y a pas besoin de valider avec Entrer.
Je conseille aussi d'afficher seulement L1 en tant que dénominateur.
Pause L1
-----
Je n'ai pas confiance en les calculs récurrents sur un nombre réél.
(par contre à l'affichage final cela est bien pratique)
Je réduis au même dénominateur moi-même a/b-1/p et je conserve a et b séparément dans des listes.
a/b-1/p=(ap-b)/(bp)
En considérant des suites, a(n+1)=a(n)*p(n)-b(n) et b(n+1)=b(n)*p(n)
Puis il suffit de vérifier que A est nul pour savoir si la fraction est nulle.
Code
ClrList L1
Repeat A<B and A>0 and B>0 and not(fPart(A)) and not(fPart(B
Prompt A,B
End
0->N
While A // tant que A est non-nul (vrai la première fois)
-int(-B/A->P
AP-B->A
BP->B
N+1->N
P->L1(N
End
Pause 1/L1>Frac
francis le 05/01/2014 à 16:19
Merci beaucoup j'essaye de le faire en language ti82 stats-frfrancis le 05/01/2014 à 16:28
Mais quand affiche t on P ?francis le 05/01/2014 à 16:38
Je n'y arrive pas --' Pouvez vous traduire cet algorithme en langage TI-82 Stats.fr ?m@thieu41 le 05/01/2014 à 16:43
Le langage est le même (Ti basic).
Pour voir la correspondance des fonctions, tu peux regarder ici:
https://tout82.forumactif.org/[...]du-ti-basic-z80
ClrList = EffListes
fPart = partDéc
On affiche toutes les fractions à la fin:
Pause 1/L1>Frac
Toutes les valeurs de P sont dans L1, donc en affichant 1/L1 sous forme de fraction, on affiche toutes les fractions.
francis le 05/01/2014 à 16:58
Et ou est efflistes ?linkakro le 05/01/2014 à 18:11
Désormais indique ton modèle exact dès le début des discussions. Ainsi on pourra écrire les codes directement dans ta langue.
J'ai supposé que tu avais une Ti82stats, mais j'aurais pu en rester à Ti82 et ce serait pire.
Le catalogue de ma signature et que m@thieu41 t'a donné montre les emplacements. Et toutes les fonctions sont dans le catalogue. les variables sont sur le clavier ou dans le menu var.
ClrList=EffListe se trouve dans stat+4 (pour tous les modèles de 82 à 84plusCSE)
Sâche que L1 est la liste saisie par 2nde+1.
Je viens à peine de supprimmer dans mon code L2 qui ne sert à rien et corrigé un commentaire qui désignait A au lieu de F.francis le 05/01/2014 à 22:43
Ouf je viens enfin de réussir a le taper et tourne a merveille

Yes !
Encore merci

Affaire résolu !

Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.