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

Interfaces Graphiques Discussion :

preallocation de la mémoire pour une structure


Sujet :

Interfaces Graphiques

  1. #1
    Membre habitué Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Points : 143
    Points
    143
    Par défaut preallocation de la mémoire pour une structure
    bonjour;
    voici une partie de mon code:
    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
    function com_aff2= calculate_right(t,com_aff2,num)
     
    clear s;
    clear LCD;
    LCD=[];
     
    xmin=1000000000000000000000;
    xmax=com_aff2(t).c_max;
    ymin=com_aff2(t).l_min;
    ymax=com_aff2(t).l_max;
     
    k=1;
    %while( changed==true)
    %changed=false;
    nbop=0;
    for j=1:num
        if (com_aff2(j).c_min>=com_aff2(t).c_min+(com_aff2(t).c_max-com_aff2(t).c_min)/2 && com_aff2(j).c_max>com_aff2(t).c_max) && ((com_aff2(j).l_min<=ymin+(ymax-ymin)/2 && com_aff2(j).l_max>=ymin+(ymax-ymin)/2)||(com_aff2(j).l_min>=ymin && com_aff2(j).l_max<=ymax))
            LCD(k).a=com_aff2(j).a;
            LCD(k).c_min=com_aff2(j).c_min;
            LCD(k).c_max=com_aff2(j).c_max;
            LCD(k).l_min=com_aff2(j).l_min;
            LCD(k).l_max=com_aff2(j).l_max;
            LCD(k).code=com_aff2(j).code;
            if(strcmp(com_aff2(j).ul,'')==0)
                LCD(k).ul=com_aff2(j).ul;
    LCD est une structure, je veux savoir comment résever de la mémoire pour cettte structure au début du code, avant la boucle.
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Si je comprends bien, la variable k dépend uniquement de la condition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (com_aff2(j).c_min>=com_aff2(t).c_min+(com_aff2(t).c_max-com_aff2(t).c_min)/2 && com_aff2(j).c_max>com_aff2(t).c_max) && ((com_aff2(j).l_min<=ymin+(ymax-ymin)/2 && com_aff2(j).l_max>=ymin+(ymax-ymin)/2)||(com_aff2(j).l_min>=ymin && com_aff2(j).l_max<=ymax))
    On peut donc sortir cette condition de la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    j = 1:num;
    k = (com_aff2(j).c_min>=com_aff2(t).c_min+(com_aff2(t).c_max-com_aff2(t).c_min)/2 & com_aff2(j).c_max>com_aff2(t).c_max) & ((com_aff2(j).l_min<=ymin+(ymax-ymin)/2 & com_aff2(j).l_max>=ymin+(ymax-ymin)/2)|(com_aff2(j).l_min>=ymin & com_aff2(j).l_max<=ymax));
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    k = (com_aff2(:).c_min>=com_aff2(t).c_min+(com_aff2(t).c_max-com_aff2(t).c_min)/2 & com_aff2(:).c_max>com_aff2(t).c_max) & ((com_aff2(:).l_min<=ymin+(ymax-ymin)/2 & com_aff2(:).l_max>=ymin+(ymax-ymin)/2)|(com_aff2(:).l_min>=ymin & com_aff2(:).l_max<=ymax));
    On peut donc créer directement la structure LCD sans la boucle :

    Sinon, pour initialiser une structure, si dans ton premier code la variable k avait pour valeur maximale 100, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LCD(100).a = [];
    LCD(100).c_min = [];
    ...
    Tu initialiser chaque champs à une valeur précise plutôt qu'à un contenu vide []

    Et tu peux aussi utiliser la fonction STRUCT

    Source : Loren on the Art of MATLAB : Structure Initialization
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre habitué Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Points : 143
    Points
    143
    Par défaut
    merci bien Dut, j'ai initialsé chaque champ à part et ça marche bien.

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

Discussions similaires

  1. confilcting types pour une structure ?
    Par Tymk dans le forum C
    Réponses: 5
    Dernier message: 03/07/2008, 08h59
  2. Réponses: 16
    Dernier message: 12/02/2007, 17h24
  3. Alignement mémoire pour les structures.
    Par SpaceToto dans le forum Visual C++
    Réponses: 4
    Dernier message: 14/09/2006, 11h15
  4. Réponses: 6
    Dernier message: 24/03/2006, 18h24
  5. Réponses: 1
    Dernier message: 09/02/2006, 11h03

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