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 :

Ajouter des elements a un tableau de float


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut Ajouter des elements a un tableau de float
    Bonjour,

    Je cherche une solution pour pouvoir ajouter des elements dans un tableau les uns a la suite des autres sans connaitre l'indice ou je vais poser ces elements.

    Il s'agit d'un tableau de float (float* mon_tableau) Alloué de facon dynamique (on dira un malloc, meme si ce n'est pas tout a fait ca). Je connais la taille maximum du tableau, donc pas de soucis de ce coté la.

    Je precise que je ne peut utiliser qu'un tableau, et pas autre chose (liste, ...) et uniquement en C (et pas en C++)

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Sans connaitre l'indice, pas moyen (à moins d'avoir une valeur sentinelle, mais pour des floats c'est pas gagné).

    Pour un tableau dynamique, tu as généralement deux tailles à connaitre:
    • La taille du buffer,
    • La taille 'effective' du tableau (le nombre d'éléments insérés dedans).

    Sachant que la première doit toujours être supérieure ou égale à la seconde, en toutes circonstances.

    Si j'ai bien compris, tu as la première taille. Seulement, si tu n'as pas la seconde, tu ne peux pas faire d'ajout.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Je n'ai peut-être pas bien compris le pb mais si mon_tableau pointe vers le premier espace mémoire de ton tableau, tu peux faire et incrémenter le pointeur, en vérifiant que tu ne fais pas plus d'incrémentation que la taille du tableau

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    En fait, ce tableau contient des coordonnées : x,y,z en float.

    Je fais une serie de boucles avec des tests et parfois, je dois ajouter un triplet x y z, parfois je n'ajoute rien.

    Je connais la taille maxi du tableau (si j'ajoute un triplet a chaque boucle) mais pas la taille effective.

  5. #5
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    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
    float *tab[TAILLE_MAXI];
    int ind=0;
     
    while ( ??? ) {
        // plein de tests
        if ( je dois ajouter un triplet ) {
            if ( ind + 2 < TAILLE_MAXI ) {
                tab[ind] = x;
                tab[ind+1] = y;
                tab[ind +2] = z;
                ind = ind + 2;
            } else {
                // erreur
            }
        }
    }

  6. #6
    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 Vinc35 Voir le message
    Je cherche une solution pour pouvoir ajouter des elements dans un tableau les uns a la suite des autres sans connaitre l'indice ou je vais poser ces elements.

    Il s'agit d'un tableau de float (float* mon_tableau) Alloué de facon dynamique (on dira un malloc, meme si ce n'est pas tout a fait ca). Je connais la taille maximum du tableau, donc pas de soucis de ce coté la.

    Je precise que je ne peut utiliser qu'un tableau, et pas autre chose (liste, ...) et uniquement en C (et pas en C++)
    Tableau souple :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module FARR (Flexible ARRay)

    Pose des questions si tu ne comprends pas.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    et si tu combines la réponse de Vinc35 et Corentin59 :

    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
     
    float *tab ; *p ; /*[TAILLE_MAXI] */
    int ind=0 ;
     
    tab = malloc ...
     
    ...
     
    p = tab ;
     
    while ( ??? ) {
        // plein de tests
        if ( je dois ajouter un triplet ) {
            if ( ind + 2 < TAILLE_MAXI ) {
                *p = x;
                *(p+1) = y;
                *(p+2) = z;
                ind = ind + 2;
                p = p + 3 ;
            } else {
                // erreur
            }
        }
    }
    ou bien on se passe de ind, et on teste par rapport à NULL si on a alloué 1 de plus et qu'on l'a setté à NULL...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    et si tu combines la réponse de Vinc35 et Corentin59 :

    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
     
    float *tab ; *p ; /*[TAILLE_MAXI] */
    int ind=0 ;
     
    tab = malloc ...
     
    ...
     
    p = tab ;
     
    while ( ??? ) {
        // plein de tests
        if ( je dois ajouter un triplet ) {
            if ( ind + 2 < TAILLE_MAXI ) {
                *p = x;
                *(p+1) = y;
                *(p+2) = z;
                ind = ind + 2;
                p = p + 3 ;
            } else {
                // erreur
            }
        }
    }
    ou bien on se passe de ind, et on teste par rapport à NULL si on a alloué 1 de plus et qu'on l'a setté à NULL...
    N'est-ce pas plus compliqué que ce que je propose ? Quelle est l'utilité du pointeur p ici ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    je n'ai pas dit que c'était plus simple, c'était pour montrer l'exemple avec ce qu'avait dit Vinc35.

    Et comme j'ai mentionné on peut se passer de ind..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    souviron34 :
    ou bien on se passe de ind, et on teste par rapport à NULL si on a alloué 1 de plus et qu'on l'a setté à NULL...
    Qu'est ce qu'on peut mettre à NULL ? c'est un tableau de float, pas de pointeurs.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    bah si on a fait de l'allocation dynamique :

    tab+TAILLE_MAX = NULL ;

    ou bien

    tab[TAILLE_MAX] = FLT_MAX ;
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    bah si on a fait de l'allocation dynamique :

    tab+TAILLE_MAX = NULL ;
    ...
    tab+TAILLE_MAX n'est pas une lvalue
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    ET ?

    si tu veux, tu peux faire p0 = tab + TAILLE_MAX

    si tu tiens à conserver un pointeur.

    Mais là n'était pas mon propos...

    si tu remplaces le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ind < TAILLE_MAX - 2 )
    par

    c'est pour ça que je disais qu'on pouvait se passer de ind..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  14. #14
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    En fait, dans mon cas, on avait "tab" et "ind" et dans le tien, on a "tab" et "p".

    Je ne vois pas trop ce qui change (si ce n'est que je n'ai pas très bien compris ce que tu proposes)

Discussions similaires

  1. Ajouter des élément a un tableau
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2007, 14h23
  2. Réponses: 2
    Dernier message: 14/09/2006, 22h26
  3. [Tableaux] Somme des éléments d'un tableau
    Par brazilpalace dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2006, 12h17
  4. [langage] Compter des éléments dans un tableau
    Par helene22500 dans le forum Langage
    Réponses: 29
    Dernier message: 23/05/2005, 11h38
  5. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41

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