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 :

tableau bidimensionel et unidimensionel


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 110
    Par défaut tableau bidimensionel et unidimensionel
    Bonsoir,

    Avec la fonction readandparse, je lis et ecris le contenu de la variable info dans un tableau bidimensionel. Dans le tableau bidimensionel,les donnees doivent être structurees comme ceci:
    t[0][0] = 12,25
    t[1][0] = 12,55
    t[2][0] = 11,89
    t[3][0] = 12,3
    Jusqu´ici sa va.

    Dans la suite j´aimerais passer progressivement le contenu du tableau bidimensionel vers un tableau unidimensionel. Helas je bloque !! Bref, j´aimerais que le tableau unidimensionel command[max_size] receptione sucessivement 12,25 puis 12,55 puis 11,89 et 12,3.
    Mais je coince.

    Merci d´avance.

    Mon programme:
    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
    97
    98
    99
    100
    101
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define max_index 6
    #define element 5
    #define max_size 6
     
    char info[] = {"D12,25FD12,55FD11,89D12,3F"};
    char t[max_index][element];
    char command[max_size];
    unsigned int size = 0;
     
    size_t j = 0;
    size_t i = 0;
     
    size_t Number_index = 0; // Number index of table
     
    size_t N = sizeof(t) / sizeof(t[j][0]);// Nombre d'élément total du tableau
    size_t M = sizeof(t[0]) / sizeof(t[j][0]); // nombre d´elements d´une ligne
     
     
    void Transfer_Data(char * pointer1, size_t N1, size_t M1)
    {
      unsigned int n = 0;
      size_t j1 = 0  ;
      size_t i1 = 0  ;
     
       for(n = 0; pointer1[n] != 0; n++)
       {
         if(j1 < N1)
         {
            if(i1 < M1)
            {
              if(size < max_size)
              {
                 command[size] = pointer1[n];
                 printf("%c", command[size]);
                 ++size;
                 ++i1;
              }
            }
            else
            {
                printf("\n");
                ++j1;
                i1 = 0;
                size = 0;
            }
          }
        }
    }
     
    void readandparse(char * pointer)
    {
      char data;
      int k;
      for(k = 0; pointer[k] != 0; k++)
      {
        data = pointer[k];
     
        if(data == 'F')
        {
          ++j;
          printf("\n");
         // printf("%d\n", sizeof(t)); // Taille actuelle de t
        //  printf("Reception du caractere: F!\n");
          printf("\n");
        }
        else if(data == 'D')
        {
          printf("\n");
         // printf("Reception du caractere D: !\n");
          printf("\n");
          i = 0;
     
        }
     
        else
        {
          if(j < max_index)
          {
            if(i < element)
             {
               t[j][i] = data; // ecrire dans un tableau bidimensionel
               printf("%c", t[j][i]);
               ++i;
     
             }
          }
        }
      }
    }
     
     main()
    {
        readandparse(info);
        j = 0;
        Transfer_Data(&t[0][0], max_index, element);
        return 0;
    }

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    La fonction Transfer_Data devrait transformer d'un tableau A vers un tableau B. Pourquoi ne prend-elle qu'un seul tableau en paramètre ? :o Wait a minute.... Des variables globales ? Diantre ! Non ! Tu peux les éviter, évites-les ! Il faut revoir la façon dont tes fonctions travaillent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 110
    Par défaut
    As-tu stp une autre methode a me proposer ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En dehors de 'int main()', je dirais "des arguments aux fonctions"

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 110
    Par défaut
    J´ai modifie mon programme et jusqu´ici la copie du contenu du tableau bidimensionel t[max_index][element] vers le tableau unidimensionel copie[max_size] ne marche pas.

    D´apres mon programme, la console affiche ceci:
    12,25
    12,55
    11,89
    12,3

    12,25
    12,55
    12,39
    Mon programme:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define max_index 5
    #define element 5
    #define max_size 5
     
    char info[] = {"D12,25FD12,55FD11,89D12,3F"};
    char t[max_index][element];
    char copie[max_size] = {0};
    int j = 0;
    int i = 0;
    //size_t N = sizeof(t) / sizeof(t[0]); // Nombre de ligne
    //size_t M = sizeof(t[j]) / sizeof(t[j][0]); // elements de t[j] (t[j][0] a t[j][element-1])
    size_t N = sizeof(t) / sizeof(t[j][0]);// Nombre d'élément total du tableau
    size_t M = sizeof(t[0]) / sizeof(t[j][0]); // nombre d´elements d´une ligne
     
     
    void copietableau(char t1[N][M], char copie1[], int N1, int M1)
    {
       int j1;
       int i1;
       int size;
     
       for(j1 = 0; j1 < N1; j1++)
       {
        size = 0;
         printf("\n");
         for(i1 = 0; i1 < M1; i1++)
         {
           if(size < max_size)
           {
               copie1[i1] = t1[j1][i1];
               copie[size] = copie1[i1];
               printf("%c", copie[size]);
               ++size;
           }
         }
       }
    }
     
     
    void readandparse(char * pointer)
    {
      char data;
      int k;
      for(k = 0; pointer[k] != 0; k++)
      {
        data = pointer[k];
     
        if(data == 'F')
        {
          printf("\n");
          ++j;
     
        }
        else if(data == 'D')
        {
          printf("\n");
          i = 0;
        }
        else
        {
          if(j < max_index)
          {
            if(i < element)
             {
               t[j][i] = data; // ecrire dans un tableau bidimensionel
               printf("%c", t[j][i]);
               ++i;
             }
          }
        }
      }
      copietableau(t,copie, max_index, element);
    }
     
    main()
    {
        readandparse(info);
        j = 0;
        return 0;
    }

  6. #6
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Alors, je te conseille plusieurs choses avant de résoudre ton problème :

    1. Supprimer toutes tes variables globales et utiliser des paramètres à tes fonctions comme te l'a suggérer Bktero.
    2. Renomme toutes tes fonctions et variables et respectent certaines conventions, par exemple:
    * Quand tu défines tes constantes :
    et non Et encore mieux * Choisis une langue (français ou anglais) mais ne mélange pas les deux (copietableau et readandparse)
    * Choisis des noms qui informent sur l'utilité de la fonction ou de la varible : copie, t, t1, copie1, N1, ... . Ce n'est pas très parlant.
    * Préfère copie_tableau ou copieTableau à copietableau qui est difficilement lisible.
    * Idem pour les variables globales (si tu comptes en utiliser tout de même), préfère gCommand ou global_command ou globalCommand à command qui aurait l'air d'une variable local.
    * Evite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(t)/sizeof(t[][])
    , préfère plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(char)*ROW*COLUMN
    Et dernière chose, si tu veux voir le contenu de tes tableaux, affiche-le, avec quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void printArray1D(char* array, int len, char* name)
    {
      int i=0;
      printf("\n Print %s :\n\t", name);
      for(i=0;i<len;++i)
      {
        printf("%c", array[i]);
      }
      printf("\n");
    }

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/05/2015, 13h14
  2. [Débutant] Problème tableau bidimensionel
    Par GuillaumeNcy dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/10/2013, 16h05
  3. passage de tableau bidimensionel
    Par fomazou dans le forum Débuter
    Réponses: 6
    Dernier message: 04/02/2009, 14h22
  4. Tableau Bidimensionel Géré Par pointeurs
    Par boubyx.G dans le forum C++
    Réponses: 19
    Dernier message: 31/01/2007, 20h13
  5. Réponses: 5
    Dernier message: 26/08/2006, 10h23

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