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 :

Fonction minimum qui ne marche pas je ne sais pourquoi


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut Fonction minimum qui ne marche pas je ne sais pourquoi
    Bonjour à tous,
    j'ai un programme en C (que le professeur australien Brent Richard m'a envoyée), qui a pour but de trouver le minimum d'une fonction mathématique, seul problème, je ne connais pas vraiment ce langage.
    A la compilation on me renvoie des messages d'erreur mais je ne sais pas comment y remédier, j'ai rajouté la fonction main mais toujours des messages que je ne comprends pas, je vous envoie le fichier source en pièce jointe, en espérant que quelqu'un qui s'y connait prenne le temps de le compiler et m'expliquer ce qui se passe, car j'ai vraiment besoin de ce programme et je suis perdue
    pouvez-vous le tester pour moi s'il vous plait? et me dire quelles sont les corrections à apporter?
    je vous en remercie d'avance

    P.S. j'ai fait un screenshot, que vous trouverez dans le fichier Erreur.jpg
    merci de bien vouloir me répondre (favorablement j'espère )
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ohlala la syntaxe K&R, doit pas être tout jeune ce programme.

    Y'a même l'utilisation de register .

    Bon passé tout ça, ben SQRT_EPSILON je connais po.

    Par contre je connais FLT_EPSILON mais alors je sais pas si c'est par ça qu'il faut remplacer.

    Roh même google francais connait pas SQRT_EPSILON. Bizarre.

    Bon en commentaire y'a écrit : /* Actual tolerance */

    Donc tout se prete à penser qu'il faudrait remplacer par FLT_EPSILON.

    Essaye pour voir.

    N'oublies pas de linker avec la bibliothèque mathématique.
    Dans Dev-cpp rajoute cette ligne dans les options de link de ton projet : -lmath

    Bon cpa tout mais je vais ptet aller me coucher moi...

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    Merci pour ton message, mais je n'ai pas compris grand chose à ce que tu m'as dit
    je dois faire quoi?
    j'ai d'autres programmes (3), et aucun ne marche, je suis dans la galère
    j'ai besoin de votre aide si vous pouvez
    je ne souhaite faire marcher qu'un seul des 4 programmes.
    il y a le screenshot portant le même nom des fichiers source.
    Merci encore
    j'attends votre réponse avec impatience
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Ce code compile sans erreur, je n'ai pas touché à l'algo. A toi de le tester pour savoir s'il fait le job que tu attends de lui.

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    #include <assert.h>
    #include <math.h>
    #include <float.h>
     
    /**
     * Estimates the min location.
     *
     * @param a left border | of the range
     * @param b right border | the min is seeked
     * @param f function under investigation
     * @param tol acceptable tolerance
     */
    double fminbr(double a, double b, double (*f)(double x), double tol)
    {
        double x, v, w;         /* Abscissae, descr. see above	*/
        double fx;				/* f(x)				*/
        double fv;				/* f(v)				*/
        double fw;				/* f(w)				*/
        const double r = (3. - sqrt(5.0)) / 2;	/* Gold section ratio		*/
     
        assert( tol > 0 && b > a );
     
        v = a + r * (b - a);
        fv = f(v);       /* First step - always gold section*/
        x = v;
        w = v;
        fx = fv;
        fw = fv;
     
        for (;;)		/* Main iteration loop	*/
        {
            double range = b - a;			/* Range over which the minimum */
            /* is seeked for		*/
            double middle_range = (a + b) / 2;
            double tol_act = FLT_EPSILON*fabs(x) + tol/3; /* Actual tolerance */
            double new_step;      		/* Step at this iteration       */
     
     
     
            if ( fabs(x - middle_range) + range / 2 <= 2 * tol_act )
            {
                return x;				/* Acceptable approx. is found	*/
            }
     
            /* Obtain the gold section step	*/
            new_step = r * ( x < middle_range ? b - x : a - x );
     
     
            /* Decide if the interpolation can be tried	*/
            if ( fabs(x - w) >= tol_act  )		/* If x and w are distinct      */
            {
                /* interpolatiom may be tried	*/
                double p; 		/* Interpolation step is calcula-*/
                double q;              /* ted as p/q; division operation*/
                /* is delayed until last moment	*/
                double t;
     
                t = (x-w) * (fx-fv);
                q = (x-v) * (fx-fw);
                p = (x-v)*q - (x-w)*t;
                q = 2*(q-t);
     
                if ( q>(double)0 )		/* q was calculated with the op-*/
                {
                    p = -p;			/* posite sign; make q positive	*/
                }
                else				/* and assign possible minus to	*/
                {
                    q = -q;			/* p				*/
                }
     
                if ( fabs(p) < fabs(new_step*q) &&	/* If x+p/q falls in [a,b]*/
                        p > q*(a-x+2*tol_act) &&		/* not too close to a and */
                        p < q*(b-x-2*tol_act)  )            /* b, and isn't too large */
                {
                    new_step = p/q;			/* it is accepted         */
                }
                /* If p/q is too large then the	*/
                /* gold section procedure can 	*/
                /* reduce [a,b] range to more	*/
                /* extent			*/
            }
     
            if ( fabs(new_step) < tol_act )	/* Adjust the step to be not less*/
            {
                if ( new_step > (double)0 )	/* than tolerance		*/
                {
                    new_step = tol_act;
                }
                else
                {
                    new_step = -tol_act;
                }
            }
     
            /* Obtain the next approximation to min	*/
            {
                /* and reduce the enveloping range	*/
                double t = x + new_step;	/* Tentative point for the min	*/
                double ft = (*f)(t);
                if ( ft <= fx )
                {
                    /* t is a better approximation	*/
                    if ( t < x )			/* Reduce the range so that	*/
                    {
                        b = x;                        /* t would fall within it	*/
                    }
                    else
                    {
                        a = x;
                    }
     
                    v = w;
                    w = x;
                    x = t;		/* Assign the best approx to x	*/
                    fv=fw;
                    fw=fx;
                    fx=ft;
                }
                else                              /* x remains the better approx  */
                {
                    if ( t < x )			/* Reduce the range enclosing x	*/
                    {
                        a = t;
                    }
                    else
                    {
                        b = t;
                    }
     
                    if ( ft <= fw || w==x )
                    {
                        v = w;
                        w = t;
                        fv=fw;
                        fw=ft;
                    }
                    else if ( ft<=fv || v==x || v==w )
                    {
                        v = t;
                        fv=ft;
                    }
                }
            }			/* ----- end-of-block ----- */
        }		/* ===== End of loop ===== */
    }
    Thierry

    P.S. C'est possible d'écrire du code scientifique lisible.
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    Merci de l'avoir testé monsieur Thierry.
    Moi il m'affiche ce message d'erreur:
    Images attachées Images attachées  

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Compile ton programme en mode console et pas en mode appli windows.

Discussions similaires

  1. fonction javascript qui ne marche pas
    Par roy-mustang dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/03/2009, 17h05
  2. Fonction simple qui ne marche pas
    Par Emotion dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/03/2009, 06h17
  3. [MySQL] fonction delete qui ne marche pas
    Par bassiste dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 10/05/2008, 00h58
  4. VBA Access : Fonction find qui ne marche pas
    Par leeloo35 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/02/2008, 16h56
  5. requete SQl avec la fonction max () qui ne marche pas
    Par eclipse012 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 14h32

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