Il y a actuellement 117 visiteurs
Jeudi 21 Septembre 2023
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: 9031
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 



Sujets similaires

Message probleme messagerie ORANGE
Bonjour,J'utilise Orange depuis 25 ans en messagerie.Depuis 2 jours je ne parvient plus a y acceder avec mon ordinateur.En fait lorsque j'ouvre la page d'accueil pour aller voir mes emails, au lieu d'avoir la page sur laquelle je dois entrer mon adresse email et mon mot de passe j'ai une page me dis ...
Réponses: 40

Message problème config 3 écrans
bonjourj'ai 3 écrans, le principal en DP 27" puis le 2eme 15" en HDMI et le 3eme 32" en DPle souci c'est que quand j'éteins le 3 écran, le second s'arête aussi !comme si le 32" en DP et le 15" en HDMI étaient liéscomment faire pour pouvoir éteindre le 32" sans que cela ...
Réponses: 0

Message Problème changement carte graphique sur vieux PC
Merci beaucoup pour toute tes informations qui me sont très précieuses. Je vais suivre tes conseils.Bonne continuation.
Réponses: 4

Message [Réglé] bug de la fonction double clic
Bonjour il arrive parfois que lorsque je veux lancer un programme (par un double clic), quel qu'il soit, j'ai la fenêtre propriétés qui s'ouvre. Je dois alors redémarrer le pc pour que tout rentre dans l'ordre. Avez vous une idée d’où ça peut venir svp ? Merci.
Réponses: 4

Message Problème de baisse de FPS sur Fortnite, besoin d'aide urgent
Bonjour à tous,Je suis nouveau sur ce forum et j'ai besoin de votre aide. J'ai récemment commencé à jouer à Fortnite sur mon PC, mais j'ai des problèmes de performance assez frustrants. Ma configuration PC n'est pas la plus récente, mais je pense qu'elle devrait être suffisante pour faire tourner le ...
Réponses: 1

Message Problème batterie
Yop,On m'as apporté un pc portable Lenovo G50-70.La batterie était HS, la personne as acheter une batterie compatible sur aboutbatteries.Quand il l'as mis, le pc l'as reconnu et c'est mis en charge.Quand étais marqué que la charge étais à 100%, il l'as débranché.Le pc c'est coupé et n'as jamais fonc ...
Réponses: 10

Message Probleme demarrage Win7 + pilotes carte graphique
Petit souci avec ma config j'ai voulu tester une carte graphique gtx 760 (la mienne étant une gtx 660) depuis windows 7 fait des siennes. Mon erreur a été de garder les même pilotes je pense (bizarre pourtant c'est la même génération)Je souhaiterai enlever les pilotes proprement (j'ai testé en mod ...
Réponses: 1


Qui est en ligne

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


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