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 à 2 dimensions vers tableau à une dimension


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 18
    Par défaut Tableau à 2 dimensions vers tableau à une dimension
    Salut 👋
    Enfaite je me suis bloquée dans un code.
    Il s’agit de transférer les données d’un tableau à 2 dimensions L et C dans un tableau à une dimension L*C mais je sais pas comment faire. Aidez moi svp !

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Il faut passer d'1 tableau[a][b] à 1 tableau[(a * C) + b].

    Tout tableau en C est stocké en 1 seul bloc, ligne par ligne.

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Bonjour,

    il y a la méthode «classique» que l'on apprend telle que décrite par Foetus, mais il y a aussi la méthode que l'on utilisera plus volontiers hors cursus.
    Comme un tableau en C n'a jamais qu'une dimension et que les données seront obligatoirement stockées consécutivement en mémoire, ce qu'on nomme un tableau à «deux dimensions» n'est qu'un tableau «à une dimension» dont chaque élément est lui-même un tableau à une dimension. Cela fait que que tous les éléments sont stockés consécutivement «dimension après dimension».
    Passer de l'un à l'autre revient à copier une zone mémoire vers une autre, et cela peut se faire efficacement avec un [/c]memcpy[/c] si les deux zones mémoires ne se chevauchent pas. Donc un code comme (attention c'est du C moderne) :
    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
    #include <stdio.h>
    #include <string.h>
     
    void flatten(size_t m, size_t n, int src[restrict m][n], int dst[restrict m*n]);
     
    void print_array_2(size_t m, size_t n, int array[m][n]);
    void print_array_1(size_t n, int array[n]);
     
    int main(void) {
    	int first[3][2] = { {0,1}, {2,3}, {4,5} };
    	print_array_2(3, 2, first);
     
    	int second[6];
    	flatten(3, 2, first, second);
    	print_array_1(2*3, second);
     
    	print_array_1(2*3, (int *)first);
     
    	return 0;
    }
     
    void flatten(size_t m, size_t n, int src[restrict m][n], int dst[restrict m*n])
    {
    	memcpy(dst, src, m*n*sizeof(int));
    }
     
    void print_array_1(size_t n, int array[n])
    {
    	printf("[ ");
    	for(size_t i=0; i<n; i++)
    		printf("%d ", array[i]);
    	printf("]\n");
    }
     
    void print_array_2(size_t m, size_t n, int array[m][n])
    {
    	printf("{ ");
    	for(size_t i=0; i<m; i++)
    		print_array_1(n, array[i]);
    	printf("}\n");
    }
    On pourrait même s'en tirer avec des transtypages … nais ce ne serait pas une solution des plus propres.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 18
    Par défaut
    Fœtus j’ai pas vraiment compris d’où vient le C

    WhiteCrow
    Enfaite suis en première année on vient presque de débuter avec le langage C du coup avec tous ces void là je m’y perds

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Citation Envoyé par tahiratou Voir le message
    Fœtus j’ai pas vraiment compris d’où vient le C
    C'est le nombre de colonnes. C'est toi qui l'écrit dans un tableau à une dimension L*C

    C'est logique si tu mets les lignes bout à bout : 1 élément à la ligne A, tu auras avant cet élément les (A - 1) lignes (*) contenant C/ nombre de colonnes éléments.
    Mais comme les tableaux sont 0 indexés, on n'a pas besoin du "- 1" dans (*)

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 18
    Par défaut
    Je comprends maintenant merci beaucoup mais pour l’affichage j’ai du faire
    I allant de C+1 à (L*C)+C pas de 1 pour que ça puisse marcher

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

Discussions similaires

  1. Tableau à une ou deux dimensions:
    Par ghyosmik dans le forum Débuter
    Réponses: 2
    Dernier message: 10/01/2009, 13h47
  2. [FPDF] Tableau à une dimension contenant des valeurs
    Par kluck3000 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/05/2008, 13h34
  3. Tri d'un tableau à une dimension
    Par Philippe PONS dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/02/2008, 18h51
  4. Réponses: 4
    Dernier message: 17/01/2008, 17h06
  5. tableau à une dimension sans taille
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2007, 20h43

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