Programmer un morpion en ada

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 11 Nov 2012, 13:23

Ok, je l'avais fais avec le compteur qui s'incrémentait à chaque fois qu'une case est jouée.

Ta solution me parait tout aussi bonne, je vais tenter de la mettre en application.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



C.Ret
Membre Relatif
Messages: 497
Enregistré le: 02 Juil 2012, 13:33

par C.Ret » 11 Nov 2012, 17:43

fatal_error a écrit:Il te faut une fonction capable de te dire si il reste une case de libre (ce qui est différent).


En effet, compter le nombre de case est différent de savoir s'il reste encore une case de libre.

Mais pour le cas du morpion, c'est bien plus simple, quoi qu'il arrive, il n'y a que 9 cases.
Donc, à mon humble avis, il n'y a pas besoin de fonction pour contrôler ou compter les cases vides.

Il faut simplement ne jouer que neuf fois !

Il est plus rapide et plus simple de compter le nombre de tours (= nombre de fois qu'un joueur joue) et ne sortir de la boucle qu'une fois arrivé à neuf tours (à moins bien sûr qu'un des joueurs ne gagne avant, dans ce cas on sort immédiatement)

De même, est-il nécessaire de contrôler si un des joueur gagne avant le cinquième tour du jeu ?
Je me souviens du temps où je programmais des machines très lentes, ce type d'économie permettait de gagner de précieuses secondes. Bon aujourd'hui ce n'est plus au goût du jour, les programmeurs comptent sur la puissance et la vélocité des systèmes actuels pour simplifier l'analyse et l'implémentation des algorithmes.

C'est peut-être pour cela que mon Duo Centrino démarre douze fois plus lentement mon portable que mon vieux pentium II MMX mon vieil ordi de bureau ?

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 11 Nov 2012, 18:18

Il est plus rapide et plus simple de compter le nombre de tours (= nombre de fois qu'un joueur joue) et ne sortir de la boucle qu'une fois arrivé à neuf tours (à moins bien sûr qu'un des joueurs ne gagne avant, dans ce cas on sort immédiatement)


Je comprends l'idée, mais du fait surement que je suis novice en ma matière j'arrive pas à bien saisir la différence de temps.


Parce que si tu testes avant le 5ème tour (tu gagneras du temps par rapport aux 9 en tout) mais en même temps, la machine va faire un test en plus et donc elle fera plus de calcul (si les joueurs dépassent ces 5 tours). Enfin je ne sais pas trop, ça reste un peu abstrait.


J'ai bien dis abstrait pas inintéressant...mais sans un exemple précis qui calculerais le temps écoulé (comme par exemple un test comparant méthode de calcul naturelle et dichotomique que j'avais fais en math/info)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 11 Nov 2012, 18:45

Il faut simplement ne jouer que neuf fois !

que se passe-t-il si tu prends une partie en cours de route?
ton compteur est désynchronisé.

moi ce que j'aime pas, c'est que ca veut dire que pour chacune des méthodes (déposer jeton, retirer jeton, effacer grille), il faut en écrire une qui wrappe les primitives fournies (et dont il faut se servir) pour updater le compteur en même temps en accordance.

Donc oui ca se fait, mais c'est du travail de plus.

j'arrive pas à bien saisir la différence de temps.

ben dans un case tu fais :
extraireLigne (trois appels) + test case vide (trois fois par ligne) donc au pire des cas 9 "instructions"
dans l'autre tu fais
compteur++
test compteur donc 2 instructions (ce qui est clairement plus rapide).

De même, est-il nécessaire de contrôler si un des joueur gagne avant le cinquième tour du jeu ?

Ben effectivement, l'optimisation ne tient sans doute plus une aussi grande importance dans un morpion :D
la vie est une fête :)

C.Ret
Membre Relatif
Messages: 497
Enregistré le: 02 Juil 2012, 13:33

par C.Ret » 11 Nov 2012, 18:50

Suppose que comme la fonction ilYAUnGagnant, qui permet de déterminer si un joueur a gagné, t'a été donnée par ton Prof, celui réclame 10€ à chaque fois que tu l'utilise.

Voyons combien coûte l'utilisation de l'algorithme quand on utilise la fonction de test à chaque tour.

Debut de Partie:
Le joueur 1 joue en premier.
Grille Vide
1.Tour
Joueur 1 joue (il y a qu'une X sur la grille, aucune chance d'en aligner 3 !)
ilYAUnGagnant 10€
2.Tour
Joueur 2 joue (il y a alors une X et un O sur la grille - aucun moyen de gagner)
ilYAUnGagnant 10€
3.Tour
Joueur 1 joue (il y a deux X et un O sur la grille, aucune chance d'en aligner 3 !)
ilYAUnGagnant 10€
4.Tour
Joueur 2 joue (il y a alors deux X et deux O sur la grille - aucun moyen de gagner)
ilYAUnGagnant 10€

Jusque là tu dois 40€ à ton Prof et c'est sûr personne ne gagne au morpion avant le 5 tour.
Tu n'as pas l'impression d'avoir gaspillé tes 40€ ?

5.Tour
Joueur 1 joue (il y a trois X et deux O sur la grille




vvvvvvv vvvvvvv vvvvvvv
[/code]

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 11 Nov 2012, 18:57

AH ouai je l'avais pas compris dans ce sens, pour moi c'était que tu faisais un test pour savoir si tu gagnais avant le 5ème tour... c’est pour ça que je voyais pas trop...

Bien entendu, ici ça prend tout son sens.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

C.Ret
Membre Relatif
Messages: 497
Enregistré le: 02 Juil 2012, 13:33

par C.Ret » 11 Nov 2012, 19:27

fatal_error a écrit:que se passe-t-il si tu prends une partie en cours de route?


La même chose que si je descend en marche, je me casse la gueule ! :we:

Dans le cas d'une analyse de grille, effectivement avoir une fonction de comptage va vite devenir indispensable.
Mais pour un programme de Morpion où l'on contrôle le déroulement, programmer c'est, comme Turing l'expliquait, contrôler les états d'une machine.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 11 Nov 2012, 20:06

Dans le cas d'une analyse de grille

je parlais pas dans l'hypothèse d'une analyse de grille, je disais que d'un point de vue gestion, c'est pénible de gérer le compteur parce qu'il faut faire gaffe qu'on lupdate bien en fonction de chacun des primitives qu'on utilise. (même si ici yen a pas 50).
ps: un peu d'ascii :)
Code: Tout sélectionner
[FONT=Courier New];););););););)
;)X;) ;)O;)
;););););););)
;) ;)X;) ;)
;););););););)
;)O;)O;) ;)
;););););););)[/FONT]
la vie est une fête :)

