CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [c++]tableaux multidimensionnels:morpi on

DébutPage précedente
1
Page suivantePage suivante
fostre fostre
MP
Niveau 8
12 juillet 2012 à 04:09:47

Bonjour

Depuis une heure j'essaye de faire un début de programme pour un coder un morpion .
Pour l'instant j'essaye d'afficher la grille du morpion remplis de "o" et ensuite je tente de rentrer une coordonnée pour placer une croix dans la grille .
Je pense avoir un début de code juste pourtant ,mon programme bug et quand je veux essayer de placer une croix dans la grille (3x3) , le programme en place 2 au lieu d'une ! J'utilise les tableaux multidimensionnels pour info .

Voici le code source :

--------------------------------------------------
---------------------

  1. include <iostream>

using namespace std;

void reni(char tableau[2][2]);

void afficher(char tableau[2][2]);

int main()
{

char tableau[2][2];
int r(0);
int x(0),y(0),v(0);

reni(tableau);

cout<<endl<<endl;

while (v<9)
{
x=0;
y=0;
cout<<" Quel coordonne voulez vous taper ? [x],[y] de 0 a 2 "<<endl<<endl;
cout << " x = ";
cin>>x;
cout<<endl;
cout<<" y = ";
cin>>y;
cout<<endl;

tableau[y][x]='x';

afficher(tableau);

v++;
}

return 0;

}

void reni(char tableau[2][2])
{

for(int i(0);i<3;i++)
{
cout<<endl;

for(int u(0);u<3;u++)
{
tableau[i][u]='o';
cout<<tableau[i][u];

}

}
}

void afficher(char tableau[2][2])
{

for(int i(0);i<3;i++)
{
cout<<endl;

for(int u(0);u<3;u++)
{

cout<<tableau[i][u];

}
}

}
--------------------------------------------------
--------------------

et un screen de la console : https://www.noelshack.com/2012-28-1342058184-screen.png

J'ai aussi un autre souci qui peut paraitre bête : quand j’enlève le : int r ; ça plante tout le programme alors que la variable r n'intervient pas dans le programme ... Essayez vous verrez .

Je ne comprends vraiment rien ... Je précise que je débute mon apprentissage du c++ .

Merci d'avance

godrik godrik
MP
Niveau 22
12 juillet 2012 à 04:29:36

verifie les dimensions de tes tableaux.

chris_27 chris_27
MP
Niveau 10
12 juillet 2012 à 09:32:01

void afficher(char tableau[2][2]) :d) pour info, ceci ne fait pas ce qui est écrit. C'est en effet équivalent à ceci :
void afficher(char tableau[2][])

Je préfère le premier car ça donne plus d'informations sur ce qu'on attend en entrée, mais comme le souligne godrik, il faut quand même vérifier les dimensions du tableau.

Après, le main est très bizarre, au sens où il n'y a aucune vérification de fait avant d'écrire dans le tableau. :(

Enfin, Code::Blocks a un débogueur, c'est fait pour s'en servir. :-)))

DragonCigogne DragonCigogne
MP
Niveau 5
12 juillet 2012 à 11:30:04

Les dimensions de tes tableaux sont incorrectes.

Nightmarez Nightmarez
MP
Niveau 9
12 juillet 2012 à 14:09:58

L'auteur, tu confonds les dimensions d'un tableau a la declaration et l'offset que tu passes entre crochet pour acceder a un element de ton tableau.

Dans le cas des dimensions, par exemple char tab[2][2], ce sera un tableau de 2 par 2 qui sera declare, mais lorsque tu souhaiteras acceder au dernier element, ce sera tab[1][1].

fostre fostre
MP
Niveau 8
12 juillet 2012 à 14:23:38

D'accord merci de votre aide :)

j'ai essayé de corrigé et de prendre en compte vos commentaire et voici le nouveau code source et ça a l'air de marcher .
---------------------------------------

  1. include <iostream>

using namespace std;

void afficher(char tableau[3][3]);

