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 :

Lecture Tableau 2D


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Lecture Tableau 2D
    Bonjour a tous,

    Mon probleme est aujourd'hui de pouvoir lire un tableau 2D. (J avais deja créé une discussion plus ou moins relatée a cela mais je pense que ce prob est bien plus spécifique). Voici le tableau en lui meme:
    5 5
    2 2
    4 0
    14 9 12 9 13
    14 2 3 4 3
    13 12 8 2 11
    5 5 6 9 13
    6 2 11 6 3
    La premiere ligne me donne la taille du tableau qui ne commence qu'à la 4eme ligne, et la seconde les coordonnées du nombre que je dois lire en premier. Comment puis-je lire la seconde ligne afin de me rediriger vers la position (2,2) de mon tableau? Autrement dit, comment définir ce tableau comme étant un repère (i,j) avec une origine et un point max, ou encore comment utiliser nimporte lequel de ces chiffres en indiquant simplement ses coordonnées relatives au tableau?
    Je pensais utiliser les structures, mais je ne suis pas tres familier avec celles ci, et encore moins lorsqu'il s'agit de les appliquer à un fichier .txt...

    Merci!

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 62
    Points : 75
    Points
    75
    Par défaut
    Je te conseil de revoir l'utilisation des tableaux à deux (ou à n) dimension en c (google).
    Pour un tableau multidimensionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     type Nom_du_tableau [a1][a2][a3] ... [aN]
    Par exemple pour déclarer un tableau d'entier à 2d en c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Nom_du_tableau [tailleX][tailleY];
    pour accéder à une "case" de ton tableau
    Assignation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Nom_du_tableau[i][j]=5;
    Ect...

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pl235 Voir le message
    Bonjour a tous,

    Mon probleme est aujourd'hui de pouvoir lire un tableau 2D. (J avais deja créé une discussion plus ou moins relatée a cela mais je pense que ce prob est bien plus spécifique). Voici le tableau en lui meme:
    5 5
    2 2
    4 0
    14 9 12 9 13
    14 2 3 4 3
    13 12 8 2 11
    5 5 6 9 13
    6 2 11 6 3
    La premiere ligne me donne la taille du tableau qui ne commence qu'à la 4eme ligne, et la seconde les coordonnées du nombre que je dois lire en premier. Comment puis-je lire la seconde ligne afin de me rediriger vers la position (2,2) de mon tableau? Autrement dit, comment définir ce tableau comme étant un repère (i,j) avec une origine et un point max, ou encore comment utiliser nimporte lequel de ces chiffres en indiquant simplement ses coordonnées relatives au tableau?
    Le plus simple est probablement de charger le tableau en mémoire dans un tableau dynamique à 2 dimensions. Ensuite, l'accès est direct par [i][j]

    http://emmanuel-delahaye.developpez.....htm#tabdyn_2d
    Pas de Wi-Fi à la maison : CPL

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

    Lire un fichier formaté n'est pas très compliqué.
    Il faut juste sur de la structure du fichier.

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    #define IN_FILE "fichier.txt"
     
    void affiche_tab(int *tab, int width, int height)
    {
        int i, j;
        for (j = 0; j < height; ++j) {
            for (i = 0; i < width; ++i) {
                printf("%d ", tab[i + j * width]);
            }
            printf("\n");
        }
    }
     
    int main(void)
    {
        int tmp;
        int i, j;
        int height, width;
        int *tableau = NULL;
        FILE *fin = fopen(IN_FILE, "r");
     
        if (NULL == fin) {
            perror(IN_FILE);
        } else {
            /* lire les dimensions du tableau */
            fscanf(fin, "%d %d\n", &width, &height);
     
            /* sauter 2 lignes */
            tmp = 2;
            while (tmp) {
                int c = fgetc(fin);
                if ('\n' == c) {
                    --tmp;
                }
                if (EOF == c) {
                    break;
                }
            }
     
            /* allocation du tableau */
            tableau = malloc(width * height * sizeof *tableau);
            if (NULL == malloc) {
                perror("malloc");
            } else {
     
                /* remplissage du tableau */
                for (j = 0; j < height; ++j) {
                    for (i = 0; i < width; ++i) {
                        fscanf(fin, "%d", &(tableau[i + j * width]));
                    }
                }
     
                /* affichage */
                affiche_tab(tableau, width, height);
            }
            fclose(fin);
     
            /* EDIT */
            free(tableau);
        }
     
        return EXIT_SUCCESS;
    }
    Dernière modification par Invité(e) ; 06/01/2009 à 06h27. Motif: malloc oublié, merci ssmario2

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,

    Lire un fichier formaté n'est pas très compliqué.
    Il faut juste sur de la structure du fichier.

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    #define IN_FILE "fichier.txt"
     
    void affiche_tab(int *tab, int width, int height)
    {
        int i, j;
        for (j = 0; j < height; ++j) {
            for (i = 0; i < width; ++i) {
                printf("%d ", tab[i + j * width]);
            }
            printf("\n");
        }
    }
     
    int main(void)
    {
        int tmp;
        int i, j;
        int height, width;
        int *tableau = NULL;
        FILE *fin = fopen(IN_FILE, "r");
     
        if (NULL == fin) {
            perror(IN_FILE);
        } else {
            /* lire les dimensions du tableau */
            fscanf(fin, "%d %d\n", &width, &height);
     
            /* sauter 2 lignes */
            tmp = 2;
            while (tmp) {
                int c = fgetc(fin);
                if ('\n' == c) {
                    --tmp;
                }
                if (EOF == c) {
                    break;
                }
            }
     
            /* allocation du tableau */
            tableau = malloc(width * height * sizeof *tableau);
            if (NULL == malloc) {
                perror("malloc");
            } else {
     
                /* remplissage du tableau */
                for (j = 0; j < height; ++j) {
                    for (i = 0; i < width; ++i) {
                        fscanf(fin, "%d", &(tableau[i + j * width]));
                    }
                }
     
                /* affichage */
                affiche_tab(tableau, width, height);
            }
            fclose(fin);
        }
     
        return EXIT_SUCCESS;
    }
    Bien que je ne comprenne pas tout de ce code (en tout bon débutant que je suis(^^)), il lit correctement mon fichier, et je t'en remercie! Mais après cela, puis-je analyser et utiliser chacun des chiffres de mon tableau séparément? A savoir: chaque chiffre représente une case dans un labyrinthe. Je dois donc pouvoir m interesser d'abord au premier chiffre dont les coordonnées sont (2,2), puis l'analyser en lui donnant des propriétés quant aux murs qui entourent la case qu'il représente. Finalement, je dois pouvoir, en fonction des ouvertures de cette case, me déplacer à la case suivante.
    Je ne vois pas comment cela est possible (pour l'instant du moins)...
    Des idées?
    Merci de votre aide a tous!

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    pour accéder à une "case" de ton tableau
    Assignation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Nom_du_tableau[i][j]=5;
    Cela me parrait étrange, ce serait pour i=j=5 non? Si je voulais acceder à la case [2][4]?

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par pl235 Voir le message
    Cela me parrait étrange, ce serait pour i=j=5 non? Si je voulais acceder à la case [2][4]?
    Tableau 1 dimension (mon exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* définition d'un tableau */
    int tableau[16];
     
    /* affectation du troisième élément à 5*/
    tableau[2] = 5;
    /* ou */
    int i = 2;
    tableau[i] = 5;

    Tableau 2 dimension (lien fourni par Emmanuel Delahaye)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* définition d'un double tableau */
    int tableau[4][4];
     
    /* affectation de la deuxième ligne, troisième colonne à 5*/
    tableau[1][2] = 5;
    /* ou */
    int i = 1;
    int j = 2;
    tableau[i][j] = 5;

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bon, voici mon code qui n'est vraiment pas pratique, mais qui me suffit tant que j'arrive à mes fins:
    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 <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    #define BUFFERSIZE 100
    void main()
    {
        char filename[30];
        char buffer[BUFFERSIZE];
        int n, lectureok, startx, starty, endx, endy;
        char **map;
    FILE*fp;
     do
        {
         printf("Enter the maze path : ");
         scanf("%s", filename);
         fp = fopen(filename, "r");
         if (!fp)
            printf("\aERROR: Impossible to open"
                   " file: %s.\n", filename);
        }
      while (!fp);
     
                fscanf(fp, "%d", &n);
                printf("Size of maze is %d", n);
                n++;
                fscanf(fp, "%d", &n);
                printf(" by %d\n", n);
                n++;
                fscanf(fp, "%d", &n);
                printf("Start position is (%d,", n);
                startx=n;
                n++;
                fscanf(fp, "%d", &n);
                printf("%d)\n", n);
                starty=n;
                n++;
                fscanf(fp, "%d", &n);
                printf("Finish position is (%d,", n);
                endx=n;
                n++;
                fscanf(fp, "%d", &n);
                printf("%d)\n", n);
                endy=n;
                n++;
     
     
                fclose(fp);
    }
    Je rappelle que le type de fichier à lire est de la forme:
    5 5-->taille
    2 2-->début
    4 0-->fin
    14 9 12 9 13
    14 2 3 4 3
    13 12 8 2 11
    5 5 6 9 13
    6 2 11 6 3
    le tableau en lui même peut varier jusqu'à la taille de 500 par 500, et est sencé etre inconnu.
    (citation Emmanuel Delahaye):
    Le plus simple est probablement de charger le tableau en mémoire dans un tableau dynamique à 2 dimensions. Ensuite, l'accès est direct par [i][j]
    J'ai lu la page http://emmanuel-delahaye.developpez.....htm#tabdyn_2d donnée par Emmanuel Delahaye sur les tableaux dynamiques, mais je n'y ai malheureusement rien compris. Quelqu'un pourrait-il m'éclaircir les idées?
    Merci.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pl235 Voir le message
    J'ai lu la page http://emmanuel-delahaye.developpez.....htm#tabdyn_2d donnée par Emmanuel Delahaye sur les tableaux dynamiques, mais je n'y ai malheureusement rien compris.
    Ça suppose que tu connaisses les tableaux, les boucles, pointeurs, l'allocation de mémoire dynamique... Si ce n'est pas le cas, il faut commencer par approfondir tes connaissances basiques du langage C.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. problème lecture tableau en C
    Par tom31 dans le forum Débuter
    Réponses: 1
    Dernier message: 02/01/2008, 11h40
  2. [Tableaux] lecture tableau associatif
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 13/10/2007, 19h58
  3. Erreur lecture tableau WMI
    Par BATiViR dans le forum Delphi
    Réponses: 15
    Dernier message: 10/04/2007, 21h54
  4. [Collections] lecture tableau 2 dimensions
    Par heloise dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/09/2004, 10h49

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