IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Matrice dans un fichier.txt en C(Codeblocks)


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut Matrice dans un fichier.txt en C(Codeblocks)
    Bonjour,
    J'affiche les éléments d'une matrice à partir d'un fichier .txt, alors la matrice qui est sauvegardée dans le fichier s'affiche très bien mais le problème c'est que je ne sais pas si les éléments restent sauvegardés dans la mémoire ou pas !! Car je dois les utiliser par la suite pour des multiplications d'un vecteur par cette matrice et c'est là qu'il y a un os : ça me donne des résultats faux.
    Alors, s'il vous plait, quelqu'un pourrait-il me confirmer si les éléments restent dans la mémoire ou pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int main (int argc, const char * argv[]) 
    { 
      int dim; 
      int i,j; 
      int toto; 
      float e[MAXSIZE* MAXSIZE]; 
      float c[MAXSIZE]; 
      FILE * pFile; 
      pFile = fopen ("fiche.txt","r"); 
      for (i=0 ; i<MAXSIZE ;i++) 
      { 
        for (j=0; j<MAXSIZE; j++) 
        { 
          fscanf (pFile, "%f ",&e[i,j]); 
          printf("%f ", e[i,j]); 
        } 
        printf("\n"); 
      } 
      fclose(pFile); 
      printf ("\nQuelle est la dimention du vecteur (Max %d): ",dim); 
      scanf ("%d",&dim); 
      printf ("\n le nombre d'iteration est %d\n", compute(e,c,dim)); 
      scanf("%d", &toto); 
      getchar(); 
      return 0; 
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Attention à l'utilisation de tableau double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fscanf (pFile, "%f ",&e[i,j]);
     
    printf("%f ", e[i,j]);
    Il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fscanf (pFile, "%f ",&e[i][j]);
     
    printf("%f ", e[i][j]);
    PS : les balises CODE font toujours un bon effet.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut
    Merci beaucoup,
    je vais modifier et je te tiendrais au courant

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    poste le code de la fonction compute

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut
    Voila mon code en totalité et merci encore une fois cela fait une semaine que je suis bloqué dessus:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    int	compute(float *e, float *c, int dim)
    {
    	int		vecteur_egaux;
    	float	r[MAXSIZE];
    	float	a[MAXSIZE];
    	float	b[MAXSIZE];
    	int		i=0;
    	int		j=0;
    	int		nb_iteration;
     
    	nb_iteration=0;
    	vecteur_egaux = 0;
     
    	/*printf ("\n\n\n\t*******  CREATION DE LA MATRICE E  *******\n");
    	printf ("\n*******Saisie de la matrice E*******\n\n");
    	create_matrix(e, dim, dim);*/
     
    	printf ("\n\t*******  CREATION DU VECTEUR C  *******\n");
    	printf ("\n*******Saisie de la matrice C*******\n\n");
    	create_matrix(c, 1, dim);
     
    		for (i = 0; i < dim; i++)
    		{
    			a[i]=c[i];
     
    		}
      while (!vecteur_egaux)
    	{
    	for (i = 0; i < dim; i++)
    		{
    			b[i]=c[i];
     
    		}
     
    		for ( i= 0; i < dim; i++)
    		{
                r[i] = 0;
    			for (j = 0; j < dim; j++)
    			{
    				r[i]=(r[i])+((c[j]) * (e[j,i]));
     
    			}
    		}
       vecteur_egaux = 1;
     
    		for (i = 0; i < dim; i++)
    		{
    			c[i]=((expf (2 * r[i]) - 1) / (expf (2 * r[i]) + 1))+ a[i];
    		}
    			for (i = 0; i < dim; i++)
    		{
    			if (c[i] != b[i])
    			{
    				vecteur_egaux = 0;
    			}
    		}
     
    		printf ("\n");
    		nb_iteration++;
     
     
    		printf ("\n*******VECTEUR R%d:\n",nb_iteration);
    	display_matrix(r, 1,dim);
    	printf ("\n*******VECTEUR C%d:\n",nb_iteration);
    	display_matrix(c, 1,dim);
     
     
    	}
    		printf ("\n\n\n\t\t*******RESULTAT*******\n\n\n");
     
      return nb_iteration;
    }

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Dans la fonction compute, il y a aussi un problème pour accéder au tableau : e[i,j]; ne fait pas ce que tu penses.

    Cela dit, hier je t'ai dit une bêtise en te disant de le remplacer par e[][]; parce que je n'avais pas bu la déclaration de la matrice.
    La matrice étant une matrice simple dimension, on y accède par e[i + MAXSIZE * j];

    Voici ce qui devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    int main(void)
    {
        int dim;
        int i, j;
        int toto;
        float e[MAXSIZE * MAXSIZE];
        float c[MAXSIZE];
        FILE *pFile;
        pFile = fopen("fiche.txt", "r");
        for (i = 0; i < MAXSIZE; i++) {
            for (j = 0; j < MAXSIZE; j++) {
                fscanf(pFile, "%f ", &e[i + MAXSIZE * j]);
                printf("%f ", e[i + MAXSIZE * j]);
            }
            printf("\n");
        }
        fclose(pFile);
        printf("\nQuelle est la dimention du vecteur (Max %d): ", dim);
        scanf("%d", &dim);
        printf("\n le nombre d'iteration est %d\n", compute(e, c, dim));
        scanf("%d", &toto);
        getchar();
        return 0;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int compute(float *e, float *c, int dim)
    {
            /*...*/
            for (i = 0; i < dim; i++) {
                r[i] = 0;
                for (j = 0; j < dim; j++) {
                    r[i] = (r[i]) + ((c[j]) * (e[j + MAXSIZE * i]));
     
                }
            }
            vecteur_egaux = 1;
            /*...*/
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut
    salut mabu,
    tout dabord je te remercie encore une fois pour ton aide, je vien de lire le message et je vais faire les modifications toute suite et je te tiendrais occourrant.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut
    hey mabu t un vrai geni tu sais, tu ma fait sortir d'un cauchemart que je vie depuis 9 jours merci merci merci beaucoup ca marche tres tres bien, du cout tu peut m'expliquer un peut ce que ta fait pourquoi le e[i, j] ne marche pas pourtant en deroulant ca parait logique

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut
    enfait ce que ta fait toi je l'ai tres bien compris ce que je veut savoir c'est pourquoi ce que j'avais mis moi ne marche pas?

  10. #10
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par navara Voir le message
    ce que je veux savoir c'est pourquoi ce que j'avais mis moi ne marche pas?
    Pour le C, il n'y a que des tableaux.
    Quand tu écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int e[MAXSIZE*MAXSIZE];
    Le compilateur ne comprend pas que tu veux faire un tableau de MAXSIZE sur MAXSIZE. Exemple, si MAXSIZE vaut 2, le compilateur remplace ton code par :
    Dans ces conditions, comment faire la différence entre un tableau de 2 sur 2, un de 1 sur 4 ou un de 4 sur 1 ?

    C'est toi qui doit le dire à chaque fois que tu utilise un tableau : Note :
    On peut aussi utiliser des tableau deux dimensions :

    On les déclare comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int e[MAXSIZE][MAXSIZE];
    En fait, on déclare un tableau de MAXSIZE tableaux de MAXSIZE entiers.
    Et on y accède comme ceci :
    Ce qui ce passe, c'est que le e[i] permet d'accéder au premier tableau. Et le [j] permet de se balader dans le tableau désigné par [i].

    En fait, le premier permet de d'acceder

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecriture de matrice dans un fichier .txt
    Par mamour71 dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/12/2011, 19h59
  2. Matrice de complexes dans un fichier .txt
    Par TiMeWaLk dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/06/2009, 09h08
  3. sauvgarder une matrice dans un fichier TXT
    Par malikakika dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/03/2008, 16h45
  4. Réponses: 10
    Dernier message: 05/10/2004, 11h28
  5. [langage] tabulation dans un fichier txt
    Par TigreRouge dans le forum Langage
    Réponses: 2
    Dernier message: 16/08/2004, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo