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 :

Déterminer le nombre de lignes et le nombre de colonnes d'un fichier de données


Sujet :

C

  1. #21
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    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
     
     
    int* toto()
    {
       int* a;
       char* b;
     
      a = malloc(size(int) * 2); (pour un int de 2 case)
      b= malloc(size(char) * 10); (char de 10 case soit 10 lettre)
     return a;
    }
     
    void  toto(int* a)
    {
     
      a[0] = 1;
    }
     
    int a[2];
     
    toto(a);
    Si ça peut aider

  2. #22
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par jouana Voir le message
    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
     
     
    int* toto()
    {
       int* a;
       char* b;
     
      a = malloc(size(int) * 2); (pour un int de 2 case)
      b= malloc(size(char) * 10); (char de 10 case soit 10 lettre)
     return a;
    }
     
    void  toto(int* a)
    {
     
      a[0] = 1;
    }
     
    int a[2];
     
    toto(a);
    Si ça peut aider
    Merci pour ton exemple. J'ai essayé d'utiliser malloc dans mon code, mais, il ne fonctionne pas. Voici mon code :
    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
     
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    int* CompatageLC(char *NomFich)
    {
    	/* int Comptage[2]; */
        int* Comptage;
        Comptage = malloc(size(int) * 2);
     
    	FILE *FichLec;
    	/* NbL nombre de lignes  */
    	int NbL,NbLFich=0;
     
    	/* NbC nombre de colonnes   */
    	int NbC,NbCFich=0;
     
    	char saisie;
     
    	FichLec = fopen(NomFich,"r");
    	if (FichLec != NULL){
    		while ((saisie = getc(FichLec)) != EOF){
     
        if (saisie == '\n'){
            ++NbLFich;
        }
         if (saisie ==' ' && NbLFich==0){
            ++NbCFich;
        }
    	}
     
    	fclose(FichLec);
     
      Comptage[0]=NbLFich;
      Comptage[1]=NbCFich;
    }
      return Comptage;
     
    }
     
     
    int main(int argc, char *argv[])
    {
    	int* monPointeur=CompatageLC(argv[1]);
    	printf ("Nombre de lignes %d et Nombre de colonnes %d\n", monPointeur[0], monPointeur[1]);
        return 0;
    }
    qui donne les messages suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning : 9  missing prototype for size
    Warning : 9  Missing prototype for 'size'
    Error   : 9  illegal expression
    la ligne 9 étant : Comptage = malloc(size(int) * 2);
    où est mon erreur ???

    Merci

  3. #23
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Ce n'est pas:
    Comptage = malloc(size(int) * 2);
    mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comptage = malloc(sizeof(int) * 2);

  4. #24
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    En remplaçant malloc(size(int) * 2); par Comptage = malloc(2); mon code fonctionne maintenant.

    Mais, je n'ai pas compris la différence entre les deux commandes.

    Merci à tous

  5. #25
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    Ce n'est pas:


    mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comptage = malloc(sizeof(int) * 2);
    Merci pour ton aide. Mon code fonctionne maintenant.

    Je vais pousser l'exercice plus loin, comment faire si l'on veut utiliser une Structure (struct)? Si j'appelle Data mon fichier des données, je voudrais avoir Data.ligne pour le nombre de lignes et Data.colonne pour le nombre de colonnes.

    J'ai fait le code suivant qui fonctionne. Je ne sais pas s'il y a mieux à faire
    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
     
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    int* CompatageLC(char *NomFich)
    {
        int* Comptage;
    	Comptage =malloc(sizeof(int) * 2);
     
    	FILE *FichLec;
    	/* NbL nombre de lignes  */
    	int NbL,NbLFich=0;
     
    	/* NbC nombre de colonnes   */
    	int NbC,NbCFich=0;
     
    	char saisie;
     
    	FichLec = fopen(NomFich,"r");
    	if (FichLec != NULL){
    		while ((saisie = getc(FichLec)) != EOF){
     
        if (saisie == '\n'){
            ++NbLFich;
        }
         if (saisie ==' ' && NbLFich==0){
            ++NbCFich;
        }
    	}
     
    	fclose(FichLec);
     
      Comptage[0]=NbLFich;
      Comptage[1]=NbCFich;
    }
      return Comptage;
     
    }
     
    struct Dimensions {
        char *Fichier;  /* fichier des données */
        int ligne;    /* nombre de lignes */
        int colonne;  /* nombre de colonnes */
    };
    struct Dimensions Data;
     
     
    int main(int argc, char *argv[])
    {
       int* monPointeur=CompatageLC(argv[1]);
       printf ("Nombre de lignes %d et Nombre de colonnes %d\n", monPointeur[0], monPointeur[1]);
      /* partie pour la structure */
        Data.Fichier = argv[1];
        Data.ligne = monPointeur[0];
        Data.colonne = monPointeur[1];
        printf ("Nombre de lignes %d \n", Data.ligne);
        printf ("Nombre de colonnes %d \n", Data.colonne);
        return 0;
    }
    Merci

  6. #26
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je ne vois pas l'intérêt d'utiliser l'allocation dynamique dans ce cas (car un bon code doit tester le succès de l'allocation, prendre des dispositions en cas d'échec, libérer la mémoire allouée... toutes choses qui ne sont pas faites dans le code montré) alors qu'il suffit d'utiliser un tableau en allocation automatique tout bête :
    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
    void CompatageLC(char *NomFich, int Comptage[])
    {
      FILE *FichLec;
      // .... le même code
      // ....
      Comptage[0]=NbLFich;
      Comptage[1]=NbCFich;
      return ;
    }
    int main(int argc, char *argv[])
    {
        int LC[2];   
        CompatageLC(argv[1],LC);
       printf ("Nombre de lignes %d et Nombre de colonnes %d\n", LC[0], LC[1]);
      /* partie pour la structure */
        Data.Fichier = argv[1];
        Data.ligne = LC[0];
        Data.colonne = LC[1];
    .....
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #27
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par diogene Voir le message
    Je ne vois pas l'intérêt d'utiliser l'allocation dynamique dans ce cas (car un bon code doit tester le succès de l'allocation, prendre des dispositions en cas d'échec, libérer la mémoire allouée... toutes choses qui ne sont pas faites dans le code montré) alors qu'il suffit d'utiliser un tableau en allocation automatique tout bête :
    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
    void CompatageLC(char *NomFich, int Comptage[])
    {
      FILE *FichLec;
      // .... le même code
      // ....
      Comptage[0]=NbLFich;
      Comptage[1]=NbCFich;
      return ;
    }
    int main(int argc, char *argv[])
    {
        int LC[2];   
        CompatageLC(argv[1],LC);
       printf ("Nombre de lignes %d et Nombre de colonnes %d\n", LC[0], LC[1]);
      /* partie pour la structure */
        Data.Fichier = argv[1];
        Data.ligne = LC[0];
        Data.colonne = LC[1];
    .....
    Merci pour La proposition. Elle fonctionne comme il le faut.

    Maintenant mon problème est le suivant : Comment Récupérer les données (les stocker dans une matrice)?

    j'ai fait la fonction suivante :

    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
     
    double Affectation(char *FichALire)
    {
        FILE *FichResultat;
    	int LigCol[2];
    	/* Récupérer nombre de Lignes et colonnes */
    	CompatageLC(FichALire,LigCol);
     
    	double X[LigCol[0]][LigCol[1]];
        FichResultat = fopen(FichALire, "r");
     
    	int i;
    	int j;
    	if(FichResultat!=NULL){
    	   for (i=0; i<LigCol[0]; i++){
    	   for (j=0; j<LigCol[1]; j++){
    	   fscanf(FichResultat, "%lf ", &X[i][j]);} }
    	   fclose(FichResultat);
    	}
    	return X;
    	}
    j'ai intégré cette fonctionne dans le précédent code que voici :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    void CompatageLC(char *NomFich, int Comptage[])
    {
      FILE *FichLec;
      /* NbL nombre de lignes  */
    	int NbL,NbLFich=0;
     
    	/* NbC nombre de colonnes   */
    	int NbC,NbCFich=0;
     
    	char saisie;
     
    	FichLec = fopen(NomFich,"r");
    	if (FichLec != NULL){
    		while ((saisie = getc(FichLec)) != EOF){
     
        if (saisie == '\n'){
            ++NbLFich;
        }
         if (saisie ==' ' && NbLFich==0){
            ++NbCFich;
        }
    	}
     
    	fclose(FichLec);
     
      Comptage[0]=NbLFich;
      Comptage[1]=NbCFich;
    }
      return;
     
    }
     
    struct Dimensions {
    	char *Fichier;  /* fichier des données */
        int ligne;    /* nombre de lignes */
        int colonne;  /* nombre de colonnes */
    };
    struct Dimensions Data;
     
    /* stockage des données */
     
    double Affectation(char *FichALire)
    {
        FILE *FichResultat;
    	int LigCol[2];
    	/* Récupérer nombre de Lignes et colonnes */
    	CompatageLC(FichALire,LigCol);
     
    	double X[LigCol[0]][LigCol[1]];
        FichResultat = fopen(FichALire, "r");
     
    	int i;
    	int j;
    	if(FichResultat!=NULL){
    	   for (i=0; i<LigCol[0]; i++){
    	   for (j=0; j<LigCol[1]; j++){
    	   fscanf(FichResultat, "%lf ", &X[i][j]);} }
    	   fclose(FichResultat);
    	}
    	return X;
    	}
     
     
    int main(int argc, char *argv[])
    {
        int LC[2];
        CompatageLC(argv[1],LC);
       printf ("Nombre de lignes %d et Nombre de colonnes %d\n", LC[0], LC[1]);
      /* partie pour la structure */
        Data.Fichier = argv[1];
        Data.ligne = LC[0];
        Data.colonne = LC[1];
    	printf ("Nombre de lignes %d \n", Data.ligne);
        printf ("Nombre de colonnes %d \n", Data.colonne);
     
    	double Table[LC[0]][LC[1]]=Affectation(argv[1]);
    	int i;
    	int j;
    	   for (i=0; i<LC[0]; i++){
    	   for (j=0; j<LC[1]; j++){
    	    printf("%f =\n", Table[i][j]);} }
     
        return 0;
    }
    J'ai le message d'erreurs suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    Error : 64  illegal return type; found 'pointer to array 4 of double' expected 'double'
    return X;
    Warning : 85  Statement has no effect
    	    printf("%f =\n", Table[i][j]);} }
    Des idées?

    Merci

  8. #28
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Tu as écrit:
    double Affectation(char *FichALire)
    Alors que tu renvoies un tableau de deux dimensions (qui n'est autre qu'un pointeur)
    Tu ne peux renvoyer un tableau, finalement tu as le même problème que précédemment
    (avec cette fois ci un tableau à deux dimensions)
    Cette fois-ci la résolution du problème est un peu plus compliquée:
    Deux solutions:
    -Réservez ton tableau dans ton main avec malloc et passer à la fonction un double**
    -Réservez un tableau statique et passer un double*, (le problème c'est qu'on ne peut pas se déplacer aisément)

  9. #29
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Merci pour le réponse.

    Citation Envoyé par quetzacoatl Voir le message
    Deux solutions:
    -Réservez ton tableau dans ton main avec malloc et passer à la fonction un double**
    Je ne veux pas que le tableau soit dans le main. Le but c'est de faire une fonction qui soit utilisée par exemple par un autre main (en quelque sorte je voudrais faire une petite librairie)

    Citation Envoyé par quetzacoatl Voir le message
    -Réservez un tableau statique et passer un double*, (le problème c'est qu'on ne peut pas se déplacer aisément)
    Cette solution semble plus adaptée à mon problème.

    Un Epsilon d'indication est bienvenu.

    Merci

  10. #30
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Toufan Voir le message
    Un Epsilon d'indication est bienvenu.
    Dans le principe :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double *Fonction ( ..)
    {
    double *toto ;
     
    toto = malloc ...
     
    return toto ;
    }
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  11. #31
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Dans le principe :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double *Fonction ( ..)
    {
    double *toto ;
     
    toto = malloc ...
     
    return toto ;
    }
    Merci pour les indications. J'ai essayé d'appliquer les indications, voici ce que j'ai codé :
    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
    
    double *Affectation(char *FichALire)  /* c'est bien déclarée???    */
    {
        FILE *FichResultat;
    	int LigCol[2];
    
    	/* LigCol[0]=nombre de lignes
    	   LigCol[1]=nombre de colonnes */
    
    	/* Récupérer le nombre de Lignes et colonnes */
    	CompatageLC(FichALire,LigCol);
    
    	double *X ;  /* c'est bien déclarée???    */
    	X=(double*)malloc(sizeof(double)*LigCol[0]*LigCol[1]);  /* c'est bien déclarée???    */
    
    /* Lecture  */
        FichResultat = fopen(FichALire, "r");
    
    /* ranger les données dans le tableau X  */
    	int i;
    	int j;
    	if(FichResultat!=NULL){
    	   for (i=0; i<LigCol[0]; i++){
    	   for (j=0; j<LigCol[1]; j++){
    	   fscanf(FichResultat, "%f ", &X[i][j]);} }
    	   fclose(FichResultat);
    	}
    	return X;
    	}
    Quand je l'intègre dans le main, j'ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Error : 69  type error: pointer expected
    ce qui correspond à la ligne :
    fscanf(FichResultat, "%f ", &X[i][j]);
    Où est mon Erreur???

    merci

  12. #32
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Est-ce que quelqu'un a la patience de regarder mon code et me dire où est l'erreur.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    void CompatageLC(char *NomFich, int Comptage[])
    {
      FILE *FichLec;
      /* NbL nombre de lignes  */
    	int NbL,NbLFich=0;
    
    	/* NbC nombre de colonnes   */
    	int NbC,NbCFich=0;
    
    	char saisie;
    
    	FichLec = fopen(NomFich,"r");
    	if (FichLec != NULL){
    		while ((saisie = getc(FichLec)) != EOF){
    
        if (saisie == '\n'){
            ++NbLFich;
        }
         if (saisie ==' ' && NbLFich==0){
            ++NbCFich;
        }
    	}
    
    	fclose(FichLec);
    
      Comptage[0]=NbLFich;
      Comptage[1]=NbCFich;
    }
      return;
    
    }
    
    struct Dimensions {
    	char *Fichier;  /* fichier des données */
        int ligne;    /* nombre de lignes */
        int colonne;  /* nombre de colonnes */
    };
    struct Dimensions Data;
    
    /* stockage des données */
    
    double Affectation(char *FichALire, int ligne, int colonne)
    {
        FILE *FichResultat;
    
    	int i;
    	int j;
    
    	double** X = (double**) malloc(colonne * sizeof(double*));
    
        FichResultat = fopen(FichALire, "r");
    
    	if(FichResultat !=NULL){
    	   for (i=0; i<ligne; i++)
    	   X[i] = (double*) malloc(ligne * sizeof(double));
    
    	   for (i=0; i<ligne; i++){
    	   for (j=0; j<colonne; j++){
    	   fscanf(FichResultat, "%lf ", &X[i][j]);
    	   } }
    	   }
    	   fclose(FichResultat);
    
    	return 0;
    	}
    
    
    
    int main(int argc, char *argv[])
    {
        int LC[2];
        CompatageLC(argv[1],LC);
       printf ("Nombre de lignes %d et Nombre de colonnes %d\n", LC[0], LC[1]);
      /* partie pour la structure */
        Data.Fichier = argv[1];
        Data.ligne = LC[0];
        Data.colonne = LC[1];
        printf ("Nombre de lignes %d \n", Data.ligne);
        printf ("Nombre de colonnes %d \n", Data.colonne);
    
    
    double Table[Data.ligne][Data.colonne]=Affectation(argv[1],Data.ligne,Data.colonne); // est-ce bien comme ça ???
    	int i;
    	int j;
    	for (i=0; i<Data.ligne; i++){
    	for (j=0; j<Data.colonne; j++){
    	printf("Table[%d , %d]= %lf \n", i+1,j+1, Table[i][j]);} }
    
        return 0;
    }
    Merci

    bonne soirée

  13. #33
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Euh ton affectation renvoie 0 et tu l'affecte à un tableau?
    Avant de demander aux autres de relire tes codes(très mal indentés au passage) peut être devrais-tu les relire toi même et essayer de les comprendre?

  14. #34
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    et de plus elle ne renvoie pas un pointeur...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #35
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    Euh ton affectation renvoie 0 et tu l'affecte à un tableau?
    Avant de demander aux autres de relire tes codes(très mal indentés au passage) peut être devrais-tu les relire toi même et essayer de les comprendre?
    Bonjour

    Merci pour les remarques. Quand on débuter en un Langage, on tourne dans tous les sens sans se lire soi (ça fait partie de l'apprentissage).

    Est-ce que tu peux me dire dans Affectation ce qui ne colle pas, j'ai mis un return tableau, mais ça coince toujours.

    voici le code

    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
     
    double Affectation(char *FichALire, int ligne, int colonne)
    {
        FILE *FichResultat;
    	int i;
    	int j;
     
    	double** X = (double**) malloc(colonne * sizeof(double*));
     
        FichResultat = fopen(FichALire, "r");
     
    	if(FichResultat !=NULL){
    	    for (i=0; i<ligne; i++)
    	    X[i] = (double*) malloc(ligne * sizeof(double));
    	    for (i=0; i<ligne; i++){
    	        for (j=0; j<colonne; j++){
    	            fscanf(FichResultat, "%lf ", &X[i][j]);
    	            }
    	            }
    	            }
    	            fclose(FichResultat);
    	            return X;
    	            }
    Merci pour ta patience

  16. #36
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    comme dit précédemment...

    Tu déclares X comme double**, et tu déclares ta fonction comme double... Il y a comme un problème, non ???
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  17. #37
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    comme dit précédemment...

    Tu déclares X comme double**, et tu déclares ta fonction comme double... Il y a comme un problème, non ???
    Oui, il y a un problème. j'ai modifié la déclaration que voici

    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
     
    double** Affectation(char *FichALire, int ligne, int colonne)
    {
        FILE *FichResultat;
    	int i;
    	int j;
     
    	double** X = (double**) malloc(colonne * sizeof(double*));
     
        FichResultat = fopen(FichALire, "r");
     
    	if(FichResultat !=NULL){
    	    for (i=0; i<ligne; i++)
    	    X[i] = (double*) malloc(ligne * sizeof(double));
    	    for (i=0; i<ligne; i++){
    	        for (j=0; j<colonne; j++){
    	            fscanf(FichResultat, "%lf ", &X[i][j]);
    	            }
    	            }
    	            }
    	            fclose(FichResultat);
    	            return X;
    	            }
    Il me reste, comment faire appel dans le main à cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    double** Table[Data.ligne][Data.colonne]=Affectation(argv[1],Data.ligne,Data.colonne);
    
    ne lui plait pas :
    error: variable-sized object may not be initialized
    Merci pour votre aide

  18. #38
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Points : 128
    Points
    128
    Par défaut
    Si ta fonction retourne un double**, il faut stocker cette valeur dans une variable de type double** :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double** Table = Affectation(argv[1], Data.ligne, Data.colonne);
    Tout simplement.

  19. #39
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par sam1507 Voir le message
    Si ta fonction retourne un double**, il faut stocker cette valeur dans une variable de type double** :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double** Table = Affectation(argv[1], Data.ligne, Data.colonne);
    Tout simplement.
    Merci à tous mon code fonctionne correctement. J'ai fait plusieurs essaies sur des différents fichiers de données. La remarque c'est que les colonnes doivent être séparées d'un Espace Blanc, sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (saisie ==' ' && NbLFich==0){
            ++NbCFich;    }
    va compter tous les Espaces blancs.

    Merci encore pour votre patience.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2012, 12h36
  2. Réponses: 0
    Dernier message: 25/09/2012, 17h55
  3. [XL-2003] Calculer le nombre de lignes non vide d'une colonne
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2011, 15h30
  4. [XL-2003] calcule le nombre de ligne non vide dans une colonne donnée
    Par aefmaaradji dans le forum Excel
    Réponses: 2
    Dernier message: 27/07/2010, 15h08
  5. Réponses: 4
    Dernier message: 17/11/2007, 17h34

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