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

  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
    ok je vais essayer �a manuellement ( stylo et papier) et je vous r�pond ....thnx

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Tu pourrais utiliser un TStringGrid pour afficher tes valeurs.
    A noter que chaque cellule est du type AnsiString (cha�ne de caract�res).
    Donc pour afficher une valeur num�rique du type float (ou double) il te faudra faire une conversion (num�rique -> litt�ral) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    StringGrid1->Cells[x][y] = FloatToStr(Une_de_tes_valeurs);
    A plus !

  9. #9
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par d�faut
    Merci beaucoup " mod�rateur ", c'est �a qu'on appel => gagner du temps .

  10. #10
    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
    Tu passe en mode debug et tu testes sur une petite matrice.
    Tu met un point d'arret a la fin de ton algorithme et tu regardes le contenu de ta matrice...ou alors tu sors tout sur une console, ou ou ou....

    Ne connaissant pas bien Matlab je ne m'avancerais pas sur l'exactitude de ta traduction.

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Citation Envoy� par nadjib2007 Voir le message
    Merci beaucoup " mod�rateur ", c'est �a qu'on appel => gagner du temps .
    Oui parce que tu te sers de BCB pour v�rifier ce qu'il fait (en fait ce que fait ton code) ! D�s que la v�rification est faite (comme le dit Neilos avec une matrice de taille r�duite comportant des valeurs telles que le r�sultat soit conforme � ceux attendus), il ne te reste plus qu'� virer le TStringGrid et passer � la suite !

    On gagne aussi beaucoup de temps � �tudier ce que BCB nous offre !

    A plus !

  12. #12
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par d�faut
    Merci beaucoup les amis j'ai r�ussi a trouver l'erreur c'�tait dans les parenth�ses

    Merci encore une fois du fond du coeur..

  13. #13
    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
    Un ptit tag alors ?

  14. #14
    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..

  15. #15
    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.

  16. #16
    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