Partage

Tout sur les TI !

Besoin d'aide ?

10 septembre 2007 à 11:56:00

Bon, je suppose que créer un topic est plus pratique que de sonder le forum à la recherche de questions sans réponse qui ont souvent été oubliées...
Donc, si vous avez des questions concernant les TI de la 82 à la 84+SE que ce soit du basic ou de l'asm, n'hésitez pas !!!
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
Anonyme
10 septembre 2007 à 17:35:33

Bonjour

Donc voila c'est en fait au sujet du jeu du plus ou moins décrit dans le topic de Lanfeust.
J'ai un probleme ds mon code qui est le suivant:
:ClrHome
:0->C
:RandInt(1,100->A
:Disp"Choisis un nbre"
:Disp"entre"
:input"1 et 100 ",C
:While C (signe différent de)A
:If A<C
:Then
:Disp"Moins"
:Input"Reessaye",C
:end
:If A>C
:Then
:Disp"Plus"
:Input"Reessaye",C
:End
:Disp"Gagné"

En fait, lorsque j'exécute sur ma calculette la boucle While ne fonctionne pas.

ça me fait
Choisis un nbre entre 1 et 100:
je tape 45
sa me met "Moins reessaye"
je tape et apres
je tombe sur:
done
A tout les coups.

Voila merci :)
10 septembre 2007 à 18:33:14

Deja met un seul :input"",c dans ton code, supprime le de chaque if et met le juste apres while c!=a
Anonyme
10 septembre 2007 à 19:27:52

ok merci g réussi a regler le probleme
mais jaimerai savoir comment on met du texte en variable?
un truc du genre
:"texte"->variable

puis apres pouvoir faire
:disp variable
11 septembre 2007 à 10:09:56

OK, excusez pour la lenteur mais j'ai accès à internet qu'à l'IUT...
A première vue, il manque le End pour délimiter la boucle du While.
En d'autre termes, tu démarres la boucle mais tu ne la finis pas, donc le programme teste une fois les conditions et se termine.
Mets :

:If A>C
:Then
:Disp "Plus"
:Input "Reessaye",C
:End
:End
:Disp "Gagné

à la fin.

Et mets des espaces après Reessaye ça fera plus joli !

Pour ce qui est des variables texte, il s'agît des strings. (Dans le sens chaîne de caractères :p )
La syntaxe est simple :
  1. "texte->StrX

Les strings sont accessibles via le menu VARS, puis 7. (pour au moins une ti83)
Le guillemet de fin de texte n'est pas indispensable.
Après, Disp StrX et c'est tout !
Au plaisir, ++ !
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
11 septembre 2007 à 10:50:21

N'oubliez pas d'utiliser les balises <code> pour mettre en forme le tout et améliorer la lisibilité !

P.S: (différent de) peut se symboliser par !=
12 septembre 2007 à 13:07:42

Bah même sans balise c'est quand même bien lisible (je trouve).
Tu connais le menu secret ? ON en maintenant les flèches gauche et droite.
Je sais pas quelle calculette tu as mais ça marche sur la mienne. (84+)
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
12 septembre 2007 à 22:57:02

Salut !
Super de faire un post la dessus merci !

2 questions :

1. Comment on fait pour afficher une variable à l'intérieur d'un texte dans une boite de dialogue ou autre... du style x=12 et dans la boite de dialogue sa sera, "Tu as fait x(12) points" :euh:

2. Comment on peut enregistrer les variables ? Un copain a fait un questionnaire, et a la fin du questionnaire il avait toutes les variables que j'avais entré enregistrer sur sa calculatrice. :-°



Je vous remercie de votre aide ! :)
13 septembre 2007 à 12:42:33

Bonjour bonjour !

Citation : freeman666

Comment on fait pour afficher une variable à l'intérieur d'un texte dans une boite de dialogue ou autre... du style x=12 et dans la boite de dialogue sa sera, "Tu as fait x(12) points"



