Il y a actuellement 72 visiteurs
Lundi 16 Juin 2025
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: 9058
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron, perle de Provence... et jamais loin d'une Debian
 



Sujets similaires

Message problème pour réinstaller pilote réseau
Bonjour,Pourriez-vous m'indiquer pourquoi je n'arrive pas à réinstaller le pilote Ethernet sur mon pc dont la configuration est processeur pentium dual core e 6500 25.13 ghz et 3 go de ram et d'un disque dur 1 To. et Windows 10 Famille.Au bout de l'essai d'installation, il y a le message d'erreur ...
Réponses: 29

Message [réglé]Problème double accent circonflexe (virus ?)
Bonjour,Je pense malheureusement avoir chopé un virus (bien que je ne sais pas du tout comment, je fais super attention).Tout d'un coup la touche du chapeau me fait un double ^^ au lieu d'un seul, par exemple je sais plus écrire le mot m^^eme.Et j'ai remarqué des processus bizarres dans le gestionna ...
Réponses: 15

Message Problème d'installation Linux
Bonjour,Pourriez-vous m'aider à résoudre le problème qui se produit sur un pc portable Toshiba modèle satellite C 50 B 14 E avec ce message qui apparait à chaque démarrage " start PXE over IPV4 press (echap) to exit" Après plusieurs essais, l'installation s'est faite de Ubuntu 24.04 mais p ...
Réponses: 4

Message [Réglé] problème connexion internet sous linux mint 20.03
Bonjour,Pourriez-vous m'aider à résoudre le problème suivant : Sur un pc de bureau ACER Aspire M 5910, il y a Linux Mint 20.03 qui est installé mais le souci est au niveau de la connexion internet Ethernet qui ne fonctionne plus alors que le voyant du port Ethernet est bien allumé mais impossible d ...
Réponses: 8

Message [réglé] Probleme carte ethernet
Bonjour a tous,Depuis hier je rencontre un problème avec ma carte ethernet. Mon PC m'informe que celui-ci n'est pas connecté a internet (icône de la barre des taches). Par contre j'ai internet par le biais de mon VPN. Avez vous une petite idée ? Par avance merci
Réponses: 35

Message probleme affichage ecran
salut tout le monde Je suis sur windows 11 depuis environ janvier 2025 : ma dernière Édition : Windows 11 Professionnel Version 24H2 (build du système d'exploitation 26100.3323 )Installé le ?01/?03/?2025Build du système d?exploitation 26100.3323Expérience Pack d?expérience de fonctionnalités Windo ...
Réponses: 10

Message Problème mise à jour windows 11
Salut à tous, j'ai un souci sur mon ordinateur hp tout en un, à l'époque de la sortie de Win11 j'vavais forcé le passage car mon ordinateur n'avait les prérecquis, tout a toujours bien fonctionner sans problème, sauf depuis peu, je ne peux plus faire de MAJ sur windows update, il y a écrit "Vou ...
Réponses: 8


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


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