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 :

Utiliser les exceptions


Sujet :

C++Builder

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    57
    D�tails du profil
    Informations personnelles :
    �ge : 83
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 57
    Par d�faut Utiliser les exceptions
    Bonjour

    Je demande de l'aide pour le probl�me suivant.

    Apr�s avoir defini une fonction, au sens math�matique du terme, je parcours une boucle dans laquelle pour une serie de valeurs de la variable x je calcule les valeurs correspondantes de ma fonction f(x).

    Bien entendu si ma fonction contient une racine carr�e d'un nombre n�gatif ou un denominateur qui s'annule mon programme est interrompu avec le message d'erreur appropri�.

    Est-il possible dans un cas comme celui-la de ne pas avoir d'interruption du programme et de continuer � parcourir la boucle de mani�re � obtenir toutes les valeurs existantes de f(x) ? Si oui comment faire ?

    Je pr�cise que j'ai fait des recherches dans les FAQs et sur Google, que je pense avoir saisi qu'il faut probablement utiliser un bloc "Try-Catch" ou "Try-Except" ou "Try-Finally", mais justement je n'arrive pas � comprendre comment le faire.

    Mon but final est de tracer la repr�sentation graphique de ma fonction.

    Merci

  2. #2
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    essaye comme �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (double x=0;x<100;x=x+1) {
      try {
        double y=maFonction(x);
        DessinerFonction(x,y);
      }
      catch(...) {  // intercepte toute les exceptions
        // Ne rien faire
      }
    }
    La partie importante est de mettre le try...catch DANS la boucle for pour pouvoir continuer en cas d'exception.

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    57
    D�tails du profil
    Informations personnelles :
    �ge : 83
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 57
    Par d�faut
    Je suis confus de demander autant, mais c'est que je suis vraiment perdu.
    Dans catch(...) que faut-il mettre � la place des points de suspension ?

    Merci beaucoup pour les r�ponses.

  4. #4
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    En fait, il faut les laisser tels quels. Mettre "..." signifie "capturer toutes les exceptions".

    Si tu veux capturer une exception particuli�re (les exceptions sont des valeurs retourn�e, chacune avec son type), alors tu peux remplacer les "..." par le type d'exception. Il est possible de capturer plusieurs types d'exception en cascade en mettant plusieurs catch � la suite (mais un seul catch par type d'objet retourn� par les exceptions).

    exemple:
    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
     
      try {
        if (value==0) throw 1;    // Ceci crée une exception de type "int"
        if (value<0)   throw 2;    // Aussi une exception de type "int"
        if (value>1000) throw "Trop grand"; // Une exception de type char*
      }
      catch(int aNumber) {
        // Ca catch capture toutes les exceptions qui sont des entiers
        if (aNumber==1) cerr<<"La valeur était zéro"<<endl;
        if (aNumber==2) cerr<<"La valeur était négative"<<endl;
      }
      catch(char* aText) {
        // Ce catch capture toutes les exceptions qui sont des char*
        cerr<<aText<<end;
      }
      catch(...) {
        // Ce catch capture toutes les exceptions qui n'ont pas déjà été prises$
        cerr<<"Erreur inattendue"<<endl;
      }

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    57
    D�tails du profil
    Informations personnelles :
    �ge : 83
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 57
    Par d�faut
    Merci pour les explications. Je crois que je commence � comprendre.
    Les ... valent pour toutes les exceptions, mais semble-t-il seulement les exceptions standard du compilateur.
    Mais celles d'un composant tiers ne sont pas intercept�es.
    J'utilise un composant non visuel qui �value les formules math�matiques et dans ce cas les exceptions dont je parle au d�but ne sont pas intercept�es.

  6. #6
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    Pour ce que j'en sais, ce syst�me intercepte toutes les exceptions qui sont g�n�r�es par une "throw". Maintenant, il se peut que ton composant ne g�n�re pas de telles exceptions mais affiche directement, de son propre chef, des messages d'erreur. L�, je ne vois pas comment l'en emp�cher (peut-�tre y a-t-il une propri�t� du composant pour g�rer les erreurs...)

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    57
    D�tails du profil
    Informations personnelles :
    �ge : 83
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 57
    Par d�faut
    C'est le cas. En effet mon composant affiche les erreurs dans une "MessageBox".

  8. #8
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    Est-ce que tu ne pourrais pas faire les tests avant pour la validit� des param�tres? Ou ta fonction est-elle trop complexe / inconnue ?

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    57
    D�tails du profil
    Informations personnelles :
    �ge : 83
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 57
    Par d�faut
    J'ai pens� � le faire, mais je ne vois pas comment car je veux obtenir mon trac� pour une fonction quelconque complexe ou pas, mais de toute mani�re d�finie dynamiquement � l'execution, d'o� l'utilisation d'un composant pour analyser la formule.

Discussions similaires

  1. Utiliser les exceptions sans sortir
    Par omelhor dans le forum Langage
    R�ponses: 0
    Dernier message: 06/06/2011, 09h37
  2. [POO] Quand utiliser les Exceptions?
    Par ChriGoLioNaDor dans le forum Langage
    R�ponses: 2
    Dernier message: 20/06/2007, 08h40
  3. R�ponses: 3
    Dernier message: 12/02/2006, 17h34
  4. Utiliser les exceptions pour un traitement particulier ?
    Par Blustuff dans le forum Assembleur
    R�ponses: 11
    Dernier message: 01/12/2004, 02h21

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