Partage

[Exercices] Venez vous entraîner !

(v2)

30 juin 2011 à 10:52:33

ben mon code est propre (peut être trop) mais c'est bien d'apprendre à faire tout bien et détailler si plus tard tu peut être amener à modifier le code ...
Par contre ne pas utiliser la POO est bizarre car on est sur le forum de C++. Sans la POO on peut presque le considérer comme du C avec l'utilisation des objets en plus ...
30 juin 2011 à 10:57:42

J'ai encore un peu de mal à utiliser la POO car avant je programmais en C :-° .
30 juin 2011 à 11:06:56

Citation : PITETRE

ben mon code est propre (peut être trop) mais c'est bien d'apprendre à faire tout bien et détailler si plus tard tu peut être amener à modifier le code ...
Par contre ne pas utiliser la POO est bizarre car on est sur le forum de C++. Sans la POO on peut presque le considérer comme du C avec l'utilisation des objets en plus ...



N'importe quoi! Le c++ est multiparadigme, si la POO n'est pas utile, on se force pas à l'utiliser parce qu'on est est C++...
30 juin 2011 à 11:23:00

@Equinoxe
Je savais pas qu'on pouvait directement faire les opérations avec les chars o_O
30 juin 2011 à 11:35:06

oui mais autant l'utiliser puisque c'est un atout, de plus on est ici pour s'entrainer, donc le but est de faire un code utilisant les connaissances de bases de l'apprenti programmeur

EDIT : je me propose pour faire une correction de Figlet. Je la donnerai plustard (ou demain)
30 juin 2011 à 12:19:50

Selon moi, la seule solution utilisant correctement la POO est celle de PITETRE...
Edit : @PITETRE : Figlet possède déjà une solution. J'ai pas encore terminé de tout écrire ;)
30 juin 2011 à 12:21:28

ben on peut faire différement ...
30 juin 2011 à 12:22:52

Oui, la solution en paradigme impératif est valable également.
Au fait : voir mon édit un post plus haut...
30 juin 2011 à 12:38:58

ok dsl ^^. Donne moi un exo qui n'en as pas et je la fait. Si y'en as pas je vous propose un puissance 4 (dans le même style que Tic-Tac-Toe) je ferai un post pour celui-ci une fois le code terminé.
30 juin 2011 à 13:46:24

Citation : germino

Selon moi, la seule solution utilisant correctement la POO est celle de PITETRE...
Edit : @PITETRE : Figlet possède déjà une solution. J'ai pas encore terminé de tout écrire ;)



Et la mienne ? :p
30 juin 2011 à 14:15:20

@PITETRE : Tu peux aller voir là -> http://www.siteduzero.com/forum-83-257 [...] html#r2331622
@Dumpy : ta solution compile et tourne bien. Mais elle est en plein milieu des deux paradigmes impératif et objet.
Par exemple, une classe Joueur n'aurait pas été une mauvaise idée :)
La fonction afficherGrille() aurait dû soit être membre de Grille, soit une surcharge de l'opérateur <<

Mais @tous les deux : une classe Game aurait déchargé le main() de tout ce travail :)
30 juin 2011 à 14:18:01

Franchement, je trouve que mettre de des objets juste pour faire de l'Orienté objet c'est inutile. Surtout en C++.
Par-contre, mettre la grille comme un objet peut être très utile si plus tard on souhaites installée une IA.

Voila ma solution :
#include <iostream>
#include <string>
#include <cstring>
#include <ctime>
#include <cstdlib>


using namespace std;

struct Grill
{
   Grill();
   int  setCase(int, char);
   char  getCase(int);
   void  showCase(void);
   int  winner(void);
   private:
   char Case[10];
};
Grill::Grill()
{
   strcpy(Case, "123456789");
}
int Grill::setCase(int pos,char c)
{
   if((c == 'O' || c == 'X') && pos>0 && pos < 10 && !strchr("OX", Case[pos-1]))
      return Case[pos-1] = c;
   return 0;
}
char Grill::getCase(int pos)
{
   return (pos>0 && pos < 10)? Case[pos-1]:0;
}
void Grill::showCase()
{
   cout << "  __________" << endl;
   for(int i=0;i<8;i+=3)
      cout << " | " << Case[i] << " | " << Case[i+1] << " | " << Case[i+2] << "|" << endl;
   cout << "  ~~~~~~~~~~" << endl;
}
int Grill::winner()
{
   int i;
   for(i=0;i<8;i+=3)
      if(Case[i] == Case[i+1] && Case[i+1] == Case[i+2])
         return Case[i];
   for(i=0;i<3;i+=1)
      if(Case[i] == Case[i+3] && Case[i+3] == Case[i+6])
         return Case[i];
   if((Case[0] == Case[4] && Case[4] == Case[8]) || (Case[2] == Case[4] && Case[4] == Case[6]))
      return Case[4];
   return 0;
}
int main (void)
{
   srand(time(0));
   int i, nbCoup = 0, j = 1, coup;
   Grill grilleP;
   j= (int)((double)rand() / RAND_MAX * 2)+1;
   while(nbCoup != 9 && !grilleP.winner())
   {
      grilleP.showCase();
      cout << "Joueur " << j << " :" ;
      cin >> coup;
      if(!grilleP.setCase(coup, "OX"[j-1])) continue;
      j=3-j;
      nbCoup++;
   }
   grilleP.showCase();
   if(grilleP.winner())
      cout << "Joueur " << 3-j << " a gagner !" << endl << "Bravo !" << endl;
   else
      cout << "Ex aequo" << endl;
   return 0;
}
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
30 juin 2011 à 14:22:11

