begin process at 2012 05 29 15:01:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

passage de tableau à 3 dimensions en paramètre à une fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

passage de tableau à 3 dimensions en paramètre à une fonction

mardi 25 mai 2010 à 04:57:09 | passage de tableau à 3 dimensions en paramètre à une fonction

snake57

Bonjour à tous,

J'ai un tableau à 3 dimensions que je veux afficher à partir d'une fonction. J'ai donc créé une fonction mais celle-ci affiche...n'importe quoi

Lorsque j'affiche mon tableau à partir du main, tout va bien. Mais dès que c'est la fonction qui l'affiche, ca me met n'importe quoi.

Peut être que je mis prend mal avec les pointeurs.

Ce que je veux faire tout simplement c'est afficher mon tableau à partir de ma fonction.

Je vous met le code pour plus de clarté (il est pas long rassurez-vous)



Code C# :
#include <stdio.h>
#include <stdlib.h>

int affichage(char *tAb, int dIm1,int dIm2,int dIm3); // Cette fonction réalise l'affichage.


int main()
{
    int i,j,k;//Variables de boucles

    char tAbGrille[9][21][1];//Tableau à trois dimensions
    char *pTab = tAbGrille;//Pointeur de ce tableau
  
    //Initialisation du tableau, on remplit celui-ci avec des caractères '_'.
    for (i=0; i<=9; i++){
        for (j=0; j<=21; j++){
            for (k=0; k<=1; k++){
                tAbGrille[i][j][k] = '_';
            }
        }
    }
    //affichage pour testé si il a bien été remplie <==ici tous s'affiche bien
    for (i=0; i<=9; i++){
        for (j=0; j<=21; j++){
            for (k=0; k<=1; k++){
                printf(" %c ", tAbGrille[i][j][k]);
            }
        }
    }

    affichage(pTab, 9, 21, 1);//appelle de la fonction
    return 0;
}


int affichage(char *tAb, int dIm1,int dIm2,int dIm3)
{
    int i,j,k;//Variables de boucles

    //Affichage du tableau <== Ici l'affichage n'est pas correct.
    for (i=0; i<=dIm1; i++){
        for (j=0; j<=dIm2; j++){
            for (k=0; k<=dIm3; k++){
                printf(" %c ", tAb);
                tAb++;
            }
        }
    }

    return 0;
}


mardi 25 mai 2010 à 10:09:31 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

lectpe

Salut.

Bah déjà, tu déclares un tableau à trois dimensions dont les tailles respectives sont : 9, 21 et 1 et quand tu le remplis, tu vas jusqu'aux tailles 10, 22 et 2 à cause du "i=0;i<=9. Il faut donc enlever ce "<=" et mettre un "<".

Ensuite, pTab est un pointeur vers une case de ce tableau, donc il pointe non pas vers tAbGrille mais vers **tAbGrille.

Pour finir, dans ta fonction d'affichage, c'est pas tAb que tu veux afficher (qui est un pointeur) mais la valeur pointée par celui-ci qui est *tAb.

Voilà. Avec ces petites modifications, j'ai testé ton code et ça marche.

Cordialement, Greg.
mardi 25 mai 2010 à 10:10:39 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

CptPingu

Administrateur CodeS-SourceS
Je suis même étonné que tu n'ai pas de warnings !
char* tAb => tableau à une dimension.
Pour un tableau à trois dimensions: char*** tAb;

Soit dit en passant, tu n'as pas besoin de pTab. Le tableau tAbGrille est déjà un pointeur (en C un tableau et un pointeur, c'est la même chose).

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 25 mai 2010 à 12:20:31 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

snake57

J'ai testé en mettant tes modifs lectpe, mais lorsque j'exécute au lieu de m'afficher ce qu'il faut dans la fenêtre, il me met "segmentation fault".

Par contre aucun soucis pendant la compilation.

Tu vois ce que sa peut être?
mardi 25 mai 2010 à 12:30:51 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Fonctionne techniquement, mais génère un gros warning. Je te déconseille cette méthode.
Préfère la seconde.
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>

int affichage(char* tAb, int dIm1,int dIm2,int dIm3)
{
  int i,j,k;

  for (i = 0; i < dIm1; ++i)
    for (j = 0; j < dIm2; ++j)
      for (k = 0; k < dIm3; ++k)
      {
	printf(" %c ", *tAb);
	++tAb;
      }

  return 0;
}

int main(void)
{
  int i,j,k;

  char tAbGrille[9][21][1];
  char* pTab = tAbGrille;

  /* Initialisation du tableau,
     on remplit celui-ci avec des caractères '_'. */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
	tAbGrille[i][j][k] = '_';

  /* affichage pour testé si il a bien été remplie
     <==ici tous s'affiche bien */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
	printf(" %c ", tAbGrille[i][j][k]);

  affichage(pTab, 9, 21, 1);

  return 0;
}


Préfère cette méthode, plus rigoureuse:
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>

int affichage(char tAb[9][21][1], int dIm1,int dIm2,int dIm3)
{
  int i,j,k;

  for (i = 0; i < dIm1; ++i)
    for (j = 0; j < dIm2; ++j)
      for (k = 0; k < dIm3; ++k)
	printf(" %c ", tAb[i][j][k]);

  return 0;
}

