[lanc C] Comment créer un tableau 2D en C???

Fermé
popoff - 14 janv. 2008 à 01:02
 popoff - 14 janv. 2008 à 03:58
Bonjour,

Je voudrais créer un jeu en C dans lequel je doit faire appel a un tableau 2D.
Ce jeu (en mode console) se présente sous la forme d'un tableau de 4*4 cases dans lesquelles je place au hazard des numéros de facon a ce que toutes les cases soient remplies et que chaque numéro soit en deux exemplaires (un tableau de 16 cases remplies de 8 paires de numéros). Le joueur doit alors rentrer les coordonnées de deux cases et le programme doit regarder si les cases contiennent le meme numéro (une paire). Le joueur doit trouver toutes les paires qu'il y a dans le tableau.

Mais voila je buche d'entrée car je ne sait pas comment créer un tableau 2D.
Aussi je voudrais savoir comment remplir ces cases au hazard avec les numéros.
Si vous pouvez ne serait ce que dans un premier temps me dire comment créer un tableau 2D je vous en serais tres reconnaissant!
MErci
A voir également:

22 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
14 janv. 2008 à 01:05
c'est tres simple ;)
int tab[4][4];
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
14 janv. 2008 à 01:08
Salut,

Tu le déclares comme ça:
int tab[4][4];

Et tu attribues les valeurs comme ça:
tab[0][3] = 5;

Ca mettra 5 dans la première ligne à la quatrième colonne.

Et pour des valeurs au hasard:
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/random.3.html
0
WAW reponse expresse merci!
encore une chose: pour accéder a la case 2 de la colonne 2 je tape quoi stp?
0
OK merci beaucoup!
Vous sauriez comment remplir les cases au hazard avec des numéros sans mettre plusieur fois le meme numéro svp?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oups j'avais pas vu le lien!
MERCI POUR TOUT!!!
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
14 janv. 2008 à 01:14
Ben ya ça, mais ça ne marche que sur les processeurs Intel/Amd:

http://www.commentcamarche.net/faq/sujet 7070 generer des nombres aleatoires efficacement

Il ya des manières bien plus intelligentes pour avoir une bonne variation de génération de nombres aléatoires, mais je me suis pas trop penché là dessus.
0
Je te remerci pour le lien je regarde tout ca et je poste si je comprend pas!
0
Aussi j'avais oublier on l'initialise comment ce tableau 2D svp?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
14 janv. 2008 à 01:28
Juste en faisant int tab[4][4];
Tu devrais regarder un ptit cours de C, c'est tentant de brûler ce genre d'étape mais tu verras, tu seras plus à l'aise.
0
:) C'est tout simple alors!
Merci pour ta réponse et pour ton conseil!
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
14 janv. 2008 à 01:38
:-)
Tiens, regarde ici https://www.commentcamarche.net/contents/120-langage-c-les-tableaux dans la section tableaux multidimensionnels.
0
Merci pour le lien J'ai tout ce qu'il faut sur les tableau maintenant. :D
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
14 janv. 2008 à 02:01
pour remplir ton tableau avec des pair differentes
tu peut initialiser toutes les case a 9
puis tu peux utiliser ce bout de code qui prends une case au hasard puis lui ajoute les 2 elements d'une pair
bien sur ne pas oublier d'utiliser avant srand(time(NULL)); pour eviter d'avoir le meme tableau a chaque lancement du programme...
i=j=0;
for(k=1;k<=8;k++)
{
    while(tab[i][j]==0 || tab[i][j]<=8)
    {
    i=rand()%4;
    j=rand()%4;
    }
    tab[i][j]=k;
    while(tab[i][j]==0 || tab[i][j]<=8)
    {
    i=rand()%4;
    j=rand()%4;
    }
    tab[i][j]=k;
}

bonne chance ;)
0
Salut mype!!

Je ne comprend pas trop ta fonction tu voudrais bien me l'expliquer stp?
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
14 janv. 2008 à 02:48
la fonction choisis des cases du tableau au hasard puis les remplis avec les 8 chiffres qui forment les pairs
for(k=1;k<=8;k++)
k designe le chiffre a rentré dans le tableau de 1 à 8

while(tab[i][j]<=8)
ça c'est pour eviter de rentrer un chiffre dans une case si elle contient deja l'un des chiffre d'une pair
ainsi on ne rentre les chiffres que dans les cases qui ne contiennent aucun chiffre d'une pair (n'oublie pas d'initialiser toutes les cases du tableau a 9 au depart avec deux boucle for)

i=rand()%4;j=rand()%4;
la tu choisis les case au hasard grace a la fonction rand

et voila...
si tu veux voir ce que ça donne il suffit de tester ;)
#include <stdio.h>

int main()
{

    int i,j,k;
    int tab[4][4];

for(i=0;i<4;i++)
for(j=0;j<4;j++)
tab[i][j]=9;

    srand(time(NULL));

i=j=0;
for(k=1;k<=8;k++)
{
    while(tab[i][j]<=8)
    {
    i=rand()%4;
    j=rand()%4;
    }
    tab[i][j]=k;
    while(tab[i][j]<=8)
    {
    i=rand()%4;
    j=rand()%4;
    }
    tab[i][j]=k;
}

for(i=0;i<4;i++)
{
    for(j=0;j<4;j++)
    {
        printf("%d  ",tab[i][j]);
    }
    printf("\n");
}
return 0;
}
0
Ok je comprend mieux en fait je croyais que ce code mettait les deux chiffres composant les pairs dans la meme case!
En plus je ne comprenait la synatxe de ton while (toujours pas d'ailleurs): je connait la fonction do{code a effectué}while(conditions) mais je ne savait pas qu'on pouvait utilisé while comme ca!
J'irai dormir moi c*n demain soir lol!
Je te remerci grandement pour ton coup de main en tout cas ;)
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
14 janv. 2008 à 03:25
de rien...

en effet la boucle while est plus efficace que la boucle do...while je l'utilise pour pas remplir la meme case ainsi elle permet de tester si la case tiré au hasard contient deja un des chiffre d'une pair ou non, si cette case contient deja un chiffre d'une pair on tire une nouvelle case au hasard sinon on met le chiffre d'une pair directement
ça syntaxe c'est :
while(condition) 
{code}


bonne chance pour ton jeu ;)
0
C'est encore moi!
Je vient de relire ton code et quelque chose me turlupine^^

aux lignes 9 et 10 tu n'as pas mi de ";" comment est ce possible que la compilation ne plante pas??? Je ne comprend pas d'ailleurs pourquoi ces deux lignes sont là.. est-ce ce qu'on appel un prototype :$?
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
14 janv. 2008 à 03:40
c'est simplement une double boucle for utilisé pour remplir toutes les cases du tableau...
comme c'est un tableau 2D il faut deux boucle pour l'initialiser (c'est a dire remplir toutes les cases avec 9) si je ne l'initialise pas toutes les cases seront rempli avec des chiffres au hasard et sa posera probleme pour la suite du code...
0
Oui j'avais compris le principe mais c'est la syntaxe que je saisi pas.
bien que la tienne soit bien plus intéressante en cours on m'a montré ceci:

for(i=0;i<4;i++){
for(j=0;j<4;j++){
tab[i][j]=9;
}
}

c'est la meme chose?
0