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 :

Modification d'une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut Modification d'une fonction
    Salut,
    Je veux modifier une fonction de lecture d'un fichier des données en entrée. La fonction ne peut lire que des données codées en numéros [1 2 3], je veux la transformer pour lire tout les types des données (char), par exp [a b].
    Voilà la fonction:
    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
     
    void freq_1_itemsets( FILE *fp ) 
    { 
    char s[3000], code[10]; 
    int n, size =0, i, j, length; 
     
     
    t=NULL; 
     
    while(fgets( s, 3000, fp )) 
    { 
    length = strlen(s)-1; 
    for(i=0,j=0,size=0;i<length;i++) 
    { 
    while((i<length)&&(s[i]!=' ')) 
    code[j++]=s[i++]; 
     
    code[j]='\0'; 
    if(j) 
    { 
    n = atoi(code); 
    size++; 
     
    if(n > nbitems) 
    { 
    nbitems = n; 
    t = (int*)realloc(t,(nbitems+1)*sizeof(int)); 
    for(j=dernier+1;j<nbitems;j++) 
    t[j]=0; 
     
    dernier = nbitems; 
    t[nbitems]=1; 
    } 
    else 
    t[n]++; 
     
    j=0; 
    } 
     
     
    } 
    if(size > maxsizetr) 
    maxsizetr = size; 
     
    nblines++; 
    } 
     
    }
    L'algorithme est écrit en C.
    Merci pour vos aides.

  2. #2
    Expert confirmé
    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
    Par défaut
    Bienvenue sur le forum,

    Avant de venir à l'extension de ton problème, il faudrait améliorer ton code. On peut lui reprocher :
    - D'utiliser un paquet de variables globales (ou non définies) : t, nbitems, dernier, maxsizetr, nblines
    - De ne pas respecter l'indentation ce qui le rend illisible. En voici une version plus claire :
    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
    void freq_1_itemsets( FILE *fp ) 
    { 
       char s[3000], code[10]; 
       int n, size =0, i, j, length;  
       t=NULL; 
       while(fgets( s, 3000, fp )) 
       { 
          length = strlen(s)-1; 
          for(i=0,j=0,size=0;i<length;i++) 
          { 
             while((i<length)&&(s[i]!=' ')) code[j++]=s[i++]; 
             code[j]='\0'; 
             if(j) 
             { 
                n = atoi(code); 
                size++;  
                if(n > nbitems) 
                { 
                   nbitems = n; 
                   t = (int*)realloc(t,(nbitems+1)*sizeof(int)); 
                   for(j=dernier+1;j<nbitems;j++) t[j]=0; 
                   dernier = nbitems; 
                   t[nbitems]=1; 
                } 
                else t[n]++;  
                j=0; 
             }  
          } 
          if(size > maxsizetr) maxsizetr = size;  
          nblines++; 
       } 
    }
    Pour ta question, il faut que tu précises un peu ce que tu entends par "tous les types des données". Veux-tu dire que tu souhaites stocker des char ? des chaines de caractères ? Séparées comment ?

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut
    Salut,
    Merci pour l’amélioration de la fonction.
    En fait, je veux stocker des chaines de caractères séparées par des espaces.
    Comme, par exemple :
    http 30 10.2.3.150
    tcpmux 32 14.24.58.190
    auth 80 14.24.58.190
    Merci pour vos aides.

  4. #4
    Expert confirmé
    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
    Par défaut
    Sur une ligne, est-ce que il y a un nombre fixé à priori de chaines (comme dans ton exemple 3) ou le nombre de chaines peut-il varier d'une ligne à l'autre ?

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut
    Sur chaque ligne, le nombre de chaines reste fixe (comme dans l'exemple 3).

  6. #6
    Expert confirmé
    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
    Par défaut
    Dans ce cas, on peut envisager quelque chose du genre :

    - Définir un type de données contenant 3 chaines de caractères (ici allouées dynamiquement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
       char* champ1;
       char* champ2;
       char* champ3;
    } Data ;
    - Définir un type de données représentant un tableau de Data
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
       Data * data;
       size_t capacite;
       size_t nbData;
    }TabData;
    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
    - Créer un objet t de type TabData et l'initialiser à {NULL,0,0}
    
    - Lire le fichier ligne par ligne : fgets(s,....)
          - Pour chaque ligne
              - Si t.nbData == t.capacite, allouer des Data supplémentaires 
                (realloc) et mettre à jour t.capacite 
              - Lire les 3 champs de s : sscanf(s,"%s%s%s",...).
              - Pour chaque champ, allouer de la mémoire pour le stocker 
                (strlen()+1) dans le prochain Data libre de t (t.data[nbData])
                 et copier le champ dedans (strcpy)
              - incrémenter t.nbData
    - Redimensionner t.data si  t.capacite > t.nbData et mettre à jour t.capacite 
    
    Pour détruire l'objet t :
    - Pour chaque Data du tableau, libérer (free) la mémoire allouée pour les trois champs
    - Liberer la mémoire allouée pour le tableau

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2008, 10h02
  2. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/08/2007, 15h07
  3. Réponses: 13
    Dernier message: 11/12/2006, 14h44
  4. Modification d'une fonction "ShellExit"
    Par The Lord of Nesquik dans le forum C++
    Réponses: 11
    Dernier message: 12/06/2006, 02h57
  5. Aide sur modification d' une fonction.
    Par superadnan3 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 17h29

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