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++Builder Discussion :

v�rification des erreurs d'un code C++


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par d�faut v�rification des erreurs d'un code C++
    Bonjour tous le monde; j'ai un petit code en Matlab extrait d'un programme de segmentation d'image par le mod�le de Ron Kimmel)

    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
    % 'Roughly' correct Phi to be a distance map of its zero set
    function u=redistance(Phi);
    u=(sign(Phi)+1)*999999; % set to infinity all positive
    for i=1:2,
        l2=2;
        if i>1 
            u=(1-sign(Phi))*999999; 
        end % set to infinity all negative
        while l2>1,
              v=Update(u,1);
              l2=sum(sum((u-v).^2));
              u=v;;
        end % while
        if i>1 
           u=u-up; 
       else 
           up=u; 
     
       end % if
    end % for
    %-----------------------------------------------------------------------------------------------
    %Solve |grad u|=F(x,y)  parallel version of the FMM
    function res=Update(u,F)
    mx=min(u([2:end end],:), u([1 1:end-1],:));
    my= min(u(:,[2:end end]), u(:,[1 1:end-1]));
    delm=(mx-my);
    mask=(abs(delm)<F);
    res=min(mask.*(mx+my+sqrt(2.*F.^2-delm.^2))./2+...
       (1-mask).*(min(mx,my)+F),u);
    tel que "phi" une matrice carr� quelconque.

    j'ai essayer de convertir ce code en C++ Builder (manuellement), mais je ne sais pas si je suis juste ou non, alors s'il y a quelqu'un qui peuvent m'aider je le remercie d'avance.

    voici le code que j'ai �crit:

    pour la fonction "redistance"

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    void __fastcall  TForm1::redistance(float **phi, int H, int W)
     
    {
     
    float**up=new float*[H];  // la heuteur de l'image
    for(int i=0;i<H;i++)
      {
       up[i]=new float[W];   // la largeur de l'image
      }
     
    float**v=new float*[H];
    for(int i=0;i<H;i++)
      {
       v[i]=new float[W];
      }
     
    float l2, l22;
     
    for (int i=0;i<H;i++)
        for (int j=0;j<W;j++)
           {
            phi[i][j]=(fctsign(phi[i][j])+1)*999999; // fixé le tous positif
           }
     
            for (int z=1;z<3;z++)
               { 
                l2=2;
                if (z>1)
                  {
                   for (int i=0;i<H;i++)
                   for (int j=0;j<W;j++)
                      {
                   phi[i][j]=(1-fctsign(phi[i][j]))*999999; //fixé le tous négative
                      }
                  }   // end if
                    while (l2>1)
                        {
                        Updt(phi,v,H,W); // fonction update
                         l22=0;
                        for (int i=1;i<H-1;i++)
                          for (int j=1;j<W-1;j++)
                             {
                             l22=l22+pow((phi[i][j]-v[i][j]),2);
                             }
                        l2=l22;
                        for (int i=1;i<H-1;i++)
                        for (int j=1;j<W-1;j++)
                           {
                            phi[i][j]=v[i][j];
                           }
                        } // end while 
     
                    if (z>1)
                      {
                       for (int i=0;i<H;i++)
                       for (int j=0;j<W;j++)
                           {
                           phi[i][j]=phi[i][j]-up[i][j];
                           }
                       }
                    else
                        {
                         for (int i=0;i<H;i++)
                         for (int j=0;j<W;j++)
                            {
                             up[i][j]=phi[i][j];
                            }
                         }
     
                   }// end for z
     
     
    for (int i=0;i<H;i++)
       delete[]up[i];
       delete[]up;
     
    for (int i=0;i<H;i++)
       delete[]v[i];
       delete[]v;
     
     }
    et pour la fonction "Update ":

    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
    void __fastcall  TForm1::Updt(float **u,float **v, int H, int W)
     
    {
     
     float mx,my,diff,minimum;
     
    //Résoudre l'équation |grad u|=F(x,y)
     
    //  déclaration de la matrice mask
    float**mask=new float*[H];
    for(int i=0;i<H;i++)
       {
        mask[i]=new float[W];
       }
     
    // déclaration de  la matrice produit
    float**produit=new float*[H];
    for(int i=0;i<H;i++)
       {
        produit[i]=new float[W];
       }
     
    for (int i=1;i<H-1;i++)
      for (int j=1;j<W-1;j++)
         {
         my=min(u[i][j+1],u[i][j-1]);
         mx=min(u[i+1][j],u[i-1][j]);
         minimum=min(mx,my);
         diff=mx-my;
     
         if (abs(diff)<1) // abs(mx-my)<1
           {
            mask[i][j]=1;
            produit[i][j]=mask[i][j]*((mx+my+sqrt(2-(diff*diff)))/(2+((1-mask[i][j])*(minimum+1))));
           }
         else
             {
              mask[i][j]=0;
              produit[i][j]=0;
             }
         }
     
    for (int i=1;i<H-1;i++)
       for (int j=1;j<W-1;j++)
          {
           v[i][j]=min(produit[i][j],u[i][j]);
          }
     
    // Libération de mémoire
     
    for(int i=0;i<H;i++)
       delete[]mask[i];
       delete[]mask;
     
    for(int i=0;i<H;i++)
       delete[]produit[i];
       delete[]produit;
    }
    et s'il y a des fautes merci de bien les signal�es.

  2. #2
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Citation Envoy� par nadjib2007 Voir le message
    et s'il y a des fautes merci de bien les signal�es.
    Bonsoir,

    Ben, pour commencer -> ' signal�es '
    Cela s'�crit -> ' signaler '

    Voili ... et d'une.



    Lol, d�sol�, pour le reste, je ne connais pas.


  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par d�faut
    lol...je crois que j'ai poster mon sujet dans le forum de C++ Builder et non pas dans "lecture et �criture"...

    Merci pour la remarque j'ai pas fait attention.

  4. #4
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Salut, j'ai une question qui peut paraitre un peu stupide, est-ce que tu as essayer de mettre des valeurs dans ta fonctions BCB et de comparer les r�sultats avec ta fonction MatLab? Si les r�sultats sont les m�mes il y a des chances que tu as fais un bon travail et sa �vite aux membres du forum de faire la validation

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par d�faut
    Merci pour la r�ponse j'ai u cette aider mais comment je pourrais faire ca?!

    pour mettre des valeurs c'est facile mais comment je peut avoir le r�sultat � la fin, car je doit trouver une matrice !!

    Merci encore une fois

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Si c'est une matrice 2D tu peux la mettre dans un tableau, sinon tu peux faire la sommes de tout les �l�ments de la matrice et comparer le r�sultat. Utilises ton imagination, tu devrais trouver une solution.

  7. #7
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par d�faut
    R�solu....! Ouiii bien sur avec plaisir; et s'il y a un bouton "r�sultat satisfaisante" je le pr�f�re..

  8. #8
    Membre �prouv�

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par d�faut
    Merci beaucoup et � bient�t sur le forum.

  9. #9
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Juste une petite remarque au passage...

    Sais tu qu'il n'y a rien de plus proche, du point de vue de l'utilisation de la m�moire, du moins, d'un tableau � deux dimensions... qu'un seul tableau contenant (dim1*dim2) �l�ments

    La seule chose, c'est qu'au lieu d'acc�der aux �l�ments via
    on y acc�de avec la formule
    ...

    Mais cela ouvre un max de possibilit�s...

    D'abord, tu peux envisager de travailler avec un pointeur, au lieu d'avec... un pointeur de pointeur

    Ensuite, cela te permet de faire l'allocation de m�moire d'une seule traite
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    float* tab=new float[imax*jmax];//ou imax est le nombre de lignes et jmax le nombre de colones
    Evidemment, ce qui est vrai pour l'allocation est vrai pour la lib�ration
    Enfin, cela peut t'ouvrir des horizons, telles que, par exemple, utiliser les conteneurs de la STL (les vector, par exemple)...

    Cela n'a l'air de rien, mais cela te lib�re de l'obligation de g�rer la m�moire (allocation/lib�ration), d'autant plus que, tel que tu le fait l�, c'est pas s�curisant (que se passerait-il si le syst�me tombait � court de m�moire pour allouer les W derniers float)

    Maintenant, ce que j'en dis, ce n'est que pour �carter un risque de "plantage" qui, d'apr�s la loi de Murphy, appara�tra le jour de la grande d�monstration
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [D�butant] v�rification des erreurs de code
    Par VirtualSlide dans le forum MATLAB
    R�ponses: 3
    Dernier message: 06/07/2013, 18h10
  2. Strtol - V�rification des erreurs ?
    Par Bktero dans le forum C
    R�ponses: 7
    Dernier message: 23/11/2010, 21h52
  3. v�rification des erreurs
    Par oprian dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 01/12/2007, 14h52
  4. [VBA-E] v�rification des erreurs d'arri�re plan
    Par WagaSeb dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 12/02/2007, 13h41
  5. R�ponses: 22
    Dernier message: 28/01/2007, 21h00

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