pourquoi ne pas utiliser une classe plutôt qu'une structure, c'est pareil en plus complet ...
30 juin 2011 à 14:28:08

Citation : PITETRE

pourquoi ne pas utiliser une classe plutôt qu'une structure, c'est pareil en plus complet ...



non c'est la même chose. (modulo l'accessibilité / héritage par défaut.).

Sa fait plusieurs fois que je lis ce genre de remarques... c'est dans le cour officiel du sdz qu'on apprend des choses pareils ou quoi?

j=rand()%3; => % et rand c'est pas bon. cf les différentes faq pour voir comment mieux faire.
30 juin 2011 à 14:28:56

C'est pratiquement la même chose. Voir ici.

@Goten: J'allais pas m'embête juste pour savoir qui va commencer. Mais si tu y tiens... J'ai juste la flemme de retrouver la formule parmi tous les papiers que j'ai ... Je chercherais plustard. Tout ce que je me souviens c'est que c'était avec double.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
30 juin 2011 à 14:30:28

il manque les operator ce qui fait déjà pas mal ...
puet on faire des template avec les struct ?
30 juin 2011 à 14:32:16

Citation : PITETRE

il manque les operator ce qui fait déjà pas mal ...
puet on faire des template avec les struct ?


Des operator.. Pour quoi faire ?

PS: J'ai mi un lien dans mon dernier post, lis le.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
30 juin 2011 à 14:32:25

Citation : @che

C'est pratiquement la même chose. Voir ici.

@Goten: J'allais pas m'embête juste pour savoir qui va commencer. Mais si tu y tiens... J'ai juste la flemme de retrouver la formule parmi tous les papiers que j'ai ... Je chercherais plustard. Tout ce que je me souviens c'est que c'était avec double.



Fallait bien critiquer. Plus sérieusement : puisque c'est un exercice, autant virer directement les mauvaises pratiques. (et même si toi très certainement tu sais ce que tu fais d'autre personne vont le lire sans forcément savoir).

et pour pas brasser que du vent :
http://www.bourguet.org/v2/clang/random/

@pitetre : ouai.... (c'est la définition du mot pareil d'ailleurs :) )

edit : j'ai frémis sur strcpy aussi mais bon... Ulrich Drepper quoi :' (fin je suppose que t'es sur un linux)
30 juin 2011 à 14:44:27

Si j'encourage la POO, c'est simplement que quand on a commencé à faire une classe (ici Grille), le meilleur moyen de faire un code évolutif, c'est de faire d'autres classes.

Le but c'est que les débutants faisant les exercices puissent aller plus loin avec le code qu'ils ont écrit en apportant des améliorations au mini-logiciel obtenu. Et ce n'est pas en fourrant tout dans le main qu'on va pouvoir ajouter l'option partie en réseau au Tic-Tac-Toe !

edit : j'ajouterai que le but de ce topic est d'abord d'aider les débutants à pratiquer la POO même si sur de si petits projets on peut facilement s'en passer : comment vont-ils pouvoir aborder de plus gros projets en POO s'ils ne l'ont pas pratiqué et habitué sur de petits exercices ?
30 juin 2011 à 14:49:57

J'avais la formule : ((double)rand() / RAND_MAX * n);
Sinon, oui je suis sous linux. Un tableau de char suffisait donc strcpy().

@ germino: La POO franchement, j'encourage pas a en abusé. Seulement quand ça apporte un réel intérêt. Ici, je ne vois pas l'interret d'une class joueur. Ni celuis d'une class gestion.

J'édite le code...
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
30 juin 2011 à 14:52:45

lis mon édit, je pense qu'il te fera mieux saisir mon opinion ;)

edit : si tu veux que nous en discutions, parlons-en sur le sujet méta pour ne pas polluer celui-ci stp ;)
30 juin 2011 à 14:57:04

faut pas en abuser je suis d'accord, mais faire une classe Grille ca mange pas de pain ;)


EDIT : pas moyen de virer toute notre pollution ? modo plz
30 juin 2011 à 17:26:14

personnellement, comme la si bien dit germino, se forcer à faire de la POO a de nombreux avantages. En effet, on pourra non seulement faire un code clair mais surtout évolutif !!!!! (sans oublier parfois le gain de temps et une plus grande optimisation ^^ )
30 juin 2011 à 17:32:21

@PITETRE Il y a un problème dans ton code : il ne gère pas les cas d'égalité et continu malgré que la grille soit pleine.
30 juin 2011 à 17:36:22

oui c'est vrai ;) j'arrengerai ca. Si il y as d'autre problème dites.
30 juin 2011 à 17:51:52

Il y a aussi une erreur ou surement une faute de frappe
tu as écrit : bienvenu dans ce tix-tac-toe
au lieu de : bienvenu dans ce tic-tac-toe
:lol:
30 juin 2011 à 17:53:37

oui c'est très pointu en effet (je me doutait même pas que quelqu'un le lirait :p ) mais bonj'ai une escuse : je l'ai fait un peu tard hier :p .
30 juin 2011 à 17:58:37

A aufait, je te confirme, system("clear") n'est pas portable.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
30 juin 2011 à 17:59:33

dommage, quelle est la version windobe ?
30 juin 2011 à 18:07:50

system("cls");
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

[Exercices] Venez vous entraîner !

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown