Il y a actuellement 198 visiteurs
Jeudi 02 Mai 2024
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

probleme avec une fonction travaillant sur un tableau en C

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

probleme avec une fonction travaillant sur un tableau en C

Message le 29 Nov 2009 22:55

Bonjour,
Voici mon problème, je vous montre deja le code source :

#define MAXLIG 25

#define MAXCOL 25

/* la structure d'un tableau */

typedef struct Matrice Matrice;
struct Matrice
{
int nb_lig;
int nb_col;
int tab[MAXLIG][MAXCOL];
};

/* les prototypes */

void afficherMatrice(Matrice t1);
void recopierMatrice(Matrice t1,Matrice t2);
void initialiserMatrice(Matrice t1,int valeur);
void remplirMatrice(Matrice t1);
void matriceIdentite(Matrice t1);
void sommeMatrices(Matrice t1,Matrice t2,Matrice t3);
void multiplicationMatrices(Matrice t1,Matrice t2,Matrice t3);
void transposerMatrice(Matrice t1);

/* Le main */

int main (int argc, char *argv[]){

Matrice tab_matrices[100];
int nb_matrices = 0;
int choix = 1;
int choix2;
int choix_matrice;
int valeur;
int x,y;

printf("\n Valeur : ");
scanf("%d",&valeur);
initialiserMatrice(tab_matrices[nb_matrices],valeur);

afficherMatrice(tab_matrices[nb_matrices]);

}

/* Les fonctions sur les matrices */

void initialiserMatrice(Matrice t1,int val){
int i,j;
printf("x = %d , y = %d ",t1.nb_lig,t1.nb_col);
for(i=0;i<t1.nb_lig;i++){
for(j=0;j<t1.nb_col;j++){
t1.tab[i][j] = val;
}
}
afficherMatrice(t1);
}


void afficherMatrice(Matrice t1){
int i,j;
for(i=0;i<t1.nb_lig;i++){
for(j=0;j<t1.nb_col;j++){
printf("| %d |",t1.tab[i][j]);
}
printf("\n");
}

}


Voila donc dans ma fonction initialiserMatrice, la matrice en paramètre t1 est bien remplie par la valeur en 2eme paramètre
Mais tab_matrices[nb_matrices] qui est placé en paramètre d'initialiser dans le main n'est pas remplie, pourtant comme elle est en paramètre , elle devrait se remplie correctement ?
Donc si ma valeur est 8 par exemple et que j'affiche t1 j'aurais que des 8 mais si j'affiche tab_matrices[nb_matrices] en dehors de la fonction , j'ai que des 0 ..
Et je ne comprend pas pourquoi
marin.benjamin
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 29
Inscription: 27 Nov 2009 18:10
 


Re: probleme avec une fonction travaillant sur un tableau en C

Message le 29 Nov 2009 23:37

Il te manque quelques bases.... notamment dans le passage d'arguments si ceux-ci doivent être modifiés. C'est le cas de ta "matrice" à initialiser t1. Si tu la passe en valeur (tab_matrices[nb_matrices]) la matrice initiale ne sera pas modifiée hors de la fonction car il n'y a aucun retour.
Soit tu la passes en adresse (pointeur sur ta matrice => Matrice * tab_matrices) et tu l'exploite avec son adresse dans ta procédure (&t1), soit tu fais comme ce qui suit : tu retournes une valeur de matrice.

A noter aussi que si tu n'initialise pas le nb de lignes et colonnes de ton élément Matrice je vois pas comment tu peux remplir quoi que ce soit.

Code: Tout sélectionner
#include <stdio.h>

#define MAXLIG 25

#define MAXCOL 25

/* la structure d'un tableau */

typedef struct Matrice Matrice;
struct Matrice
{
int nb_lig;
int nb_col;
int tab[MAXLIG][MAXCOL];
};

/* les prototypes */

void afficherMatrice(Matrice t1);
void recopierMatrice(Matrice t1,Matrice t2);
Matrice initialiserMatrice(Matrice t1,int valeur);
void remplirMatrice(Matrice t1);
void matriceIdentite(Matrice t1);
void sommeMatrices(Matrice t1,Matrice t2,Matrice t3);
void multiplicationMatrices(Matrice t1,Matrice t2,Matrice t3);
void transposerMatrice(Matrice t1);

/* Le main */

int main (int argc, char *argv[]){

Matrice tab_matrices[100];

int nb_matrices = 0;
int choix = 1;
int choix2;
int choix_matrice;
int valeur;
int x,y;

printf("\n Valeur : ");
scanf("%d",&valeur);

tab_matrices[nb_matrices].nb_lig=10;
tab_matrices[nb_matrices].nb_col=10;

afficherMatrice(initialiserMatrice(tab_matrices[nb_matrices],valeur));

// afficherMatrice(tab_matrices[nb_matrices]);

}

/* Les fonctions sur les matrices */

Matrice initialiserMatrice(Matrice t1,int val){
int i,j;
printf("x = %d , y = %d ",t1.nb_lig,t1.nb_col);
for(i=0;i<t1.nb_lig;i++){
for(j=0;j<t1.nb_col;j++){
t1.tab[i][j] = val;
}
}
afficherMatrice(t1);
printf("\n");
return t1;
}


void afficherMatrice(Matrice t1){
int i,j;
for(i=0;i<t1.nb_lig;i++){
for(j=0;j<t1.nb_col;j++){
printf("| %d |",t1.tab[i][j]);
}
printf("\n");
}

}

Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 9041
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 



Sujets similaires

Message probleme avec mon compte outlook
Salut tout le mondevoilà, je m'explique en espérant que je sois compréhensible : de façon aléatoire et pas systématique, mais c'est récurrent, il ne se passe pas 15 jours, je recoit arriver sur mon bureau après démarrage de mon pc ou parfois même pc allumer et fonctionnel pendant la journée un m ...
Réponses: 12

Message Problème de signatue avec gmail.
Bonsoir, voilà je voudrai mettre une bannière comme signature pour mes emails envoyés avec gmail. Je ne sais pas trop comment faire ? Quelqu'un pourrait il m aider? Merci.
Réponses: 7

Message [Réglé] probleme USB
Bonjour a tous,Je ne sais ou poster mon problème d'USB je le post donc ici . Mon souci vient du fait que lorsque je branche mon intercom SENA SRL 3 sur les USB mon PC sous W10 j'ai l'impression que celui-ci se connecte deux fois car j'entends bien le son de la connexion se faire deux fois et j'ent ...
Réponses: 5

Message Problème avec la KB5034441
Bonjour,Certains ont du rencontrer ce problème avec cette mise à jour qui a bien du mal à passer.Je viens de recevoir ce correctif proposé par Microsoft :ICI.Je vous le dit de suite personnellement si j'étais dans le même cas que vous j'attendrai une réelle mise à jour mise en place par Microsoft.Je ...
Réponses: 12

Message encore un probleme mise à jour windows KB5001716
Salut à vous cela commence, j'avoue, à devenir pénible, j'en suis désolé, mais ce soir au 5 mars 2024 est apparu un nouveau problème sur Windows update la mise à jour KB5001716 ne veut pas s'installer, j'ai eu beau redémarrer mon pc pour voir si cela pouvait fonctionner rien à faire cette mise à jou ...
Réponses: 28

Message [Réglé] problème de barre inexistante sur pc portable asus
Bonjour,Depuis hier, en allumant mon pc portable asus modèle F 402 S, il bloque sur le bureau, je n'ai plus la barre de tâches donc les icônes à côté de l'heure comme avant et la souris fait un rond et impossible de cliquer et d'ouvrir des fichiers ou d'aller sur internet c'est bizarre, est-ce une ...
Réponses: 9

Message fonction bac à sable (sandbox)
Salut tout le monde Je viens d'installer en passant par mon UEFI la fonction bac à sable de Windows donc (sandbox). Pour le moment cette fonction reste assez floue pour moi .....Est-ce que cela me sera utile ? peut-on par exemple svp y tester des logiciels sans risques pour vérifier avant de les ...
Réponses: 4


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


.: Nous contacter :: Flux RSS :: Données personnelles :.