Programme/algorithme

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Oniiknil
Messages: 3
Enregistré le: 19 Mar 2018, 19:35

Programme/algorithme

par Oniiknil » 19 Mar 2018, 21:46

Bonjour
J'essaie de créer un programme pour jouer à pierre-feuille-ciseaux à deux joueurs. je sais que ça ne sert pas à grand choses, mais l’année dernière je me suis promis de le créer, et de le rentre fonctionnel. Malheureusement je n’y arrive pas vraiment.
Avant de rentrer dans les détails, voici le programme (le programme est écrit en langage TI, mais s'il faut je peut le traduire en langage naturel):

:A=0
:U=0
:V=0
:While U≠5 ou V≠0
:imput X
:Disp " "
:Disp " "
:Disp " "
:Disp " " }pour ne pas que le joueur 2 voit le choix du joueur 1
:Disp " "
:Disp " "
:Disp " "
:Imput Y
:If X=1
:Then
:Disp "X:PIERRE"
:If X=2
:Then
:Disp "X:FEUILLE"
:If X=3
:Then
:Disp "X:CISEAUX"
:If Y=1
:Then
:Disp "Y:PIERRE"
:If Y=1
:Then
:Disp "Y:FEUILLE"
:If Y=1
:Then
:Disp "Y:CISEAUX"
:If X=Y
:Then
:Disp "EGALITE"
:If X=1 et Y=2
:Then
:Disp "Y:GAGNE"
:V+1->V
:If X=1 et Y=3
:Then
:Disp "X:GAGNE"
U+1->U
:If X=2 et Y=1
:Then
:Disp "X:GAGNE"
:U+1->U
:If X=1 et Y=3
:Then
:Disp "Y:GAGNE"
:V+1->V
:If X=3 et Y=1
:Then
:Disp "Y:GAGNE"
:V+1->V
:If X=3 et Y=2
:Then
:Disp "X:GAGNE"
:U+1->U
:If X>3 ou X<1
:Then
:Disp "X:VALEUR INVALIDE"
:If Y>3 ou Y<1
:Then
:Disp "Y:VALEUR INVALIDE"
:End
:If U>V
:Then
:Disp "X:GAGNE"
:Disp "FIN DE PARTIE"
:If V>U
:Then
:Disp "Y:GAGNE"
:Disp "FIN DE PARTIE"

Pour moi, le programme devrait fonctionner de cette façon:

Les variables A, U, et V sont mises a 0 (pour ne pas que l'une des valeur reste la même quand lance le programme après l'avoir déjà lancé une fois). Les joueurs donnent une valeur aux variables X et Y selon leur choix. Selon la valeur des variables, le programme affiche le choix des joueurs. Le programme compare les valeurs de X et Y en fonctions des consignes énoncées dans les "If". Si un "If" est validé, et que les deux variables sont égales, le programme l'affiche; Si les variables sont différentes, le programme vérifie quelle variable l'emporte sur l'autre selon les consignes du "If", puis l'affiche. Il ajoute 1 à la variable U ou V associée à X ou Y, ce qui signifie qu'un point est attribué au joueur. Le programme vérifie que les valeurs de X et Y soient dans l’intervalle [1;3] (ma façon de le faire est peu être un peu maladroite). Si ce n'est pas le cas, le programme l'affiche. Le programme re-verifie le "While". Si aucune des variable n'est égale a 5, toutes les instructions de la boucles sont refaites. Si une de variable a atteint 5, le programma vérifie quelle variable a la valeur la plus élevée, donc quel joueur a le plus de points, et l'affiche.
Même en récrivant le programme et en écrivant l’interprétation que je lui donne, je ne trouve pas ou sont les erreurs, alors si vous avez une idée, n’hésitez pas
Merci.



Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21515
Enregistré le: 11 Nov 2009, 22:53

Re: Programme/algorithme

par Ben314 » 19 Mar 2018, 23:14

Salut,
Le reste, vu en diagonale, ça a l'air d'être correct, mais ça :
:While U≠5 ou V≠0
c'est pas bon.
Tu veut que la boucle s'arrête lorsque U=5 ou bien V=5 (= lorsque le joueur X a gagné ou bien le joueur Y a gagné).
Donc il faut que la boucle continue tant que (*) U≠5 et V≠5 (=tant que le joueur X n'a pas gagné et que le joueur Y n'a pas gagné) : c'est un et qu'il te faut et pas un ou.

(*)"while" = "tant que"
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Oniiknil
Messages: 3
Enregistré le: 19 Mar 2018, 19:35

Re: Programme/algorithme

par Oniiknil » 20 Mar 2018, 19:50

Ben314 a écrit:Salut,
Le reste, vu en diagonale, ça a l'air d'être correct, mais ça :
:While U≠5 ou V≠0
c'est pas bon.
Tu veut que la boucle s'arrête lorsque U=5 ou bien V=5 (= lorsque le joueur X a gagné ou bien le joueur Y a gagné).
Donc il faut que la boucle continue tant que (*) U≠5 et V≠5 (=tant que le joueur X n'a pas gagné et que le joueur Y n'a pas gagné) : c'est un et qu'il te faut et pas un ou.