int main()
{

char tableau[3][3]= {{'o', 'o','o'},{'o', 'o', 'o'},{'o', 'o', 'o'}};

int r(0);
int x(0),y(0),v(0);

for(int i(0);i<3;i++)
{
cout<<endl;
for(int u(0);u<3;u++)
{

cout<<tableau[i][u];

}
}

cout<<endl<<endl;

while (v<9)
{
x=0;
y=0;
cout<<" Quel coordonne voulez vous taper ? [x],[y] de 0 a 2 "<<endl<<endl;
cout << " x = ";
cin>>x;
cout<<endl;
cout<<" y = ";
cin>>y;
cout<<endl;

tableau[y][x]='x';

afficher(tableau);
v++;
}

return 0;

}

void afficher(char tableau[3][3])
{

for(int i(0);i<3;i++)
{
cout<<endl;
for(int u(0);u<3;u++)
{

cout<<tableau[i][u];

}
}

}

--------------------------------------------------
--

C'est vrai que je me suis emmêlé les pinceaux avec les déclaration et accès au tableau .
Par contre , je n'ai pas compris cette phrase :" l'offset que tu passes entre crochet pour acceder a un element de ton tableau".
Et si vous voyez une autre erreur , n’hésitez pas , ça peut me faire progresser :merci:

Nightmarez Nightmarez
MP
Niveau 9
13 juillet 2012 à 03:28:30

Hmmm, et bien comment dire... Dans le cas de ton tableau de char[3][3], c'est en realite un pointeur qui contient l'adresse de ce tableau et pointe sur le premier element.

Ce que j'entend par offset, c'est un decalage par rapport a la premiere case de ton tableau, c'est a dire que tu rajoutes la taille d'une case multiplie par ce que tu passes entre crochet pour acceder a l'element. C'est pour ca que tab[0][0] va etre la premiere case du tableau, car en realite c'est "position de la premiere case + 0 * la taille d'un char". C'est un peu difficile a comprendre si tu ne connais pas bien les notions de pointeurs et d'adressage.

fostre fostre
MP
Niveau 8
14 juillet 2012 à 01:55:51

Nightmarez => je crois comprendre ce que tu veux dire , mais il est clair que je ne connais pas assez les notion sur les pointeur , je pense que developpez.com pourra m'en faire apprendre d'avantage sur ce sujet .

:merci:

army757 army757
MP
Niveau 6
27 juillet 2014 à 17:59:18

je sais pas si sa peut t'aider mais voicie le code que j'avais fais à mes TOUT DEBUT ,AVANT DE CONNAITRE LE TABLEAU (c'est pour dire ... :sarcastic: )
sans aucune aide je precise ,et je n'avais que 15 ans ...

voila retranscris sa avec un tableau mutlidimensionel :)

army757 army757
MP
Niveau 6
27 juillet 2014 à 17:59:39
  1. include <iostream>
  2. include <string>

using namespace std;