C.Ret
Membre Relatif
Messages: 497
Enregistré le: 02 Juil 2012, 13:33

par C.Ret » 11 Nov 2012, 21:05

J'aivais bien compris. Il y a bien des cas où un tel compteur doit être géré en plusieurs endroits dans les "primitives" et c'est vite une source de soucis. Ce n'est pas notre cas, le nombre de symbole placé augmente uniquemetn de 1 à chaque fois qu'un joueur joue une position. Ce compteur est donc facilemtn gérable (dans la boucle principale).

Mais c'est état d'esprit m'inquiète un peu. J'ai cru comprendre que les language évolué actuels étaient justemet fait pour apporter une solution efficace et convenable à ce type de souci. Classe, instantation, constructeur, destructeur, types composés, énumérations, etc... tous ces objets n'ont-ils pas justement été inventés pour que ce genre de "comptage" se fasse facilement et de façon naturelle ?

P.S.: Bravo pour le ASCii art ! Cela me rapèle un peu le problème des cinq rectangles imbriqués.

Image

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 11 Nov 2012, 21:36

Classe, instantation, constructeur, destructeur, types composés, énumérations, etc... tous ces objets n'ont-ils pas justement été inventés pour que ce genre de "comptage" se fasse facilement et de façon naturelle ?

c'est pas dépendant du langage mais de la lib qu'on a fournie à Rockleader, si cette facilité de comptage n'est pas fournie, ben...faut se la taper :triste: . Après oui, on peut imaginer faire un Decorateur pour avoir le compteur, mais c'est un peu overkill.

P.S.: Bravo pour le ASCii art ! Cela me rapèle un peu le problème des cinq rectangles imbriqués.

oui, j'aurais pas eu l'idée sans le tien :lol3:
la vie est une fête :)

 

Retourner vers ϟ Informatique

Qui est en ligne

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

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