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 :

Création de 5 variables tableau contenant le même type d'élément et la même taille


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 50
    Par défaut Création de 5 variables tableau contenant le même type d'élément et la même taille
    Bonjour à tous. Je voudrais écrire un programme qui gère 5 tableaux de taille constant (34 éléments). Chaque élément des tableaux sont de même type (type réel). Est-il possible de créer un type tableau
    float notes [35]
    et créer 5 variables
    notes1, notes2, notes3, notes4 et notes5 qui seront tous des tableaux de 34 réels ?
    Merci d'avance pour toute contribution

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Par défaut
    Bonjour,
    il est possible de déclarer plusieurs tableaux sans répétitions grâce au mot clé typeof(), standardisé depuis C23, sinon il faut déclarer chaque taille de tableau pour chaque variable, de plus il faut les initialiser séparément, et je n'ai pas trouvé comment faire pour initialiser à la même valeur tous les tableaux à la fois en une seule fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typeof(float[35]) notes1, notes2, notes3, notes4, notes5;
    /* ou bien */
    float notes1[35], notes2[35], notes3[35], notes4[35], notes5[35];
    /* avec initialisation */
    float notes1[35] = {0.0f}, notes2[35] = {0.0f}, notes3[35] = {0.0f}, notes4[35] = {0.0f}, notes5[35] = {0.0f};
    /* ou bien */
    typeof(float[35]) notes1 = {0.0f}, notes2 = {0.0f}, notes3 = {0.0f}, notes4 = {0.0f}, notes5 = {0.0f};
    /* compile bien mais n'affecte pas les valeurs... */
    typeof((float[35]){0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
        10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f,
        21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f}) notes1, notes2, notes3, notes4, notes5;
    Sachant que selon votre utilisation il vaut mieux assigner les valeurs des tableaux grâce à memcpy avant toute lecture...

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 753
    Par défaut
    Hello,

    Pourquoi créer 5 tableaux? Un seul suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define NBR_ARRAYS    5
    #define NBR_ELEMS     34
     
    float array2dims[NBR_ARRAYS][NBR_ELEMS];     // ou double array2dims[.....
    array2dims[3][21]=....;                      // l'élément 22 du 4ème tableau
    Edit: déclare un tableau de 35 éléments, pas 34 comme demandé.

    Edit2: et pour tout initialiser à zéro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float array2dims[NBR_ARRAYS][NBR_ELEMS]={0};
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent ;)

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par babababa Voir le message
    Je voudrais écrire un programme qui gère 5 tableaux de taille constant (34 éléments). Chaque élément des tableaux sont de même type (type réel). Est-il possible de créer un type tableau
    float notes [35]
    et créer 5 variables
    notes1, notes2, notes3, notes4 et notes5 qui seront tous des tableaux de 34 réels ?
    Oui,il suffit d'écrire typedef float Tab34[34];.
    Et on peut alors créer les variables avec Tab34 note1, notes2, notes3, notes4, notes5;.

    Mais un tableau n'étant pas un vrai type, je déconseille ce typedef. Un tableau a tendance à être converti en un pointeur sur son premier élément perdant sa taille. Ainsi une fonction ne peut ni recevoir ni retourner un tableau. Si on écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void  fonction( Tab34 n ) {      // ici n n'est pas un tableau, c'est un pointeur!
        n[5] = 3.14f;                // est correct
        printf( "%p\n", sizeof(n) ); // ne va pas indiquer 34*4, indique la taille d'un pointeur!
    }
    Par contre un pointeur sur un tableau garde toutes ses caractéristiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void  fonction( Tab34* p_n ) {      // ici p_n pointe sur un tableau
        (*p_n)[5] = 3.14f;              // est correct
        printf( "%p\n", sizeof(*p_n) ); // indique 34*4.
    }
    Si tu souhaites un vrai type, le tableau n'est pas utilisable tel quel, on peut l'encapsuler dans une structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct _CapsuleTableau34 {
        float  t[34];
    } CapsuleTableau34;
     
    CapsuleTableau34  fonction( CapsuleTableau34  n ) {  // ici n encapsule un tableau
        n.t[5] = 3.14f;          // nécessite un accès au tableau
        printf( "%p\n", sizeof(n) ); // indique 34*4
        return  n;          // on peut retourner une capsule
    }
     
    int  main(void) {
        CapsuleTableau34  note1={{1.f,2.f,3.f}}, notes2, notes3, notes4, notes5;
        note2 = fonction( note1 );
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2021, 16h10
  2. Réponses: 5
    Dernier message: 19/07/2007, 13h06
  3. [SQL] problème de variable tableau PHP contenant les données d'une jointure SQL
    Par Schpountz42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 05h59
  4. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55
  5. Tableau d'éléments de type variable
    Par Drooxy dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2003, 15h20

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