Accueil > Forum > > > > passage de tableau à 3 dimensions en paramètre à une fonction
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
|
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
|
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
|
@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
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|