Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 3794
Réponses : 22
Type : discussion
Etat : réponses autorisées

(Prog) Noël (Prog) - Page 1 / 2

S.L le 29/07/2012 à 00:45
Salut à tous, voici un petit programme qui se nomme noël /oui je sais on est pas en hiver mais bon, ya pas de saison pour les programmes/ et qui consiste à afficher des flocons de neiges qui tombent... Je vous laisse apprécier.
Nom: Noël
Taille: 342 octets
Auteur: S.L

-> : flèche sto
Fonctions en français
Code
PROGRAM:NOEL
:EffEcr
:1->A
:4->B
:2->C
:8->D
:3->E
:6->F
:4->G
:12->H
:5->I
:9->J
:6->K
:3->L
:Lbl 1
:A+1->A
:C+1->C
:E+1->E
:G+1->G
:I+1->I
:K+1->K
:EffEcr
:Output(A,B,"*
:Output(C,D,".
:Output(E,F,"*
:Output(G,H,".
:Output(I,J,"*
:Output(K,L,".
:If A=8:Then:1->A
:entAléat(1,16)->B:End
:If C=8:Then:1->C
:entAléat(1,16)->D:End
:If E=8:Then:1->E
:entAléat(1,16)->F:End
:If G=8:Then:1->G
:entAléat(1,16)->H:End
:If I=8:Then:1->I
:entAléat(1,16)->J:End
:If K=8:Then:1->8
:entAléat(1,16)->L:End
:codeTouche->M
:If M=105:Then
:EffEcr
:Disp "JOYEUX NOEL!
:Pause
:EffEcr
:Stop
:End
:If M=45:Then
:EffEcr
:Stop
:End
:Goto 1
ld le 29/07/2012 à 17:48
Oulà ! L'idée et sympa mais niveau optimisation c'est un massacre !
Utilise une liste au lieu des variables et une chaîne pour les caractères:
Output(A,L1(X),sous-Chaîne(Chaîne1,entAléat(1,3))
Avec Chaîne1 = "espace étoile point".
Sûr qu'il peut prendre trois fois moins place !
J'ai essayer ! Pas mal sinon winkle.gif
S.L le 29/07/2012 à 18:09
Désolé, mais je n'ai jamais utilisé de liste ni de chaîne, je ne sais donc pas comment faire cry.gif
Enfaite, penses à mettre ta bannière dans ta signature happy.gif
snap le 30/07/2012 à 00:03
Voila, j'ai mis les variables sous forme de liste, mais je n'ai pas utilisé les chaînes, je ne voyait pas l'intérêt. J'arrive à sa :

Code
{1,4,2,8,3,6,4,12,5,9,6,3 -> L1
Repeat M=45 ou M=105
For(Z,1,11,2
1+L1(Z -> L1(Z
End
Effecr
For(Z,1,9,4
Output(L1(Z),L1(Z+1),"*
Output(L1(Z+2),L1(Z+3),"-
End
For(Z,1,11,2
If 8=L1(Z : Z+1 -> W
End
If W : Then
1 -> L1(W-1
entaléat(1,16 -> L1(W
End
codeTouche -> M
End
Disp"JOYEUX NOEL!
Pause
Effecr
Output(1,1,"


J'ai pas testé ton programme de départ, la flemme de recopier (désolé ^^) donc si sa va moins vite ou si c'est pas pareil, dit le moi je saurais quoi changer.
S.L le 30/07/2012 à 11:09
Ok je testerais ça quand j'aurais le temps happy.gif
Keralis le 18/09/2012 à 21:40
salut je n'arrive pas a mettre le * dans un programme, je mets le fois mais il me dis erreur svp cry.gif .
merci.
linkakro le 18/09/2012 à 22:06
Quel type d'erreur ? syntaxe ?
Le début de la ligne doit être faux. L1 se saisi avec 2nde+1 , et les parenthèses/virgules doivent être correctement placées.
Thunderbolt le 06/11/2014 à 17:28
salut, a la ligne
Code
1->L1(W-1)

Il m'affiche une erreur : DIM INVALIDE
j'ai essayé avec et sans parenthèse mais ca ne change rien :/
Bref merci d'avance pour votre réponse
linkakro le 06/11/2014 à 21:00
W est fausse. Par exemple elle donne une valeur de position qui dépasse de la liste.
Saisis {W,Z,M} dans l'écran de calcul pour connaître les valeurs des trois variables. Ensuite nous pourrons chercher la cause en connaissant complètement le symptome.
Un Inconnu le 16/11/2014 à 14:24
Bonjour/Bonsoir à tous !

Je viens ici car j'ai le même problème que Thunderbolt et comme je ne m'y connaît pas beaucoup en TI, je voudrais savoir comment résoudre cette erreur.

Merci d'avance.

P.S: Je suis avec une TI 82 plus laugh.gif
linkakro le 16/11/2014 à 16:56
La valeur de W est incohérente avec la liste L1. Nous devons chercher pourquoi.
J'ai déjà demandé d'examiner les variables, mais sans réponse, alors cette fois j'interprète le code moi-même. (mais pas envie de le tester)

Je pense qu'un End est mal placé. Ma correction ci-dessous.
EDIT:16/11/2014 22heures : je modifie encore : retiré le test juste avant l'ancien End faux et modifié la suite pour adapter.
Code
 // version optimisée par snap
 // corrigée par linkakro
{1,4,2,8,3,6,4,12,5,9,6,3 -> L1
Repeat M=45 ou M=105
For(Z,1,11,2
1+L1(Z -> L1(Z
End
EffEcr
For(Z,1,9,4
Output(L1(Z),L1(Z+1),"*
Output(L1(Z+2),L1(Z+3),"-
End
For(Z,1,11,2
 /////////////// Le test ici était incohérent avec sa place, je le retire.
 /////////////////// Le End ici était faux.
If 8=L1(Z                 ///// L1(Z
Then
1 -> L1(Z                 ///// L1(Z
entaléat(1,16 -> L1(Z+1   ///// L1(Z+1
End
End ////////////// le End ici est ajouté
codeTouche -> M
End
Disp"JOYEUX NOEL!
Pause
Effecr
Output(1,1,"
JeSuis42 le 16/11/2014 à 18:45
J'ai ce que tu as dis linkakro (je suis "un inconnu") j'ai eu comme résultat {1 13 1}
Je viens de tester ta version, mais toujours le même problème :/
Merci de ton aide happy.gif
glasses.gif
linkakro le 16/11/2014 à 22:12
J'ai corrigé ce qui était incohérent en modifiant mon message précédent. Pour y parvenir j'ai comparé les deux programmes précédents pour tenter de deviner le raisonnement de snap.
JeSuis42 le 16/11/2014 à 23:26
Ça marche enfin happy.gif

Merci linkakro \o/
adrien41 le 02/01/2015 à 10:49
Salut à tous. J'ai eu une idée mais je ne sais pas comment faire: faire en sorte que le message puisse s'afficher sur l'écran en appuyant sur entrer et que la "neige" tombe en même temps. Merci d'avance à ceux qui auront une idée.
linkakro le 02/01/2015 à 19:48
La touche entrer est déjà détectée avec la valeur 105 de la variable M.
Utilise une variable supplémentaire pour mémoriser que la touche a été pressée au moins une fois et affecte la avec une condition M=105. Retire la condition M=105 de la boucle Repeat afin de ne pas quitter avec entrer. Puis déplace le texte dans la boucle et soumet le à une condition sur la variable mémoire ajoutée précédemment.

Code
//basée sur la version de snap et linkakro

0->N // mémoire ajoutée
{1,4,2,8,3,6,4,12,5,9,6,3 -> L1
Repeat M=45 // la touche annul seule
For(Z,1,11,2
1+L1(Z -> L1(Z
End
EffEcr

If M=105 // touche entrée au tour précédent
1->N
If N // touche entrée au moins une fois (N non nul)
Disp "JOYEUX NOEL! // message

For(Z,1,9,4
Output(L1(Z),L1(Z+1),"*
Output(L1(Z+2),L1(Z+3),"-
End
For(Z,1,11,2
If 8=L1(Z
Then
1 -> L1(Z
entaléat(1,16 -> L1(Z+1
End
End
codeTouche -> M
End
adrien41 le 03/01/2015 à 10:39
Sa efface directement l'ecran et on voit rien du programme
linkakro le 03/01/2015 à 12:28
Mon test fonctionne parfaitement. Donc si tu as effectivement un problème j'aurais besoin d'une description plus précise pour tenter de deviner une erreur de ta part.
Vérifie aussi le Repeat.

Ou bien ta demande initiale est ambiguë. J'interprète que la neige tombe déjà avant la pression sur la touche entrer. Tandis que tu voulais peut-être désigner la simultanéité entre le message et la chute.
Citation
faire en sorte que le message puisse s'afficher sur l'écran en appuyant sur entrer et que la "neige" tombe en même temps.

Si tu veux appuyer sur entrer pour commander le démarrage du programme au lieu de seulement le message alors une pause au début du programme suffira.
Code
Pause // la pause, mais la neige ne tombe pas en même temps
{1,4,2,8,3,6,4,12,5,9,6,3 -> L1
Repeat M=45
For(Z,1,11,2
1+L1(Z -> L1(Z
End
EffEcr
Disp "JOYEUX NOEL!   // le message dans tous les cas
For(Z,1,9,4
Output(L1(Z),L1(Z+1),"*
Output(L1(Z+2),L1(Z+3),"-
End
For(Z,1,11,2
If 8=L1(Z
Then
1 -> L1(Z
entaléat(1,16 -> L1(Z+1
End
End
codeTouche -> M
End
adrien41 le 03/01/2015 à 13:23
En fait,pour etre plus clair,voici comment j'aurais voulu que le prgm fonctionne:
-ouverture
-la neige tombe
-tu appuie sur une touche
-"JOYEUX NOEL!" apparait et la neige tombe en meme temps
-tu rappuie sur la touche
-le message s'efface et la neige tombe
linkakro le 04/01/2015 à 21:52
Code
{1,4,2,8,3,6,4,12,5,9,6,3 -> L1
0->N
Repeat M=45
For(Z,1,11,2
1+L1(Z -> L1(Z
End
EffEcr

If K=105
non(N->N  // non(1)=0 et non(0)=1
If N
Disp "JOYEUX NOEL!

For(Z,1,9,4
Output(L1(Z),L1(Z+1),"*
Output(L1(Z+2),L1(Z+3),"-
End
For(Z,1,11,2
If 8=L1(Z
Then
1 -> L1(Z
entaléat(1,16 -> L1(Z+1
End
End
codeTouche -> M
End