Autorisation : Membre
Nb de messages : 106
Inscrit le : Sam 20 Avr 2013, 15:43
Posté le : Ven 03 Mai 2013, 15:01
Bonjour à tous !
Voilà j'ai le programme suivant, mais il n'y a que la première partie qui fonctionne, lorsque j'appuie sur entrée après que la calculatrice m'est affiché que le triangle ABC est rectangle ou non, la calculatrice m'affiche "Fait", et je n'ai pas de dessin alors qu'il y a la ligne de commande Pause à la fin.
Et il y a sûrement des optimisations à faire.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 03 Mai 2013, 17:43
C'est parce que tu n'as utilisé aucun End pour fermer les Else.
Si j'ai bien compris, il en faut deux avant le premier Pause.
Edit : message corrigé
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 03 Mai 2013, 17:52
J'ai fait des copier coller et des fautes. J'ai déjà fini d'éditer.
La notation unique ligne du language C n'existe pas en TI-Basic pour les Else.
Donc les End sont indispensables.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 03 Mai 2013, 18:26
Si tu lis bien le message définitif, tu verras que j'ai bien conseillé deux End. On peut seulement placer la pause juste avant ou juste après.
Ou alors je n'ai pas compris ce que signifie ta parenthèse "et un seul".
La structure est
Code
If point
Then
//point
Else
//calcul
If rectangle
Then
//rectangle
Else
//pas rectangle
End
End
//graphique
Si tu veux éviter le graphique quand on a un point, tu peux déplacer le second End à la fin du programme.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 03 Mai 2013, 18:44
Tu as pris quoi comme échelle ? Je vois que tu écartes la fenêtre des point de 1 mais cela est sujet à défaut pour des point proches de moins de 1 d'écart.
Pour que la fenêtre colle pour toute échelle, il faudrait le calculer avec une fraction de l'étendue.
Tu as erronné les coordonnées.
- texte(Y,X) VS ligne(X,Y,X,Y)
- Le texte dépend de l'écran en pixels depuis en haut à gauche et les lignes dépendent du graphique
- pas besoin de JKLMNO sauf si tu veux calculer à l'avance.
Je corrigerai tout ça au prochain message avec d'autres remarques.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 04 Mai 2013, 0:54
Je viens de m'apercevoir que ton test d'égalité est impossible. On ne peut écrire de conditions qu'entre des paires de termes.
Le test de suppériorité ou égalité G+H>=I est innutile. C'est toujours vrai. (c'est un théorème dont j'ai oublié le nom, et qui décrit la notion selon laquelle la ligne droite d'un espace euclidien est le plus court chemin entre deux points)
En revanche un test strict G+H>I permet de détecter l'alignement des points qui en font un segment.
If A=C et C=E et B=D et D=F
Then
Disp "LE TRIANGLE EST","UN POINT"
Else
racine carrée(((D-B)²+(C-A)²)->G
racine carrée(((F-B)²+(E-A)²)->H
racine carrée(((F-D)²+(E-C)²)->I
Disp "LE TRIANGLE ABC"
If G²+H²=I² ou H²+I²=G² ou G²+I²=H²
Then
Disp "EST RECTANGLE"
Else
If G+H=I ou G+I=H ou H+I=G
Then
Disp "EST UN SEGMENT
Else
Disp "N EST PAS","RECTANGLE"
End
End
Pause
// je ne préoccupe pas de l'échelle du décalage, je décale de 1
1+max({A,C,E->Xmax
-1+min({A,C,E->Xmin
1+max({B,D,F->Ymax
-1+min({B,D,F->Ymin
Ligne(A,B,C,D
Ligne(A,B,E,F
Ligne(C,D,E,F
// EDIT : fin ci-dessous maintes fois éditée et finalement validée après test.
EDIT : explications de la formule d'affichage de type pixel/texte à partir de coordonnées graphiques :
Code
Ci dessous un tableau
lieu : gauche point droite
pxl : 0 x1 94
graph : Xmin x2 Xmax
Relation de proportionnalité :
x1-0=(x2-Xmin)*(94-0)/(Xmax-Xmin)
L'abscisse graphique va de Xmin à Xmax.
Celle de pixel va de 0 à 94.
tableau
lieu : bas point haut
pxl : 62 y1 0
graph : Ymin y2 Ymax
Le sens est opposé donc le coefficient de proportion est négatif.
Il suffit algébriquement de choisir une extrémité et de s'y tenir dans l'ordre des termes des différences
Proportionnalité :
y1-0=(y2-Ymax)*(62-0)/(Ymin-Ymax)
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 04 Mai 2013, 12:12
J'ai oublié de convertir les abscisses.
J'édite et améliore la formule.
Remarque qu'on peut placer un arrondi ou une troncature pour ajuster sur un pixel entier, et que l'arrondi est plus proche du raisonnement de la machine, mais que nous affichons du texte et par conséquent qu'on se fiche de la cohérence exacte avec les points puisqu'on trace déjà les segments.
Une de ces actions est nécessaire puisque les pixels ont des coordonnées entières.
---------------------- 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)
Autorisation : Membre
Nb de messages : 106
Inscrit le : Sam 20 Avr 2013, 15:43
Posté le : Sam 04 Mai 2013, 13:37
Citer : linkakro
Code
lexique des formule ci-après :
orig# décrit les coordonnées de l'origine du repère # dans l'autre repère.
max# et min# représentent les coordonées des extrémités du repère # dans ce même repère, avec l'odre min/max fixé d'après le sens du repère (si les repères sont opposés, min et max sont intervertits et oppose le signe)
x# représente les coordonnées du point dans le repère #
x1=orig1+x2(max1-min1)/(max2-min2)
x2=orig2+x1(max2-min2)/(max1-min1)
Pour passer du graphique aux pixels TI, cela donne :
y2=Ymax-y1*62/(Ymax-Ymin)
x2=Xmin+x1*94/(Xmax-Xmin)
Je n'y comprends absolument rien et il y a toujours l'erreur domaine au même endroit...
---------------------- visitez ma page ti82stats.fr
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 04 Mai 2013, 14:30
Si c'est le fait qu'on change de repère qui te gène, tape ZStandard:pt-On(3,7):pxl-On(7,3) et tu verras ce qui se passe.
Consulte ce tutoriel si ça peut t'aider.
Moi je me casse les dents sur cette fichue conversion de repère.
Si tu indiques les valeurs de chaque variable ça permet de savoir ce qui cause l'erreur domaine.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 04 Mai 2013, 16:11
J'ai déjà édité le programme. Mais je vais tester plus encore la formule, j'ai sûrement fait d'autre erreurs d'étourderie ou pire.
Et puis j'ai illustré par l'exemple.
Tout-à-l'heure c'était horrible mais maintenant c'est correct.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 04 Mai 2013, 16:27
C'est pas grâve la seconde balise code trop absconse, c'est comme un aide mémoire au final.
Depuis tout-à-l'heur je passe mon temps à éditer la fin du programme, seulement je commet régulièrement des erreurs de raisonnements et de recopie et des étourderies que je corrige les unes-après les autres.
J'ai le forum et lémulateur en même temps et je ne suis pas foutu de recopier sans erreur.
---------------------- 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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 04 Mai 2013, 17:13
Maintenant la formule d'affichage des noms des points est valide.
Seul un calibrage à un pixel pourrait rester à faire.
J'ai cru qu'elle était fausse pendant un moment à cause d'un bug de chiote qui foirait mes tests sans que je me souvienne de son existence. https://tout82.pages-perso.free.fr/forum/sujet.php?sujet=2068
(s'cusez pour la grossièreté, mais je décompresse)
If A=C et C=E et B=D et D=F
Then
Disp "LE TRIANGLE EST","UN POINT"
Else
racine carrée(((D-B)²+(C-A)²)->G
racine carrée(((F-B)²+(E-A)²)->H
racine carrée(((F-D)²+(E-C)²)->I
Disp "LE TRIANGLE ABC"
If G²+H²=I² ou H²+I²=G² ou G²+I²=H²
Then
Disp "EST RECTANGLE"
Else
If G+H=I ou G+I=H ou H+I=G
Then
Disp "EST UN SEGMENT
Else
Disp "N EST PAS","RECTANGLE"
End
End
Pause
// je ne préoccupe pas de l'échelle du décalage, je décale de 1
1+max({A,C,E->Xmax
-1+min({A,C,E->Xmin
1+max({B,D,F->Ymax
-1+min({B,D,F->Ymin
Ligne(A,B,C,D
Ligne(A,B,E,F
Ligne(C,D,E,F
// EDIT : fin ci-dessous maintes fois éditée et finalement validée après test.
---------------------- 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)