Rechercher
Connexion
Chatbox externe
Derniers sujets
Partenaires
TI-Planet | Espace-TI : Forum |
Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)
Les posteurs les plus actifs du mois
Aucun utilisateur |
Résultat étrange avec booléens
2 participants
Tout 82 :: Programmes :: Les Programmes des Internautes (TI-Basic z80) :: Aide à la programmation (TI-Basic z80)
Page 1 sur 1
Résultat étrange avec booléens
Salut à tous !
L'autre jour notre prof nous a "prescrit" un programme pour réaliser l'encadrement d'une solution par dichotomie. Un truc à la con donc, vraiment pas compliqué.
Seulement j'ai pas pu m'empêcher de le revoir un petit coup pour l'optimiser, et j'ai rencontré un problème dans la gestion de conditions à partir de booléens. Ce type de choses ne me pose d'habitude aucun problème dans mes codes, mais là on voit que le résultat diffère selon si les booléens sont utilisés ou pas.
Le code fonctionnel, sans les booléens :
Après vérification, pour ces entrées les bonnes valeurs de A et B en sortie sont bien celles que j'ai citées dans ce code.
Maintenant, le code défectueux qui me semble pourtant correct :
Dans le cas n°1, les valeurs en sortie sont 0 et 2. Dans le cas n°2, les valeurs en sortie sont 3,9921875 et 4, avec bien sûr les mêmes valeurs en entrée. Dans le cas 1+2, les valeurs en sortie sont 2 et 4.
Voilà, je comprends pas bien ce qui se passe, pourquoi lorsque j'utilise un booléen qui a a priori le même effet je n'obtiens pas le même résultat.
L'autre jour notre prof nous a "prescrit" un programme pour réaliser l'encadrement d'une solution par dichotomie. Un truc à la con donc, vraiment pas compliqué.
Seulement j'ai pas pu m'empêcher de le revoir un petit coup pour l'optimiser, et j'ai rencontré un problème dans la gestion de conditions à partir de booléens. Ce type de choses ne me pose d'habitude aucun problème dans mes codes, mais là on voit que le résultat diffère selon si les booléens sont utilisés ou pas.
Le code fonctionnel, sans les booléens :
- Code:
Input "Y1=?",Str1
Prompt A,B,E
Str1->Y1
Repeat E-B+A>0
.5(A+B->M
If Y1(A)Y1(M)≤0
Then
M->B
Else
M->A
End
End
Disp A,B
// Valeurs à l'entrée : Y1=x^3-6x^2+6
//A=0 ; B=4 ; E=0,01
//Valeurs en sortie : A=1,1015625 ; B=1,109375
Après vérification, pour ces entrées les bonnes valeurs de A et B en sortie sont bien celles que j'ai citées dans ce code.
Maintenant, le code défectueux qui me semble pourtant correct :
- Code:
Input "Y1=?",Str1
Prompt A,B,E
Str1->Y1
Repeat E-B+A //<-Cas n°1
.5(A+B->M
If not(Y1(A)Y1(M //<-Cas n°2
Then
M->B
Else
M->A
End
End
Disp A,B
Dans le cas n°1, les valeurs en sortie sont 0 et 2. Dans le cas n°2, les valeurs en sortie sont 3,9921875 et 4, avec bien sûr les mêmes valeurs en entrée. Dans le cas 1+2, les valeurs en sortie sont 2 et 4.
Voilà, je comprends pas bien ce qui se passe, pourquoi lorsque j'utilise un booléen qui a a priori le même effet je n'obtiens pas le même résultat.
Mingerton- ----------------------
- Messages : 251
Points Concours : 103
Productivité : 5
Date d'inscription : 10/10/2013
Localisation : Comté de Kerry, Irlande
Re: Résultat étrange avec booléens
Tu as oublié le raisonnement de conversion entre nombre et booléen dans les langages C et TI-Basic.
Tu dois effectuer des comparaisons d'ordre tandis que tes modifications effectuent uniquement des comparaisons d'égalité à zéro.
En effet tout nombre non nul est vrai et seul zéro est faux.
Tu dois effectuer des comparaisons d'ordre tandis que tes modifications effectuent uniquement des comparaisons d'égalité à zéro.
En effet tout nombre non nul est vrai et seul zéro est faux.
- Code:
If A
If A!=0
If not(A
If A=0
If A>0
If not(A<=0
- Code:
E-B+A>0
E>B-A
E-B+A
E-B+A != 0
If Y1(A)Y1(M)≤0
Y1(A)<0 and Y1(M)>0 or Y1(A)>0 and Y1(M)<0 or Y1(A)Y1(M)=0
not(Y1(A)Y1(M
Y1(A)Y1(M)=0
Dernière édition par Linkakro le Mar 11 Nov 2014 - 17:25, édité 1 fois
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Résultat étrange avec booléens
Ah ok ! je pensais qu'un négatif correspondait à faux, alors qu'en fait c'est que 0. Donc du coup je pense que je vais laisser le code où il est, puisque j'y gagne rien en espace et en vitesse avec des "optimisations" en plus.
Deux derniers trucs :
- Y a t'il un moyen plus simple de demander l'expression de la fonction autrement qu'en passant par une chaîne, comme je l'ai fait ?
- Lorsque je retire la dernière parenthèse de la ligne, les affichages changent. Comment ça se fait ?
Merci en tout cas (pour le compliment sur la condition)
Deux derniers trucs :
- Code:
Input "Y1=?",Str1 // Remarque n°1
Prompt A,B,E
Str1->Y1
Repeat E-B+A>0
.5(A+B->M
If Y1(A)Y1(M)≤0 // Remarque n°2
Then
M->B
Else
M->A
End
End
Disp A,B
- Y a t'il un moyen plus simple de demander l'expression de la fonction autrement qu'en passant par une chaîne, comme je l'ai fait ?
- Lorsque je retire la dernière parenthèse de la ligne, les affichages changent. Comment ça se fait ?
Merci en tout cas (pour le compliment sur la condition)
Mingerton- ----------------------
- Messages : 251
Points Concours : 103
Productivité : 5
Date d'inscription : 10/10/2013
Localisation : Comté de Kerry, Irlande
Re: Résultat étrange avec booléens
Il est possible de saisir une équation de courbe Y# avec Prompt ou Input, mais cela obligera à ajouter des guillemets comme pour Prompt d'une chaîne Str#.
Voici comment est interpétée ta condition sans la dernière parenthèse fermante et la solution pour l'éviter.
Voici comment est interpétée ta condition sans la dernière parenthèse fermante et la solution pour l'éviter.
- Code:
erreur
Y1(A)Y1(M≤0
Y1(A)Y1(M≤0)
solution
0≥Y1(A)Y1(M
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Résultat étrange avec booléens
Pour la parenthèse, j'ai pensé à ça aussi, mais je voulais comprendre ce qui se passait.
Donc on a quelque chose comme ça :
Ok c'est parfait !
Donc on a quelque chose comme ça :
- Code:
Prompt Y1,A,B,E
Repeat E>B-A
.5(A+B->M
If 0≥Y1(A)Y1(M
Then
M->B
Else
M->A
End
End
Disp A,B
Ok c'est parfait !
Mingerton- ----------------------
- Messages : 251
Points Concours : 103
Productivité : 5
Date d'inscription : 10/10/2013
Localisation : Comté de Kerry, Irlande
Re: Résultat étrange avec booléens
Tu as oublié depuis ta seconde intervention que tu peux écrire E>B-A. J'édite ton dernier message directement pour ne pas se répéter.
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Sujets similaires
» CodeTouche avec clignotement
» Afficher un résultat en fonction de son nombre de caractère
» Optimisation avec DelVar
» problème avec Python
» Problème avec un Morpion
» Afficher un résultat en fonction de son nombre de caractère
» Optimisation avec DelVar
» problème avec Python
» Problème avec un Morpion
Tout 82 :: Programmes :: Les Programmes des Internautes (TI-Basic z80) :: Aide à la programmation (TI-Basic z80)
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Dim 16 Oct 2022 - 21:11 par Wistaro
» Bonne année 2018!
Ven 2 Nov 2018 - 19:42 par Ti64CLi++
» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026
» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro
» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41
» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro
» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++
» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++
» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++