Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/11/2012, 12h46   #1
aristide2012
Futur Membre du Club
 
Homme donald aristide ################
Étudiant
Inscription : janvier 2012
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme donald aristide ################
Localisation : Côte d'Ivoire

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 28
Points : 19
Points : 19
Par défaut Insertion et utilisation d'un Tableau à 2D

Bonjour,
J'ai tenté l'insertion d'un tableau à 2dimensions dans une fonction en c.
J'ai réussis après quelques recherches mais je ne comprend toujours pas pourquoi.
Pouvez vous m'expliquez ces codes.
Code :
1
2
3
 
 
int positionmario(int (*rect)[T_blocy],SDL_Rect *cordjoueur,int taill)
Il s'agit du prototype de ma fonction .En cherchant j'ai appris que je pouvais faire rect[][T_blocy] aussi mais mon compilateur me sortais une erreur,lorsque j'utilisais ce format d'écriture.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
int positionmario(int (*rect)[T_blocy],SDL_Rect *cordjoueur,int taill)
{
    //Declaration variable
    int i,k;
    cordjoueur->x=0;
    cordjoueur->y=0;
    //Determine position jouer
    for(i=0;i<taill;i++)
    {
        for(k=0;k<T_blocy;k++)
        {
            if(rect[i*T_blocy+k]==1)//Pourquoi cette écriture
            {
                cordjoueur->x=i*T_bloc;
                cordjoueur->y=k*T_bloc;
            }
        }
    }
    return 0;
}
Code :
if(rect[i*T_blocy+k]==1)//Pourquoi cette écriture
Ce code est le dernier et celui que je ne comprend pas du tout.
Si vous pouvez m'expliquer ces codes,cela me sera d'une grande aide.Ou m'orientez vers des tutos pouvant développer ma compréhension.Je suis débutant en c.
aristide2012 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 13h44   #2
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 383
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 383
Points : 32 020
Points : 32 020
Envoyer un message via MSN à Médinoc
J'ai l'impression que ce code mélange deux syntaxes différentes: La syntaxe "Tableau 2D" (tableau de tableaux) et la syntaxe "Tableau 1D" (colonne+largeur*ligne).

PS: T_blocy est bien une constante, n'est-ce pas?
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 14h50   #3
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 434
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 434
Points : 12 951
Points : 12 951
Code :
int positionmario(int (*rect)[T_blocy],SDL_Rect *cordjoueur,int taill)
1- Lorsqu'on passe un tableau d'éléments de type T à une fonction, le paramètre doit être "adresse d'un élément du tableau", donc T*. On peut écrire ... fonc(T* tab) ou ...fonc(T tab[]), cette dernière écriture étant traduite ici par le compilateur comme identique à la première.

2- Si le tableau à passer est à 2 dimensions, T tab[N][M], le principe est le même : l'élément du tableau est ici un tableau de M éléments et le paramètre doit être du type "adresse d'un tableau de M éléments de type T". Ceci correspond à l'écriture ...fonc( T (*tab)[M]) (Les parenthèses autour de (*tab)sont obligatoires car l'écriture T *tab[M]signifierait que tab est un tableau de M pointeurs sur T). Suivant le même principe qu'en 1, ...fonc( T tab[][M])est une écriture équivalente.

Code :
if(rect[i*T_blocy+k]==1)//Pourquoi cette écriture
Est faux et devrait être sans doute if(rect[i][k]==1) et le compilateur aurait dû émettre un warning sur la comparaison d'une adresse (rect[i*T_blocy+k]) et d'un entier (1)
__________________
Publication : Concepts en C

Mon avatar : Glenn Gould

--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/11/2012, 14h57   #4
aristide2012
Futur Membre du Club
 
Homme donald aristide ################
Étudiant
Inscription : janvier 2012
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme donald aristide ################
Localisation : Côte d'Ivoire

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 28
Points : 19
Points : 19
Médinoc oui T_blocy est une constante,tout comme T blocx.Les deux constantes sont initialisés à 6.
aristide2012 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 15h17   #5
aristide2012
Futur Membre du Club
 
Homme donald aristide ################
Étudiant
Inscription : janvier 2012
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme donald aristide ################
Localisation : Côte d'Ivoire

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 28
Points : 19
Points : 19
J'ai posté ce post dans cette section parce que suis débutant en c.
Cependant le travail que j’effectue en ce moment porte sur la programmation en 2d avec sdl.
J'ai modifié le code que Diogène à souligner et cela me provoque une apparition et fermeture rapide de la console.Dois je envoyer le code source dans ce post ou ouvrir une nouvelle discussion dans le forum approprié.
comme j'aime être prompte,j'ai ouvert un nouveau post http://www.developpez.net/forums/d12...l/#post6984667
voici le lien.
aristide2012 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h25.


 
 
 
 
Partenaires

Hébergement Web