int main()
{
char const croix('X');
char const rond('O');

string A1("."), A2("."), A3("."); // initialisation des variables correspondants aux cases
string B1("."), B2("."), B3(".");
string C1("."), C2("."), C3(".");

cout << " A B C" << endl; // création du morpion
cout << "D" << " |" << A1 << " |" << B1 << " |" << C1 << " |" << endl;
cout << " _________" << endl;
cout << "E" << " |" << A2 << " |" << B2 << " |" << C2 << " |" << endl;
cout << " _________" << endl;
cout << "F" << " |" << A3 << " |" << B3 << " |" << C3 << " |" << endl;
cout << endl << "----------------" << endl << endl;

int nbTours(0);
string lettresCase("inconnue");

bool faux(false); // true = case non jouer
bool AD(true);
bool AE(true);
bool AF(true);
bool BD(true);
bool BE(true);
bool BF(true);
bool CD(true);
bool CE(true);
bool CF(true);

for(int nbTours = 1; nbTours < 10; nbTours++) // compteur de tours
{
if (nbTours == 1 || nbTours == 3 || nbTours == 5 || nbTours == 7 || nbTours == 9) // joueur 1
{
cout << "joueur 1 a vous de jouer ! saisissez la lettre d'une colonne puis la lettre de la ligne de la case souhaiter !" << endl;
cin >> lettresCase;

string const ad("AD");
string const ae("AE");
string const af("AF");
string const bd("BD");
string const be("BE");
string const bf("BF");
string const cd("CD");
string const ce("CE");
string const cf("CF");

if (lettresCase == ad && AD)
{
A1 = croix;
AD = faux;

}
else if (lettresCase == ae && AE)
{
A2 = croix;
AE = faux;
}
else if (lettresCase == af && AF)
{
A3 = croix;
AF = faux;
}
else if (lettresCase == bd && BD)
{
B1 = croix;
BD = faux;
}
else if (lettresCase == be && BE)
{
if (nbTours == 1)
{
cout << "vous ne pouvez pas prendre cette case au premier tour !" << endl;
}
else
{
B2 = croix;
BE = faux;
}
}
else if (lettresCase == bf && BF)
{
B3 = croix;
BF = faux;
}
else if (lettresCase == cd && CD)
{
C1 = croix;
CD = faux;
}
else if (lettresCase == ce && CE)
{
C2 = croix;
CE = faux;
}
else if (lettresCase == cf && CF)
{
C3 = croix;
CF = faux;
}
else
{
cout << "selectionner une case existante !" << endl;
}

cout << " A B C" << endl;
cout << "D" << " |" << A1 << " |" << B1 << " |" << C1 << " |" << endl;
cout << " _________" << endl;
cout << "E" << " |" << A2 << " |" << B2 << " |" << C2 << " |" << endl;
cout << " _________" << endl;
cout << "F" << " |" << A3 << " |" << B3 << " |" << C3 << " |" << endl;
cout << endl << "----------------" << endl << endl;

}

else // joueur 2
{
cout << "joueur 2 a vous de jouer ! saisissez la lettre d'une colonne puis la lettre de la ligne de la case souhaiter !" << endl;
cin >> lettresCase;

string const ad("AD");
string const ae("AE");
string const af("AF");
string const bd("BD");
string const be("BE");
string const bf("BF");
string const cd("CD");
string const ce("CE");
string const cf("CF");

if (lettresCase == ad && AD)
{
A1 = rond;
AD = faux;
}
else if (lettresCase == ae && AE)
{
A2 = rond;
AE = faux;
}
else if (lettresCase == af && AF)
{
A3 = rond;
AF = faux;
}
else if (lettresCase == bd && BD)
{
B1 = rond;
BD = faux;
}
else if (lettresCase == be && BE)
{
B2 = rond;
BE = faux;
}
else if (lettresCase == bf && BF)
{
B3 = rond;
BF = faux;
}
else if (lettresCase == cd && CD)
{
C1 = rond;
CD = faux;
}
else if (lettresCase == ce && CE)
{
C2 = rond;
CE = faux;
}
else if (lettresCase == cf && CF)
{
C3 = rond;
CF = faux;
}
else
{
cout << "selectionner une case existante ou qui n'a pas deja ete jouer !" << endl;
}

cout << " A B C" << endl;
cout << "D" << " |" << A1 << " |" << B1 << " |" << C1 << " |" << endl;
cout << " _________" << endl;
cout << "E" << " |" << A2 << " |" << B2 << " |" << C2 << " |" << endl;
cout << " _________" << endl;
cout << "F" << " |" << A3 << " |" << B3 << " |" << C3 << " |" << endl;
cout << endl << "----------------" << endl << endl;
}
}

return 0;
}

army757 army757
MP
Niveau 6
27 juillet 2014 à 18:02:09

pour la case centrale c'est mon pere qui m'avait dit qu'il valait mieux empecher l'utilisateur au premier tour mais tu peux la remettre en suivant le reste du code

army757 army757
MP
Niveau 6
27 juillet 2014 à 18:03:35

ps : dev cpp > codeblock :ok:

RoccatSub RoccatSub
MP
Niveau 5
27 juillet 2014 à 18:32:05

Ps : Le post datait d'il y a deux ans

Odvie Odvie
MP
Niveau 10
28 juillet 2014 à 09:43:27

PS: Dev C++ n'est plus maintenu depuis des années.

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment