1

je viens tout juste d avoir une Ti 84 mais j ai du mal a faire les programmes. J ai bien lu le guide je comprends les If, les Then, Else, etc (pas tous no plus) mais j ai du mal a les agencer dabs le programme. Je serai très reconnaissan a celui qui m expliquer avec des programmes très simples.
Merci (je pense etre aller sur le bon forum débutant mais qd je vois des gens demander de la ide pour des résolutions d equations du 5eme ° j en suis plus trop sur)

2

Le mieux pour débuter c'est de faire des petits programmes de test afin de comprendre et d'apprendre de plus en plus de fonctions. Je serais toi j'essaierai de lire quelques tutoriels tel Basic Learn (c'est avec lui que j'ai commencé), etc...

Tiens, si je me souviens bien il y a un exemple de programme pour faire bouger une étoile à l'écran. C'est un bon début de programme, après tu peux l'améliorer pour donner un truc du genre :
ClrHome ; On efface l'écran
2→X ; La coordonnée X (horizontale) de l'étoile vaut 2 au début
2→Y ; Idem avec la coordonnée Y (verticale)
Repeat K=45 ; La variable K contiendra la valeur de la touche pressée, si elle est égale à 45 (CLEAR), on quitte le programme
Repeat K ; Tant qu'aucune touche est pressée K vaut 0, donc on reste dans la boucle
getKey→K ; Ici on demande la valeur de la touche pressée et on l'affecte à K
End ; ; Sinon si K vaut autre chose que 0
If K=24:-1→A ; Si K vaut 24 donc GAUCHE, on met -1 dans A afin d'effectuer un petit calcul après
If K=25:1→B ; Idem avec HAUT et 1 dans B
If K=34:-1→B ; Pareil mais avec BAS
If K=26:1→A ; Et toujours la même chose avec DROITE
X+A ; On fait un petit calcul qui va modifier la valeur d'Ans, la variable qui retient les valeurs des résultats, ici on additionne X et A
If Ans≠1 or Ans≠16 ; Ici on va pouvoir déplacer l'étoile seulement si le résultat est compris entre 1 et 16, car sinon on dépasse de l'écran
Then ; Alors
Output(Y,X," ") ; On efface l'étoile de l'écran
X+A→X ; On modifie sa coordonnée X
End ; Fin de la boucle
Y+B ; Idem qu'avant mais avec Y
If Ans≠1 or Ans≠8 ; Cette fois c'est entre 1 et 8 car l'écran est plus large sur le coté qu'en hauteur
Then
Output(Y,X," ")
Y+B→Y
End
Output(Y,X,"*") ; Là on affiche l'étoile à l'écran après avoir tout vérifié
0→B:0→A ; On remet A et B à zéro pour éviter que n'importe quelle touche refasse l'action d'avant
End ; Fin du programme.


smile C'est peut être un peu dure à comprend mais après avoir lu des tutoriels ça ira déjà mieux je pense. Sinon poses des questions un peu plus précises et on pourras surement te répondre.
meyrink (./1) :
(je pense etre aller sur le bon forum débutant mais qd je vois des gens demander de la ide pour des résolutions d equations du 5eme ° j en suis plus trop sur)


cheeky T'as bien fait de poster ici, ça manque de sujet sur la programmation Basic ces temps-ci oui

3

Slt !

Le mieux pour apprendre à programmer c'est :

- Apprendre de la théorie -> voir http://www.siteduzero.com/tuto-3-1524-0-le-ti-basic.html, le tutorial est plutôt complet pour les bases (c'est par là que j'ai commencé ^^).
- Etudier les programmes faits par d'autres.
- Poser des questions (Ici par exemple ^^).

Il faut différencier le fond et la forme des programmes, ça n'a pas d'importance de se plonger dans un programme très orienté maths si tu veux apprendre à programmer.

Le plus important est avant tout de comprendre le fonctionnement des conditions, des boucles, et des variables. Le reste vient quand c'est nécessaire.

N'hésite pas à poser des questions, tu es le bienvenu !

4

Merci beaucoup vous 2 pour votre aide mais juste dites moi un programme pour calculer la somme des nombres entiers jusqu'a n (soit n(n+1) / 2) donc pour tout nombre il lui associe cette somme
ce programme m aiderait beaucoup !

5

[nosmile]Ce programme ne nécessite aucune connaissance particulière en programmation, c'est juste du calcul.

