Il y a actuellement 295 visiteurs
Samedi 20 Avril 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 [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

Message probleme avec le nouvel Outlook !
Bonjour,à la maison, nous nous partageons 7 adresses : outlook.fr, orange.fr, live.fr, libello.com, hotmail.com et 2 gmail.com.Tout était parfait jusqu'au moment où le nouvel OUTLOOK s'est imposé.Là, un seul compte a survécu, @outlook.fr, impossible d'afficher les 6 autres !Quand on ouvre la message ...
Réponses: 5

Message Konrow City 4 - Probleme de place...
Bonjour à toutes et tousJe sais que mon tél est un bas de gamme mais je n'ai pas besoin de plus..., si ce n'est un peu de place...https://konrow.com/products/city4 avec Android? 11 (édition GO)...Mon souci est que sur le mien, la carte interne est presque pleine alors que je n'ai "presque" ...
Réponses: 2


Qui est en ligne

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


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