Si je comprend bien, ta question ne concerne que l'affichage ?
Dans le cas de la petite police, utilise simplement Text( en séparant les variables de type différent par des virgules.
En clair ça donne ça :
  1. Text(0,0,"Tu as fait ",X," points

Accès : 2ND, PRGM, 0

Par contre dans le cas de la grande police, tu dois utiliser une commande Output( par type de variable.
  1. Output(1,1,"Tu as fait
  2. Output(1,12,X
  3. Output (2,1,"points

Accès (édition de programme) : PRGM, droite, 6

Citation : freeman666

Comment on peut enregistrer les variables ? Un copain a fait un questionnaire, et a la fin du questionnaire il avait toutes les variables que j'avais entré enregistrer sur sa calculatrice



Cette question est assez floue...
En fait je vois pas le rapport entre l'histoire de ton pote et l'histoire des variables.

Sinon, pour assigner une valeur à une variable, tu as juste à taper [valeur]->[variable] en vérifiant qu'elles sont compatibles.
-> est la touche au-dessus de ON.

Bon courage !

Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
13 septembre 2007 à 18:08:55

Merci ! Non t'inquete pour le rapport entre les 2 questions, tu as bien répondu a ce que je cherchais.

Merci de ton aide a+
13 septembre 2007 à 18:40:33

Bonjour !
J'ai une matrice de 8x16, contenant des valeurs allant de 0 à 8, mais majoritairement des 0. A partir d'une case contenant 0 je doit déterminer les coordonnées de toute les cases contenant 0 qui sont en contact, a partir de celle ouverte.

Pour plus de précision, c'est pour un jeu de "demineur". Ma matrice représentant le plateau de jeu, et les valeurs le nombre de mines alentours. Quand le joueur ouvre une case vide (=0) toute les cases vides adjacentes doivent s'ouvrir également.

Une idée ?


(Précédemment, j'ouvrais simplement les 8 cases adjacentes à la case ouverte égale a 0... Mais ça n'est pas vraiment pratique à la longue...)

Une autre question:
Est-il possible de créer une matrice, et de modifier ensuite ses dimension pour contenir une ligne supplementaire autant de fois que necessaire, et puis de supprimer une/des ligne ensuite
(bien que ca ne soit pas vraiment nécessaire ... Modifier leurs valeurs pour 0, marchera aussi bien qu'une suppression, etant donné que la matrice est très vite supprimée)


Ceci étant toujours pour mon démineur ... Qui mérite bien quelques améliorations en cette belle rentrée :D
Merci d'avance!

P.S: J'en profite également pour dire un merci/bravo à Lanfeust 313 pour la rédaction de son tut' sur le TIBasic ! Je regrette seulement de ne pas l'avoir eu sous la mains plus tôt :p ... J'aurais pas eu à apprendre le TIBasic seul et sur le tas en trifouillant les programmes débiles que tout le monde se passait en cours :D
Anonyme
13 septembre 2007 à 20:26:29

Ouuuuf, ce topic m'évitera de chercher ceux qui concernent le TI BASIC ! C'est une très bonne idée !

En ce qui concerne la 1ère question de Freeman666, le Output proposé par nightmat devrait afficher ( si X=12 ) "12 Tu as fait points" (j'omet les retours à la ligne ) : ce n'est pas très français.
Ensuite, je ne suis plus très sûr mais on ne peut pas mettre de zéro dans

:Output(0,12,"...")

cela crée une erreur, je crois ?

à Saend : je réfléchis mais je n'ai plus trop le temps, on m'attend au lycée pour des cours à suivre !
14 septembre 2007 à 12:10:37

11TLP a raison, je me suis lamentablement trompé... En effet, 0 en coordonnée Output( entraîne une erreur de domaine.
Je voulais mettre 1.
Par contre, après avoir lancer le programme, j'obtiens :
  1. Tu as fait 47
  2. points

Je pense que tu as mal lu ; il y a 3 Output(, et la première coordonnée représente la ligne, pas l'abscisse.

OK Saend !
Une fois que tu as défini une matrice avec dim( ou manuellement (genre [[2,3][4,5]]->[[A]]), tu peux la redimensionner très facilement avec... dim( !

Accès : 2ND MATRIX Droite 3

C'est la même commande que celle du menu liste, mis à part qu'elle prend une liste comme argument.

  1. :{3,2}->dim([[A]]

Cela créera une matrice de trois lignes et deux colonnes.

Si cette matrice existe déjà, elle sera redimensionnée.
Dans le cas d'un ajout, toutes les valeurs ajoutées sont nulles (zéro, quoi !) et d'en le cas d'une réduction, la matrice est tronquée. Les valeurs déjà présentes dans la matrice restent identiques.

Si tu as [[A]]=[[1,2,3][4,5,6][7,8,9]]

Alors après {2,2->dim([[A]]
[[A]]=[[1,2][4,5]]

Et après {3,2->dim([[A]]
[[A]]=[[1,2][4,5][0,0]]

OK ?

Ta première question relève plus de l'algorythmie... Il faudra que je creuse la question.
Vu qu'on est vendredi, je devrais pouvoir te répondre lundi.

++
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
14 septembre 2007 à 18:51:24

Wouaw! Je suis impressionné par cette réponse plus qu'utile ! Je ne savais pas la "communauté" TI du SdZ aussi efficace :D
Merci beaucoup à vous ! :)

Citation : nightmat

Ta première question relève plus de l'algorithmie...


En effet ... Jme casse les dents la dessus depuis une plombe... J'ai même tené de lire la source de gnomine* :D Pour comprendre comment c'etait fesable. Mais jsuis déjà à peine capable de faire un hello world en C/C++, alors lire une source de cette taille ... ^^

Merci d'avance pr votre aide! Et si par hasard je peux aider, je le ferai :)


*Le demineur de Gnome.
Anonyme
14 septembre 2007 à 20:35:51

Oui, en effet, la phrase est correcte si on corrige l'Output ( elle serait incorrecte si on pouvait mettre des zéros dans l'Output.

Alors si j'ai bien compris, Saend, tu veux que tous les zéros s'affichent autour de celui que tu as sélectionné ? eh ben tu peux utiliser une seconde matrice qui contient des 1 pour les zéros découverts, 0 pour les non découverts ( cette matrice doit donc avoir les mêmes dimensions que la matrice normale ). Alors si tu tombes sur un zéro :
tu mets un 1 dans la seconde matrice au même endroit que le zéro sur la matrice normale, ainsi que les cases autour. Ensuite, tu fais une boucle de la façon suivante :
On parcourt la 2ème matrice à la recherche d'un 1.
S'il y en a un, tu vérifies si dans l'autre matrice il y a un zéro au même endroit.
Si c'est le cas et que les cases autour ne sont pas toutes à 1, tu met à 1 toutes les cases autour. Puis tu recommence la boucle au début de la matrice.
Sinon tu continue à parcourir la matrice.
La boucle s'arrête si tu as fini la matrice.

Après la boucle, tu reparcours la 2ème matrice et tu révèles les cases de la première matrice si leur "soeur" de la 2ème matrice est à 1.

Et voilà ! Je n'ai pas expérimenté, mais je crois que c'est assez lent s'il y a beaucoup de zéros, malheureusement :( .

j'espère que ça va t'aider ! à + :)
14 septembre 2007 à 21:12:09

Ooooh ! Même si dans mon cas je n'aurais pas besoin de la seconde matrice, ton idée est bonne !
Dès que le joueur ouvre une case contenant 0, je fait une boucle qui vérifie que tout 0 ouvert et bien entouré de cases ouvertes, et si ce n'est pas le cas, j'ouvre les cases en question, et je re-part pr un tour de boucle !

Tu as également raison, ca va être long. Mais je pense avoir une idée pour que ce soit rapide en jouant, mais que les calculs soit fait pendant le chargement d'une partie.Il faut que je teste ... Ca se trouve ca sera aussi long en jouant dans un cas que dans l'autre ...

A suivre, je vous tiens au courant ;) Et merci 11TLP
15 septembre 2007 à 10:49:16

Alors moi j'ai une question : j'aimerais que dans mon programme lorsque j'utilise "input" il ne soit possible que d'écrire en alpha. Ceci afin que le joueur ne soit pas obligé d'appuyer lui même sur seconde+alpha. :-°
15 septembre 2007 à 13:49:06

Zoda : ce n'est pas possible.

On peut créer une fonction qui permet d'enregistrer des lettres sans le 2nd Alpha , mais elle prend beaucoup de place pour rien, il vaut donc mieux préciser qu'il faut faire le 2nd Alpha.

Je dis juste ça pour signaler que ça existe. Mais en pratique, le 2nd est LA solution.
15 septembre 2007 à 14:11:46

D'accord, mais en pratique c'est quoi la fonction ?
15 septembre 2007 à 15:03:25

Ben ça serais une fonction de type :

Si la chaine entrée est 1: affiche la lettre au dessus de 1 (je sais plus la quelle c'est)


enfin je crois ^^
Anonyme
16 septembre 2007 à 17:43:49

Bonjour
je n'arrive pas a donner une valeur en écriture fractionnaire à une variable j'aimerai mettre sa
-b-racine de D/2a->L

D remplace delta.
c'est donc ce que je met sur ma calculette.
Et ça ne marche pas.
Je voudrai savoir aussi si c'est possible d'écrire une fraction sur la calculette par exemple écrire 2/3 en fraction.
Merci :)
17 septembre 2007 à 9:51:25

OK Saend, j'ai un 'tit algorythme qui pourrait te servir :

  1. [A] : matrice principale
  2. A : ligne pointée
  3. B : colonne pointée
  4. dim([A]->L1
  5. L1(1->F
  6. L1(2->G
  7. 1->D
  8. 1->E
  9. If [A](A,B)=0
  10. Then
  11. e->[A](A,B
  12. A+B/10->L1(D
  13. Else
  14. Goto F
  15. End
  16. Lbl LO
  17. iPart(L1(D->A
  18. 10fPart(L1(D->B
  19. A-1->I
  20. If I>=1
  21. Then
  22. If [A](I,B)=0
  23. Then
  24. e->[A](I,B
  25. E+1->E
  26. I+B/10->L1(E
  27. End
  28. End
  29. A+1->I
  30. If I<=1
  31. Then
  32. If [A](I,B)=0
  33. Then
  34. e->[A](I,B
  35. E+1->E
  36. I+B/10->L1(E
  37. End
  38. End
  39. B+1->I
  40. If I<=G
  41. Then
  42. If [A](A,I)=0
  43. Then
  44. e->[A](A,I
  45. E+1->E
  46. A+I/10->L1(E
  47. End
  48. End
  49. B-1->I
  50. If I>=1
  51. Then
  52. If [A](A,I)=0
  53. Then
  54. e->[A](A,I
  55. E+1->E
  56. A+I/10->L1(E
  57. End
  58. End
  59. If D=E
  60. Goto F
  61. D+1->D
  62. Goto LO
  63. Lbl F

Fioouuuh !!!!

Si t'as des questions j'répondrai plus tard car je n'ai plus beaucoup de temps.

Citation : zoda

Alors moi j'ai une question : j'aimerais que dans mon programme lorsque j'utilise "input" il ne soit possible que d'écrire en alpha. Ceci afin que le joueur ne soit pas obligé d'appuyer lui même sur seconde+alpha



Y'a un moyen ; c'est d'activer un flag asm qui simule UNE FOIS l'appui sur 2ND et ALPHA.
Je te filerai la commande hexadécimale quand je l'aurai trouvée.
Tu pourra l'utiliser avec ExecAsm( d'Omnicalc ou en utilisant un sous-programme en assembleur.

Citation : Gustave9

je n'arrive pas a donner une valeur en écriture fractionnaire à une variable



Soit tu utilise une routine qui gère séparément le numérateur du dénominateur, soit tu utilise
  1. Disp A->Frac


Accès : MATHS 1
Mais c'est très restrictif...
Je te laisse essayer.

Merci aux intervenants ! ^^
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
17 septembre 2007 à 19:23:41

Et bien jsuis impressionné nightmat ... Il est costaud à piger ton code :D

Malgré cela, il a un p'tit défaut ... Qui peux vite devenir un gros bug si j'ai bien saisi la portée de ton code:

Il ajoute à sa liste toute case = 0 en contact avec le case actuellement étudiée. Mais il ne note pas quelles cases ont été déjà étudiées ... Ce qui fait que, par exemple, la case original (celle que l'utilisateur a ouverte) sera ajoutée à la liste des cases à étudier à chaque fois qu'une des 4 cases qu'il l'entoure sera étudiée. Et donc, elle sera re-étudiée, et par conséquent les 4 cases qui l'entoure seront re-ajoutées a la liste, et donc re-étudiées ... Et ainsi de suite :D

Jsais pas si jsuis clair :euh:
Chaque case étudiée ajoute dans la liste des cases à étudier la case qui la ajoutée (qui est donc forcement une case déjà étudiée et qui sera re-étudiée inutillement).

Sinon, je suppose que tu voulais dire :
  1. A+1->I
  2. If I<=F
  3. Then

Et pas <= 1


Enfin bref, ca me fait une base pour le futur algo ... Mais je crains de plus en plus qu'il va être très lourd à l'utilisation ...

Re-merci beaucoup pour tes réponses pertinentes :)
18 septembre 2007 à 10:02:51

Bah nan j'ai très bien compris ce que tu veux dire. Et c'est pourquoi à chaque case où un zéro est découvert, je met une valeur bidon à la place. Dans mon code c'était pi mais comme je l'ai pas trouvé j'ai utilisé le "e" de l'exponentielle.
Ce qui évite en effet qu'une même case soit considérée indéfiniment.
Si j'affirme ça c'est que j'ai fait l'erreur au départ :euh:
Niveau rapidité, il y a à entre 1 et 2 zéro(s) découverts par seconde...
Et je rajoute que ce code ne fonctionne que pour des dimensions inférieures à 10, car pour optimiser la mémoire, je stocke dans l'unité et le décimal.
Sinon, tu devras adapter le calcul avec un logarythme.
Mais tu m'as bien l'air d'avoir pigé ! ;)

Citation : Saend

Sinon, je suppose que tu voulais dire :

A+1->I
If I<=F
Then

Et pas <= 1


Exact !

OK, disponible pour d'autres questions !

zoda ce sera pour une autre fois ; j'ai pas eu accès à mon ordi personnel...
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
19 septembre 2007 à 12:12:14

Ca y'est, j'ai le code hexa pour activer l'alpha lock.

  1. FDCB12E6FDCB12F6


Et si tu veux que l'utilisateur ne puisse rentrer QUE du texte, rajoute
  1. FDCB12FE


Pour l'utiliser, soit tu installe Omnicalc et tu utilise ExecAsm("FDCB12...")

Accès : 2xPRGM, 3

Soit tu crée un sous-programme :
  1. :AsmPrgm
  2. :FDCB12...

tu le compile avec
  1. AsmComp([nom du prog d'entrée],[nom du prog compilé])


Ensuite tu n'as plus qu'à l'appeller avant le input dans ton programme.
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
20 septembre 2007 à 12:51:00

UP !
Je pense d'ailleurs que c'est nécessaire... :-°
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
20 septembre 2007 à 18:51:06

Bonjour,

J'ai fait le TP plus ou moins, jusque là aucun problème. Je me suis dit, autant faire un moyen de recommencer la partie à la fin.

J'ai donc un code qui ressemble assez à celui du tuto mais :
1/ Lorsqu'on gagne, il affiche fait à la fin du programme. Peut-on enlever ceci ?
2/ Pour recommencer, à la fin on appuie sur enter et ça recommence (comme pour tous les programmes je pense). Comment faire pour le quitter (via 1 = recommncer, 0 = quitter par exemple) ?


Merci

P.S. : Mon topic pour + de détails : http://www.siteduzero.com/forum-83-194638-1744000-ti-besoind-un-peu-d-aide.html#r1744000
20 septembre 2007 à 21:23:38

Salut,

1/ Il suffit de faire un Output(y,14," ") à la fin de ton programme. Avec comme y la ligne a laquelle sera affiché le "fait" (ou "done" si c'est en anglais ...). Entre guillemets il faut mettre 4 espaces.

2/La touche enter relance le dernier calcul/programme effectué si la ligne est vide. Donc quand un programme se finit il suffit de presser enter pour le relancer. Et ca on peux rien faire pour que ca change :) . Par contre tu peux faire quelque chose dans le genre à la fin de ton programme :

  1. :0->K
  2. :while K = 0
  3. :Getkey->K
  4. :end
  5. :if K = 102
  6. :stop
  7. :if K = 92
  8. :goto 01


Précisions : Getkey récupère la touche pressé, si rien n'est pressé K=0.
Ensuite, 102 est le "code touche" pour 0 et 92 pour la touche 1.
Et biensur un label 01 est a placer au debut de ton soft, enfin 01 ou tout cke tu veux :D
Tu peux également faire un Menu: plus simple, plus rapide et plus pratique...

Si jsuis pas assez précis, ou si je ne répond pas a ta question, dis le moi :)
Anonyme
20 septembre 2007 à 23:46:09

Il y a une meilleure méthode pour enlever le Done : tu met à la fin de ton programme

:""

car le programme renvoie à l'écran le résultat de la dernière ligne de code, mais si cette ligne n'a pas de valeur ( comme End ou Stop par exemple ) il renvoie Done.

Au fait, on dirait que certains ont une TI-84, avec les label à deux chiffres, comme 01
21 septembre 2007 à 12:06:40

Bien, Saend :waw:
Mon algo t'a servi ?
J'y ai encore réfléchi mais je pense que c'était la meilleure solution, puisqu'une vérification en spirale pouvait inclure des zéros non adjacents...
Enfin...
Et merci à 11TLP pour son conseil ^^

Bon week-end à tous !
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.

Tout sur les TI !

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
  • Editeur
  • Markdown