int main(void)
{
  int i,j,k;

  char tAbGrille[9][21][1];

  /* Initialisation du tableau,
     on remplit celui-ci avec des caractères '_'. */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
	tAbGrille[i][j][k] = '_';

  /* affichage pour testé si il a bien été remplie
     <==ici tous s'affiche bien */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
	printf(" %c ", tAbGrille[i][j][k]);

  affichage(tAbGrille, 9, 21, 1);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 25 mai 2010 à 13:04:32 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

lectpe

Réponse acceptée !
Bah c'est bizarre, chez moi ça marche bien. Voici le code que j'ai :
Code C/C++ :

int affichage(char *tAb, int dIm1,int dIm2,int dIm3); // Cette fonction réalise l'affichage.

int main()
{
    int i,j,k;//Variables de boucles

    char tAbGrille[9][21][1];//Tableau à trois dimensions
    char *pTab = **tAbGrille;//Pointeur de ce tableau
  
    //Initialisation du tableau, on remplit celui-ci avec des caractères '_'.
    for (i=0; i<9; i++){
        for (j=0; j<21; j++){
            for (k=0; k<1; k++){
                tAbGrille[i][j][k] = '_';
            }
        }
    }
    //affichage pour testé si il a bien été remplie <==ici tous s'affiche bien
    for (i=0; i<9; i++){
        for (j=0; j<21; j++){
            for (k=0; k<1; k++){
                printf("%c", tAbGrille[i][j][k]);
            }
        }
    }
    
    affichage(pTab, 9, 21, 1);//appelle de la fonction
    return 0;
}


int affichage(char *tAb, int dIm1,int dIm2,int dIm3)
{
    int i,j,k;//Variables de boucles

    //Affichage du tableau <== Ici l'affichage n'est pas correct.
    for (i=0; i<dIm1; i++){
        for (j=0; j<dIm2; j++){
            for (k=0; k<dIm3; k++){
                printf("%c", *tAb);
                tAb++;
            }
        }
    }

    return 0;
}


Es-tu sûr d'avoir changé les "inférieur ou égal" en "strictement inférieur" ?
mardi 25 mai 2010 à 13:48:52 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

CptPingu

Administrateur CodeS-SourceS
@lectpe: oui oui, ce que tu as fait fonctionne très bien. En revanche, je préfère lui donner une autre solution car la tienne ne fonctionne que si on utilise des tableaux dont la taille est prédéfinis à la compilation, car les données seront alors concomittantes. Mais si on on remplace char tab[][][], par char*** tab + malloc/free, il risque d'avoir des surprises !

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 25 mai 2010 à 14:29:31 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

lectpe

@CptPingu : Effectivement, tu as raison, mais en fait, mon dernier message s'adressait à snake57 car il a dit que le code modifié comme je lui ai dit renvoyait une erreur de segmentation, alors je lui ai envoyé mon message pour voir s'il n'avais pas oublié de modifier quelque chose.

@snake57 : le code donné par CptPingu est effectivement plus rigoureux et tu devrais l'utiliser plutôt que la première méthode que tu utilisais. Cette seconde méthode est exactement adaptée pour la taille du tableau que tu utilises et ainsi, tu n'as pas besoin d'utiliser explicitement les pointeurs.
mardi 25 mai 2010 à 23:56:18 | Re : passage de tableau à 3 dimensions en paramètre à une fonction

snake57

@lectpe : ton code fonction effectivement. Quand je le copie/colle tout va bien, j'ai sans doute zappé une des modifs que tu avais cité.

@CptPingu : Merci pour ton code, je j'ai testé et il fonctionne aussi. Du coup comme lectpe et toi aviez l'air d'être d'accord sur le faite qu'il était mieux, je prendrais celui la au final.

Merci encore a tous les deux
++


Cette discussion est classée dans : fonction, int, tableau, affichage, for


Répondre à ce message

Sujets en rapport avec ce message

Tableau de structure [ par tomsawyerbelgique ] Bonjour suriez-vous me dire comment fait-on pour passer un tableau de structure dans une fonction:struct student { char nom[10]; int nbcot C ANSI allocation dynamique de tableau [ par pedu ] Ce petit pro beug en sortie, pourquoi et que faire ?#include #include int (*pi)[1][1]; /* pointeur sur un tableau d'entiers */void main(void){ unsi tableau a double entrée alloué dynamiquement [ par amortlintelligence ] Voila j'aurais voulu utiliser un tableau (tableau de tableau) dans une fonction. Je pense qu'il faut donc que je le crée dynamiquement avec un code du Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le creer une fonction retournant un tableau [ par billcala ] j'essaie de créer une fonction qui doit initialiser un tableau d'entiers : le code que je fais est :int mafonction()[8];using namespace std;int mafonc REcuperer des donnée d'un fichier binaire vers une tableau de hachage [ par whiteknight ] Slt j'ai des problemes avec ma fonction load qui me permet de recuperer les données d'un fichier binaire et de les transférer vers un tableau de hacha Création de 2 tableaux dynamik à 2D [ par flopflopp ] Bonjour, je voudrais soumettre un petit problème en C++, j'ai une simple fonction qui crée un tableau dynamique à 2 dimensions, le rempli avec des 1 e tableau a 2 dim [ par Kevin972 ] salut a tous!!g un probleme pour passer en parametre un tableau a 2 dimensions:fonction1(void){ float tab[400][400];............ fonction(tab);}fo Retourner tableau 2d [ par ZogStriP ] J'ai une fonction qui retoure un tableau 2 dimension mais ça ne marche pas :int MultiMatrice(int Matrice1[2][2], int Matrice2[2][2]){ int MatriceRe Allocation dynamique dans une fonction [ par Veovis ] Salut,Toujours dans mon projet de TP, j'ai un petit soucis avec l'allocation dynamique dans une fonction. Ce que je voudrais faire c'est quand le tabl


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales