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.
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.
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 :
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 )
La syntaxe est simple :
"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.
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.
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"
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.
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 :
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.
Output(1,1,"Tu as fait
Output(1,12,X
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.
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
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 ... 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
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 !
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 :
Tu as fait 47
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.
:{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.
Wouaw! Je suis impressionné par cette réponse plus qu'utile ! Je ne savais pas la "communauté" TI du SdZ aussi efficace
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* 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
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 .
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 ...
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.
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.
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
OK Saend, j'ai un 'tit algorythme qui pourrait te servir :
[A] : matrice principale
A : ligne pointée
B : colonne pointée
dim([A]->L1
L1(1->F
L1(2->G
1->D
1->E
If [A](A,B)=0
Then
e->[A](A,B
A+B/10->L1(D
Else
Goto F
End
Lbl LO
iPart(L1(D->A
10fPart(L1(D->B
A-1->I
If I>=1
Then
If [A](I,B)=0
Then
e->[A](I,B
E+1->E
I+B/10->L1(E
End
End
A+1->I
If I<=1
Then
If [A](I,B)=0
Then
e->[A](I,B
E+1->E
I+B/10->L1(E
End
End
B+1->I
If I<=G
Then
If [A](A,I)=0
Then
e->[A](A,I
E+1->E
A+I/10->L1(E
End
End
B-1->I
If I>=1
Then
If [A](A,I)=0
Then
e->[A](A,I
E+1->E
A+I/10->L1(E
End
End
If D=E
Goto F
D+1->D
Goto LO
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
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.
Et bien jsuis impressionné nightmat ... Il est costaud à piger ton code
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
Jsais pas si jsuis clair
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 :
A+1->I
If I<=F
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 ...
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
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.
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) ?
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 :
:0->K
:while K = 0
:Getkey->K
:end
:if K = 102
:stop
:if K = 92
: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
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
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
Bien, Saend
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.
× 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.