(*)"while" = "tant que"




Oui je viens de remarquer mon erreur, merci!
J'ai aussi fait quelques tests qui m'ont prouvé qu'une seule commande placé derrière le "If" lui est "assignée", donc je panse que c'est pour ça qu'il pour ça qu'il y avait un problème au niveau des valeurs de U et V. J'ai rectifié ça en remettant un "If" juste avant les U+1->U et V+1->V, et avant les " Disp "FIN DE PARTIE"", et j'ai également enlevé tous les "Then"
Maintenant le programme fonctionne presque parfaitement, à part qu'il ne s'arrête jamais, donc je pense que U et V n'atteignent jamais 5... J'ai essayé d'ajouter un "Disp U" et "Disp V" à la fin de la boucle, et malheureusement le problème vient de valeur de U et V qui ne se réinitialise pas lorsqu'on relance le programme, donc je me retrouve un U=80 et V=94...

Voilà le nouveau programme :

:A=0
:U=0
:V=0
:While U≠5 et V≠0
:imput X
:Disp " "
:Disp " "
:Disp " "
:Disp " " }pour ne pas que le joueur 2 voit le choix du joueur 1
:Disp " "
:Disp " "
:Disp " "
:Imput Y
:If X=1
:Disp "X:PIERRE"
:If X=2
:Disp "X:FEUILLE"
:If X=3
:Disp "X:CISEAUX"
:If Y=1
:Disp "Y:PIERRE"
:If Y=2
:Disp "Y:FEUILLE"
:If Y=3
:Disp "Y:CISEAUX"
:If X=1 et Y=1
:Disp "EGALITE"
:If X=1 et Y=2
:Disp "Y:GAGNE"
:If X=1 et Y=2
:V+1->V
:If X=1 et Y=3
:Disp "X:GAGNE"
:If X=1 et Y =3
:U+1->U
:If X=2 et Y=1
:Disp "X:GAGNE"
:If X=2 et Y=1
:U+1->U
:If X=2 et Y=3
:Disp "Y:GAGNE"
:If X=2 et Y=3
:V+1->V
:If X=3 et Y=1
:Disp "Y:GAGNE"
:If X =3 et Y=1
:V+1->V
:If X=3 et Y=2
:Disp "X:GAGNE"
:If X=3 et Y =2
:U+1->U
:If X>3 ou X<1
:Disp "X:VALEUR INVALIDE"
:If Y>3 ou Y<1
:Disp "Y:VALEUR INVALIDE"
:End
:If U>V
:Disp "X:GAGNE"
:If U>V
:Disp "FIN DE PARTIE"
:If V>U
:Disp "Y:GAGNE"
:If V>U
:Disp "FIN DE PARTIE"
Modifié en dernier par Oniiknil le 20 Mar 2018, 19:52, modifié 2 fois.

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21515
Enregistré le: 11 Nov 2009, 22:53

Re: Programme/algorithme

par Ben314 » 21 Mar 2018, 08:35

Je pense qu'il s'agit maintenant plus d'un problème de syntaxe que de structure de l'algorithme, donc c'est bien moins sûr que je repère l'erreur (je connais absolument pas le langage en question).

MAIS, le truc qui est quand mêle bizarre , c'est qu'au début du programme, pour mettre la valeur 0 dans la variable A tu utilise la syntaxe A=0alors qu'au milieu du programme, pour mettre la valeur de U+1 dans U tu utilise la syntaxe U+1->U.
Tu es sûr que c'est pas plutôt 0->A que tu doit mettre au début ?
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Oniiknil
Messages: 3
Enregistré le: 19 Mar 2018, 19:35

Re: Programme/algorithme

par Oniiknil » 22 Mar 2018, 16:46

Ben314 a écrit:Je pense qu'il s'agit maintenant plus d'un problème de syntaxe que de structure de l'algorithme, donc c'est bien moins sûr que je repère l'erreur (je connais absolument pas le langage en question).

MAIS, le truc qui est quand mêle bizarre , c'est qu'au début du programme, pour mettre la valeur 0 dans la variable A tu utilise la syntaxe A=0alors qu'au milieu du programme, pour mettre la valeur de U+1 dans U tu utilise la syntaxe U+1->U.
Tu es sûr que c'est pas plutôt 0->A que tu doit mettre au début ?


Je viens d'essayer... et ça marche!
Je ne comprends pas vraiment pourquoi le programme interprète différemment A=0 et 0->A, mais ce n'est pas le plus important. Maintenant mon programme marche, alors merci beaucoup! Ça me fait vraiment plaisir de voir ce programme qui moisi dans ma calculette depuis des mois enfin abouti! Encore merci!

Mais j'ai encore un problème: maintenant, je vais m'ennuyer en math quand j'aurais fini mes exercices....

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 35 invités

cron

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite