le curseur est placé au centre.Le jeu s'arrête si le curseur arrive sur un côté.
Si le curseur arrive sur le coté,les 2 candidats qui forment ce segment s'affrontent en finale et si le curseur arrive sur un joueur il est le gagnant.
N
O ---------C.-------- E
S
on associe N=1; O=2; S=3; E=4
A, I, J, K entiers naturels:
code
0 -> K
affecter à A un nombre aléatoire entre 1 et 4
tant que I+J < 2 ou I- J < 2 ou I + J > -2
ou J- I < 2
Si A= 1 Then J+ 1 -> J end
Si A=2 Then I-1 -> I end
Si A= 3 then J-1 -> J end
Si A =4 then I+1->I end
K+1-> K
end ( while)
afficher K
Est-ce normal ? l'énoncé est discutable ou pour initié de jeux?
1 - comment exécuter un des 4 " If " alors qu'il n'y a pas de valeurs de I ou J au départ?
2 - ce code décrit 1 partie et s'arrête, d'accord ?on s'attend à avoir le nom du vainqueur en sortie, il devrait donc donner 1, 2, 3 ou 4..quelle relation avec K?
RQ on peut remplacer la condition par " abs (I+J< 2 et abs (I-J < 2 " ?
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Ven 10 Juil 2015, 23:34
Bonsoir,
Oui le prgm n'a pas de sens pour les raisons que tu donne... Ou l'as tu trouvé ?
Pour ta rq: oui on peut faire un truc comme ça sauf qu'il faut fermer au moins la parenthèse du premier abs, et echanger la place du 2 et du abs (et le sens de l'inégalité) pour le second si tu veux gagner un octet...
Par contre du coup tu fais un test de plus (I-J>-2).
Pas moyen de retrouver l'endroit d'où est tiré le code. C'est peut-être un élève qui me l'a proposé ..( je l'avais mis de coté car il m'avait causé un malaise!!).
C'est sans issue? même d'imaginer un code rapprochant? on ferait partir de (I,J) = (0,0)? reste le problème de K (?)
Kelk'1 Invité
Posté le : Jeu 16 Juil 2015, 17:19
J'ai absolument rien compris à ce jeu
Oui ton programme comporte des erreurs, mais si tu me détailles ton programme (comment il marchait et ce qu'il faisait exactement) je pourrai t'en créer un nouveau
monsalbert Invité
Posté le : Ven 17 Juil 2015, 16:11
le texte n'en dit pas plus. si je fais le bilan de ce que je crois:
un palet au centre (0, 0)de l'ecran peut aller soit sur des sommets(N, S, E, O ) qu'on peut noter (0;1), (0;-1), (1;0), (-1;0)
soit sur les côtés (1;1), (1;-1), (-1;-1), (-1;1) qui donnent des finales à 2 joueurs
que signifie k ? j'ignore. c'est d'autant plus énervant que j'ai l'impression que k donne le nom du gagnant! peut-être du genre (0;1) = N (nord) = 1 , (0;-1) = O =2 ainsi de suite S = 3 et E = 4.
si au moins on pouvait faire un code rapprochant.
Kelk'1 Invité
Posté le : Ven 17 Juil 2015, 16:36
Donc si j'ai bien compris, voici ton écran de jeu:
Code
l---------------------l
l N l
l l
l l
l l
l O C E l
l l
l l
l S l
l---------------------l
Ton curseur se déplace d'une case à la fois ou aléatoirement sur le plateau ?
Ensuite un joueur gagne si on a par exemple l'écran suivant:
Code
l---------------------l
l N l
l l
l l
l l
l O C l
l l
l l
l S l
l---------------------l
Ici E a gagné n'est-ce pas ?
Si on a cet écran alors les 2 joueurs sont en finale:
Code
l---------------------l
l N l
l l
l C l
l l
l O E l
l l
l l
l S l
l---------------------l
Ici N et E seront en finale:
Code
l---------------------l
l N l
l l
l l
l l
l C l
l l
l l
l E l
l---------------------l
entAleat(1,4 est le "moteur" : s'il fait 4 par exemple , d'après le code :
(0,0)+ (1,0) donne (1,0) donc E gagne.
une finale quand se fait (1,1) ou (1,-1)
Un arrêt du jeu quand se fait un ( 2,0) par exemple.
Je n'affirme rien. Le premier joueur est-il sûr de gagner? ( plaisant?)
Tout de même celui qui a donné ce code avec autant d'infos!...Peut-on faire une ébauche de code ?
Kelk'1 Invité
Posté le : Ven 24 Juil 2015, 2:14
Oui bien-sûr que c'est faisable, c'est juste que je voulais avoir des explications claires pour pouvoir faire le programme le plus proche de celui de ton élève
Malheureusement, je pars en vacances , je serais donc loin de mon pc et d'internet d'ici demain et ce pour un certain temps.
Je n'ai entre autres pas le temps de t'écrire le programme maintenant (je dois encore faire mes valises, etc...), désolé
Si tu n'es pas pressé(e), je peux te l'écrire directement quand je reviendrai (fin août), vu que je vais rien faire pendant 1 mois, j'ai le temps de me pencher là dessus.
ou sinon M@thieu41 peut te le faire à ma place (si ça ne le dérange pas)
C'est comme tu veux.
monsalbert Invité
Posté le : Ven 24 Juil 2015, 10:20
entendu fais celà pendant les vacances. C'est bien aussi. si Mathieu le fait, il aura son " point de vue ". Et avoir 2 points de vue différents celà me plait bien.
bonnes vacances.
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Ven 24 Juil 2015, 11:40
Voici une ébauche de code :
Code
//Le Jeu
0->I
0->J
While 2!=abs(I)+abs(J //Tant qu'il n'y a pas finale ou gain d'un joueur
entAléat(0,3->M
If not(M
I+1->I
If M=1
I-1->I
If M=2
J+1->J
If M=3
J-1->J
Disp I
Pause J
End
//Si on est en finale
If abs(I)=abs(J
Then
Finale...
End
//On affiche le gagnant
Disp "Gagnant:
.5I+1
Rép+2+(Rép<0
Je ne suis pas sur d'avoir compris le déroulement de la finale par contre...
- je ne comprends pas cette commande: While 2! = abs(I) + abs(J). on est dans le cas ou le curseur arrive sur un côté ( genre I=1, J=+1 ou -1 ) et donc à l'arrêt; de plus ne manque t-il pas la 2 ème partie "qu'il ne soit pas sur un sommet abs (I-J) < 2
que signifie le " ! ".
en un mot je ne retrouve pas le while de l'énoncé
- comment se déroule la partie je comprends pas du tout comme se passent les choses.
( ni sur l'énoncé ni sur ton code ) on clique, on clique, on clique,.. et alors? et les joueurs comment ça se passent?
- je ne comprends pas pourquoi tu Disp gagnant, sans condtion, ni la suite 0.5 I+1 ni Rep +2 +( Rep < 1
autrement dit la situation est tragique!!
Des essais pour voir, avec ton code donnent
* Disp I et Pause J ne s'affichent pas
* à chaque clic, l'écran affiche " GAGNANT .5I+1 et dessous 2
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Dim 26 Juil 2015, 11:58
Bonjour,
Je ne me suis pas préoccupé du while de l'énoncé : il est incomplet, et ne correspond pas à ce qu'on veut obtenir.
!= représente simplement le simbole différent de.
Du coup "2 != abs(I) + abs(J)" vaudra vrai tant qu'on est pas sur un coin (car on aura I = +- 1 (idem pour J) donc abs(I) + abs(J) = 1 + 1 = 2) ou sur un côté (on a l'une des variable qui vaut +- 2, l'autre 0, la somme des valeurs absolues fait donc 2).
Ceci correspond à
"une finale quand se fait (1,1) ou (1,-1)
Un arrêt du jeu quand se fait un ( 2,0) par exemple."
J'ai fait le déroulement d'une partie d'après ce que tu m'as dit (ou du moins ce que j'ai compris ) : un curseur se déplace, on a une finale s'il atteint (1, 1), (-1, 1), (-1, -1), (1, -1) et une victoire si (0, 2), (2, 0), (-2, 0), (0, -2).
Je ne Disp pas gagnant sans condition : on est passé par la phase de jeu. Ensuite, j'ai traité le cas de la finale (mais je ne sais pas ce qu'on est sensé faire en finale...). Donc après ça on a forcément un gagnant.
Je considère qu'on a alors (vrai pour la phase de jeu, finale à faire) l'une des variable I ou J qui vaut +- 2, l'autre 0.
.5I+1
Rép+2+(Rép<0
permet simplement d'obtenir un nombre entre 1 et 4, différent pour chaque cas.
"à chaque clic, l'écran affiche " GAGNANT .5I+1 et dessous 2"
Ce n'est pas normal. As-tu recopié ceci tel quel ? Avec une nouvelle instruction pour le .5I+1 ?
Code
Disp "Gagnant:
.5I+1
Rép+2+(Rép<0
Par contre je n'ai pas du tout compris le déroulement d'une finale...
- d'accord pour (1,1 ), (1,-1 ), (-1,1 ), (-1,(-1,-1 ) :finale
(2,0) , (0,2), (-2,0), (0,-2) victoire
correspond bien au while. Pour ces valeurs TI s'arrête. Donc on doit cliquer tant qu'elle ne s'arrête pas ( juste?)
- avec Pause et Disp on sait dans quel cas on est. si abs (I )= ab(J) on repart à 0,0 por la finale.
si (2,0) , (0,2), ...elle affiche (1,2,3,ou 4)
- je ne comprends pas pour le gain: instruction sur I seul? et J?
( je fais le même code )
Pour les essais toujours pareil. Très curieux: Disp et Pause n'affichent pas I et J.
Un SEUL clic et TI affiche : gagnant et 2 toujours
- puisque:
" finale s'il atteint (1, 1), (-1, 1), (-1, -1), (1, -1) et une victoire si (0, 2), (2, 0), (-2, 0), (0, -2)."
il faut que abs(I) + abs (J) <2 (j'ai noté que tu n'étais pas affirmatif sur"!="
un essais confirme, tout marche.C'est vérifié pour " I ". Je pense qu'il faut les même instruction pou "J". (Calculs pour I vérifiés.)
- sinon le code fonctionne mais pour les parties gagnées les résultats sont:
J=0 et I = -2 -> sommet gagnant: 2
I = 2 -> sommet gagnant: 3
avec I = 0 et J = -2 -> sommet gagnant: 1
J = 2 -> sommet gagnant: 4
est-tu d'accord avec ces résultats?
bien sur on peut modifier l'énoncé mais si on tient compte de l'énoncé on doit avoir
0, 2 sommet gagnant: N (1)
-2, 0 sommet gagnant: O (2)
0, -2 sommet gagnant: S (3)
2, 0 sommet gagnant: E (4)
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mer 29 Juil 2015, 21:55
_Ce n'est pas normal.
au début abs(I)+abs(J) = 0
Comme ce terme ne peut augmenter que d'un a chaque tour de boucle, on a, pour un tour donné : abs(I)+abs(J) < 2 depuis le début ssi abs(I)+abs(J) != 2 depuis le début.
Donc "< 2" et "!= 2" doivent avoir le même comportement. Non?
_On peut tout à fait modifier cet affichage.
J'avoue ne pas avoir fait attention à l'énoncé pour la répartition des joueurs.
Je n'ai pas cherché une fonction qui satisferait ce qu'on veut:
Code
3
If I=2
4
If I=-2
2
If J=2
1
Disp "Gagnant:
Rép
(j'utilise la "variable" Rép (Ans en anglais) qui stocke le dernier "calcul" effectué.)
- nous sommes donc d'accord sur ce code d'énoncé assez spécial .
Remarque, as tu une idée du rôle de K à part celui de compter "les coups "? pas de donner le vainqueur en tout cas, ce qui est curieux.
- pour "!="
j'ai essayé avec le différent de la TI : " =/= ", pas de problème.
le " ! " c'est bien le factorielle de MATH ?
le code marche bien, voici un essais de partie (avec des Disps où il convient , en ajoutant K)
( I, J )
0,-1
0, 0
-1, 0
0, 0
-1, 0
-1, -1 bilan final, K= 6
finale1
0;1
1,1 K=2
finale2
0; -1
1; -1 K= 2
finale3
0,1
0,2 K= 2 vainqueur Est ( 4, Nord est 1)
Juste une question sur les "end " : je compare le code des Diviseurs à celui ci:
- dans le 1er tout est carré: nous avons un For et 2 If ( chacun rédigé normalement ) On a 3 " end " un pour For, 2 pour les If
- dans le code du jeu, il y a un While et 2 If si on peut dire.
Je compte la première série de If pour 1 -> il a son end
deuxième If (pour la finale ) -> il a son end
après il y a la serie des If que tu as ajouter pour identification des joueurs -> pas de end
et surtout While n'a pas de end ( j'en ai mis un, la TI l'a refusé )!
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Jeu 06 Aoû 2015, 22:58
Concernant les boucles/structures en ti basic:
While necessite toujours un end.
Repeat/For aussi.
Le if est particulier:
If condition
Instruction
If condition
Then
Plusieurs instructions
End
If condition
Then
Instructions1
Else
Instructions2
End
Un if seul ne concerne que l'instruction qui suit directement. Il n'y a pas besoin de then/end. (on peut ruser avec les delVar mais ce n'est pas le sujet).
Par contre, si tu veux englober plusieurs instructions, ou mettre un else, il faut rajouter un then et le end final.