Il y a actuellement 74 visiteurs
Mercredi 28 Juillet 2021
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");
}

}

Libérez-vous : http://www.debian.org
Nobody knows what sysadmin does... until he stops doing it
Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 8978
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 



Sujets similaires

Message probleme ecran en veile et ordi qui tourne
jai un probleme avec mon ordi de bureau tout tourne normalement lecran marche bien et quelque jours apres en le ralument lecran reste en veil et lordi tourne bien en le demontent jai toucher un peut la carte graphique jai ralumer lordie et la sa a marcher mais quelques jours apres rebelote ecrant en ...
Réponses: 5

Message probleme age of empires 3 sur steam
Salut tout le monde depuis quelque temps lorsque je joue sur Steam avec age of empire 3 définitive édition pendant le jeu aléatoirement le jeu plante comme si ma carte graphique était soit défaillante, soit le processeur car le jeu est souvent assez lent voici le type de message que j'ai avant que t ...
Réponses: 4

Message Problème d’affichage 2e écran et tablette graphique
Bonjour à tous,Le problème est le suivant, j?ai besoin de travailler sur 2 écrans et sur une tablette graphique, le câble de mon 2e écran est en HDMI et ma tablette également. Ne possédant qu?une connectique en HDMI sur ma tour j?ai donc acheté un adaptateur HDMI pour double HDMI histoire de faire f ...
Réponses: 0

Message Lenovo yoga problème écran tactile fausses pressions
Bonjour à tous!Je possède un lenovo yoga qui a commencé à bugger depuis quelques mois... L'écran détecte des pressions de partout alors que j'y touche pas comme dans cette vidéo: https://www.youtube.com/watch?v=NKnI4hhyUqg Même si je redémarre le pc, ça recommence, le pc n'est pas en surchauffe (ça ...
Réponses: 11

Message Problème avec cette dernière mise à jour
J'essaie d'installer cette nouvelle mise à jour Windows critique depuis quelques jours maintenant et je continue à rencontrer le même problème, étant donné que cela ne le fait pas.Je vais donc installer les mises à jour et j'obtiens : Mise à jour des fonctionnalités vers Windows 10, version 20H2 Ins ...
Réponses: 3

Message Problème de micro
Bonjour à tous,Dernièrement, le micro de m webcam sur zoom ne fonctionnait pas. D'ou pourrit venir le problème?Avec les derniers Windows je ne sais même plus ou aller pour tester le micro de ma webcam. Je me souviens qu'à l'époque de skype ou msn je pouvais aller dans le menu Windonws qqprt pour fai ...
Réponses: 2

Message Pc portable samsung R730/ CM démarre/VGA ok/LCD probleme
Bonjour, Voila j'expose mon problème, J'ai un vieux PC portable samsung NP-R730 que j'ai voulu remettre en état. le problème s'est l'affichage de l'écran principale, je m'explique, la carte mère démarre sans problème et fonctionne parfaitement branché sur VGA sur un écran externe, en revanche rien o ...
Réponses: 3


Qui est en ligne

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


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