:Prompt N // on demande à l'utilisateur la valeur qu'il veut donner à N
grinisp .5N(N+1 // on calcule et on affiche le résultat dans la même ligne

C'est tout ! On peut bien sûr par la suite enjoliver un peu la présentation, mais l'essentiel est là.

6

merci beaucoup
le site du zero est assez complet !

7

voila j i commencé mo programme

:Clrhome
:1->X:1->Y
:1->A:1->B
:Repeat K=105
:Output (A,B, " "
embarrassedutput (Y,X,"O"
:Y->A:X->B
:getkey-> K
:If K=24: X-1->X
:...
:If X=0:16->X
:...
:End

c 'est a peu près le meme que Deeph mais en moins long

mais je ne sais pas ou placé dan la programme
:randInt (1, 16, Z
:randInt (1,16, W
output (Z,W; "*"
:

en fait j avais deja réussi a le placer mais ca marchait a 2 a l heure puis j ai changé un petit truc et tout a bugé
merci

8

hmm non
c'est
randInt(1,8->Z (pas 16, sinon ça risque d'être hors de l'écran => error domain)
randInt(1,16->W
Output(Z,W,"*"

Ca place une étoile à un endroit aléatoire de l'écran

programmeur sur TI ^^

mon blog sur les TI => clic

mon (p'tit) fofo sur les TI => clic

9

oui oui je mettais trompé (mais c etait pas vraimment ca ma question mais j ai reussi)

par contre j ai un ptit probleme

:Clrhome

:1->X:1->Y
:1->A:1->B
:randInt (1, 16, I
:randInt (1,8, J
output (J,I; "*"
:Repeat K=105
:Output (A,B, " "
:Output (Y,X,"O"
:Y->A:X->B
:getkey-> K
:If K=24: X-1->X
:...
:If X=0:16->X
:...
:End


c est le début d un snake
quand le 0 arrive sur l etoile il la mange mais comment faire pourque desqu elle soit mangé il y en ait une autre qui apparaisse ?

10

[nosmile]
Je suppose que c'est un truc comme:

if I=A and J=B
then
randInt (1, 16 => I
randInt (1,8 => J
output (J,I; "*"

(Eventuellement: S+1 => S si tu veux faire un score)

End

(j'ai peut-être interverti A et B)

11

c'est justemet ce que j avais essayé

Clrhome

:1->X:1->Y
:1->A:1->B
:randInt (1, 16, I
:randInt (1,8, J
output (J,I; "*"
:Repeat K=105
:Output (A,B, " "
:Output (Y,X,"O"
:Y->A:X->B
:If J=A and I=B
:Then
:randInt (1,16,J)
:randInt (1,8, I)
:Output (I,J, "*
:getkey-> K
:If K=24: X-1->X
:...
:If X=0:16->X
:...
:End


mais cela ne fait rien j ai mangé l etoile mais aucun ne réaparait

12

Tu devrais mettre ton programme entre les balises 'pre' (voir à droite de cadre pour poster ton message), ça t'éviteras les problèmes avec les smileys smile

Moi je te proposerai plutôt ça :

ClrHome
1→X:1→Y
randInt(1,16→I
randInt(1,8→J
Repeat K=105

Output(J,I,"*"
Output(Y,X,"O"

If Y=J and I=X
Then
Output(I,J," "
randInt(1,16→J
randInt(1,8→I
End

getKey→K

If K≠0:Output(Y,X," "
If K=24:X-1→X
[...]
If X=0:16→X
[...]
End


(A vérifier, mais ça devrait être bon.)

13

Non, non, t'as un problème là (Meyrink)

Il faut pas que tu fasses:
:randInt (1,16,J)Ce code va chercher J fois un nombre entre 1 et 16 (et le mettre dans Ans)
Il faut plutôt faire:
:randInt (1,16) => JTon bug vient peut-être de là...

14

merci c est vrai que ca marche mais il y a un hic
(je vais peut etre faire mon chieur mais bon)


ton programme est bon deeph mais il revient au meme que celui la
:Clrhome 
:1->X:1->Y 
:1->A:1->B 
:randInt (1, 16, I 
:randInt (1,8, J 
output (J,I; "*" 
:Repeat K=105 
:Output (A,B, " " 
:Output (Y,X,"O" 
:Y->A:X->B 
:randInt (1, 16, I 
:randInt (1,8, J 
output (J,I; "*"
:getkey-> K 
:If K=24: X-1->X 
:... 
:If X=0:16->X 
:... 
:End 


tout simplement parce qu'il remmette l etoile exactement la ou elle etais alors qu il faudrait plutot qu'elle aille aileurs
en plus ce programme rame bcp moins
comment faire ? confus

15

dans ce cas la (gon) c'est encore pire ! il y a une dizaines d etoiles qui s affichent toutes les 2secondes !

16

(Bon j'ai édité, réessaie avec ce que j'ai mis, normalement ça devrais marcher.)

Bon sinon je te donne un code différent qui fait la même chose :

1→X:1→Y:0→A:0→B
randInt(1,16→W
randInt(1,8→Z
Repeat K=45
Repeat K
getKey→K
End
If K=24:-1→A
If K=34:-1→B
If K=26:1→A
If K=25:1→B
X+A
If Ans≠0 or Ans≠17:Then
Output(Y,X," "
X+A→X
End
Y+B
If Ans≠0 or Ans≠9:Then
Output(Y,X," "
Y+B→Y
End
If Y=Z and X=W:Then
randInt(1,16→W
randInt(1,8→Z
End
Output(Y,X,"O"
Output(Z,W,"*"
0→A:0→B
End


Bon voilà, là t'as la détéction du mouvement mais ça te 'téléporte' pas de l'autre coté de l'écran si jamais on va trop loin, mais c'est faisable en quelques lignes si t'y tiens.

17

ca m ecrit Domain
hmm

18

Si t'as une dizaine d'étoiles par secondes, t'as du oublier de mettre le Then après le If. (à moins que j'aie fait une erreur, mais c'est assez peu probable)

19

attens tu dis ca par raport a quelle version ? parce que la je m y perd

20

meyrink (./17) :
ca m ecrit Domain hmm

Dans mon programme ? Si c'est le cas essayes de choisir 'Goto' quand ça t'affiches le 'Error : Domain' et écrit la ligne vers laquelle ça pointe.

21

alors c est Output( Y,X,"O")
4eme ligne avant la fin

22

Essaye d'inverser X et Y dans cette ligne

23

Nan, essayes pas d'inverser, c'est bon, c'est jusque que c'est les valeurs d'X et Y qui foirent, mais je vois pas d'où ça viens (à prioris c'est soit que X<1 ou X>16 soit que Y<0 ou Y>8...)

24

Si, essaye!! tongue
MDR

25

[nosmile]Tu vas inverser l'axe X/Y c'tout grin

Essayes ça plutôt :
1→X:1→Y:0→A:0→B
randInt(1,16→W
randInt(1,8→Z
Repeat K=45
Repeat K
getKey→K
End
If K=24:-1→A
If K=34:-1→B
If K=26:1→A
If K=25:1→B
If X+A ≠0 or X+A≠17:Then
Output(Y,X," "
X+A→X
End
If Y+B≠0 or Y+B≠9:Then
Output(Y,X," "
Y+B→Y
End
If Y=Z and X=W:Then
randInt(1,16→W
randInt(1,8→Z
End
Output(Y,X,"O"
Output(Z,W,"*"
0→A:0→B End

26

heu y a plus rien qui s affiche !

27

mets les sur ta Ti tu verras y a rien ou ca rate

28

Bon ouais je croit savoir d'où ça viens, essayes plutôt ce code :

ClrHome
1&#8594;X:1&#8594;Y
1&#8594;C:1&#8594;D
0&#8594;A:0&#8594;B
Repeat K=45
If X=C and Y=D:Then
randInt(1,8&#8594;D
randInt(1,16&#8594;C
End
Output(Y,X,"8"
Output(D,C,"*"
Repeat K
getKey&#8594;K
End
Output(Y,X," "
If K=34:Then
If Y+1&#8800;9:Then
Y+1&#8594;Y
End
End
If K=25:Then
If Y-1&#8800;0:Then
Y-1&#8594;Y
End
End
If K=24:Then
If X-1&#8800;0:Then
X-1&#8594;X
End
End
If K=26:Then
If X+1&#8800;17:Then
X+1&#8594;X
End
End
End


Bon voilà c'est plus long mais ça devrais marcher...

29

[nosmile]Bon, ça fait pas mal de temps que je suis le débat. C'est d'alleurs assez marrant qu'un tel programme provoque une telle quantité de versions. Ce programme est simple en théorie, mais il est dur de trouver la solution parfaite. J'ai créé un programme meilleur que celui au-dessus (enfin, à vous de juger) :

:1->Y:Ans->X // Initialisation des coordonnées (Y,X) du 0
:ClrHome
:While 1 // Boucle infinie
:randInt(1,8->J // Initialisation des coordonnées (J,I) de l'étoile
:randInt(1,16->I
:Output(J,Ans,"* // Afficher l'étoile
:Repeat X=I and Y=J // Répéter jusqu'à ce que le zéro soit sur l'étoile
:Output(Y,X,0 // Afficher le 0
:Repeat Ans // On attend que le joueur appuie sur une touche
:getKey
:End
:Output(Y,X," " // Effacer le zéro
:If Ans=26
:Then
:X+(X/=16->X
:Else
:If Ans=34
:Then
:Y+(Y/=8->Y
:Else
:If Ans=24
:Then
:X-(X/=1->X
:Else
:Y-(Y/=1->Y // C'est le cas lors de l'appui d'une touche autre que 26,34,24
:End:End:End
:End // Fin du Repeat (donc teste si le zéro est sur l'étoile)
:End // Dans ce cas, revenir à l'initialisation de J et I, et afficher la nouvelle étoile

Remarque :

- Si l'on appuie sur une touche autre que les flèches directionnelles, le zéro va en haut. Pour corriger celà, 2 possibilités. Soit on fait le test Ans=25 avant la décrémentation du Y, soit on modifie la boucle d'attente en Repeat Ans=24 or Ans=25 or Ans=26 or Ans=34. Ah oui, j'ai testé et il apparaît qu'il est plus rapide de faire des or successifs plutôt que max(Ans={24,25,26,34}). Dans les 2 cas, le jeu est ralenti.

30

Ah oui, mais là, tu rends certaines touches plus réactives que d'autres...