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 :

Accéder à la valeur numérique d'une string


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Points : 50
    Points
    50
    Par défaut Accéder à la valeur numérique d'une string
    Bonjour à tous,

    Petite question de noob.
    Le code suivant retourne dans l'objet "c" la valeur du paramètre obtenu par fitting. L'exemple proposé permet d'accerder à la valeur sous forme de string au format "[0.0]". Je souhaiterai savoir comment acceder directement à la valeur du paramètre du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double resultat = c.valeur_numerique;

    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
    #include <stdafx.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <interpolation.h>
     
    using namespace alglib;
    void function_cx_1_func(const real_1d_array &c, const real_1d_array &x, double &func, void *ptr) 
    {
        // this callback calculates f(c,x)=exp(-c0*sqr(x0))
        // where x is a position on X-axis and c is adjustable parameter
        func = exp(-c[0]*pow(x[0],2));
    }
     
    int main(int argc, char **argv)
    {
        //
        // In this example we demonstrate exponential fitting
        // by f(x) = exp(-c*x^2)
        // using function value only.
        //
        // Gradient is estimated using combination of numerical differences
        // and secant updates. diffstep variable stores differentiation step 
        // (we have to tell algorithm what step to use).
        //
        real_2d_array x = "[[-1],[-0.8],[-0.6],[-0.4],[-0.2],[0],[0.2],[0.4],[0.6],[0.8],[1.0]]";
        real_1d_array y = "[0.223130, 0.382893, 0.582748, 0.786628, 0.941765, 1.000000, 0.941765, 0.786628, 0.582748, 0.382893, 0.223130]";
        real_1d_array c = "[0.3]";
        double epsf = 0;
        double epsx = 0.000001;
        ae_int_t maxits = 0;
        ae_int_t info;
        lsfitstate state;
        lsfitreport rep;
        double diffstep = 0.0001;
     
        //
        // Fitting without weights
        //
        lsfitcreatef(x, y, c, diffstep, state);
        lsfitsetcond(state, epsf, epsx, maxits);
        lsfitfit(state, function_cx_1_func);
        lsfitresults(state, info, c, rep);
        printf("%d\n", int(info)); // EXPECTED: 2
        printf("%s\n", c.tostring(1).c_str()); // EXPECTED: [1.5]
     
        //
        // Fitting with weights
        // (you can change weights and see how it changes result)
        //
        real_1d_array w = "[1,1,1,1,1,1,1,1,1,1,1]";
        lsfitcreatewf(x, y, w, c, diffstep, state);
        lsfitsetcond(state, epsf, epsx, maxits);
        lsfitfit(state, function_cx_1_func);
        lsfitresults(state, info, c, rep);
        printf("%d\n", int(info)); // EXPECTED: 2
        printf("%s\n", c.tostring(1).c_str()); // EXPECTED: [1.5]
        return 0;
    }
    Merci pour votre aide

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne suis pas certain d'avoir tout compris. Mais peut ceci pourrait t'aider?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par r0d Voir le message
    Bonjour,

    je ne suis pas certain d'avoir tout compris. Mais peut ceci pourrait t'aider?
    Salut r0d,

    Merci pour ta réponse. En fait, je ne souhaite pas convertir (car c'est du coup ce que je fais en ce moment) mais directement accéder à la valeur numérique de l'object nommé "c" dans cet exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        lsfitresults(state, info, c, rep);
    Cette ligne renvoie les résultats des calculs précédents l'objet pris en paramètre. Travaillant en Cocoa et ayant intégré ce bout de code sous la forme d'objective-C++, je n'ai pas d'assez bonnes connaissances pour faire ce que je veux. Actuellement, je lis le résultat qui s'affiche sous la forme "[0.0]" et via des fonctions de cocoa, je lis chaque caractère, élimine les crochets et réccupère le num. C'est une méthode fastidieuse et peu élégante. Je préfèrerai pouvoir accéder directement à la valeur de c par une méthode du type
    double *resutat = &c;
    mais cela ne marche pas...

    Voila pour les explications, j'espère que c'est un peu plus clair

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Désolé je ne comprend toujours pas
    Enfin... tu ne peux pas passer d'une string à un double sans faire de conversion.
    Enfin je sais pas, je ne comprend pas (je ne suis pas en forme aujourd'hui). Je vais laisser d'autres intervenants intervenir
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par r0d Voir le message
    Désolé je ne comprend toujours pas
    Enfin... tu ne peux pas passer d'une string à un double sans faire de conversion.
    En fait, je ne sais pas si le contenu de c est une string, un double ou autre...
    Désolé mais comme je ne suis pas du tout dans le monde de l'info, je n'ai peut-être pas la bonne sémantique. Je programme sur le tas.
    Merci en tout cas pour ton aide

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    J'ai pas tout comprendu non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    real_1d_array c = "[0.3]";
    Il nous faudrait savoir ce qu'est real_1d_array.
    Ce code ne pourrait être accepté que s'il y a un operator& défini sur real_1d_array. De toute façon, une conversion doit avoir lieu quelque part, ceci "[0.3]" étant toujours une chaine de caractère pour le langage.
    Ou alors ceci pourrait faire l'affaire (?):

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello

    Il nous faut absolument la définition du type real_1d_array, on ne peut pas t'aider sans car ce n'est pas un type de la STD, il est spécifique à ton code et nous ne le connaissons pas.
    Find me on github

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/11/2009, 16h34
  2. Valeurs numériques dans une liste déroulante
    Par GunnyMiK dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/08/2008, 16h42
  3. sortir deux valeurs numériques d'une chaine de caractères
    Par Ness2000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2008, 08h52
  4. [Débutant] Validation d'une valeur numérique dans une variable String
    Par anto84 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 11/07/2007, 10h26
  5. Valeur numérique dans une zone de texte
    Par KEROZEN dans le forum IHM
    Réponses: 3
    Dernier message: 30/05/2006, 08h43

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