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 :

Programme racine carrée


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut Programme racine carrée
    Bonsoir,

    Sauriez-vous me dire pourquoi ce programme ne fonctionne pas?

    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
    #include<stdio.h>
    #include<stdlib.h>
     
    long double racine(long double x);
     
    main()
    {
       long double y,m;
       printf("x=");
       scanf("%lf",&y);
       printf("\aracine carree = %lf\n",racine(y));
       system("PAUSE");
       return 0;
    }
     
    long double racine(long double x)
    {
       long double n,a,b,eps;
       int Trouve=0;
       printf("eps=");
       scanf("%lf",&eps);
       if (x>=1)
       {
          a=1;
          b=x;
       }
       else
       {
          a=x;
          b=1;
       }
       do
       {
          n=(a+b)/2;
          if (n*n==x)
             Trouve=1;
          else if(n*n>x)
             b=n;
          else a=n;
       }
       while(Trouve==0 && (b-a)>eps );
     
       return n;
    }

  2. #2
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Bonjour,

    A vue de nez ca va bloquer la

    n et x sont des double. Il ne faut jamais tester l'egalite avec des nombres flottants a cause de l'imprecision de la machine. Ceci devrait marcher (incertitude a definir selon ce que tu veux):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (n*n - x =< incertitude)

  3. #3
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par yo_haha Voir le message
    Bonsoir,

    Sauriez-vous me dire pourquoi ce programme ne fonctionne pas?
    Il faudrait peut-être résoudre aussi ces warnings:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      === dummy, Debug === 
    C:\data\sources\C\dummy\main.c 7 warning: return type defaults to `int' 
    C:\data\sources\C\dummy\main.c  In function `main': 
    C:\data\sources\C\dummy\main.c 10 warning: double format, long double arg (arg 2) 
    C:\data\sources\C\dummy\main.c 11 warning: double format, long double arg (arg 2) 
    C:\data\sources\C\dummy\main.c 8 warning: unused variable `m' 
    C:\data\sources\C\dummy\main.c  In function `racine': 
    C:\data\sources\C\dummy\main.c 20 warning: double format, long double arg (arg 2) 
      === Build finished: 0 errors, 5 warnings ===
    A+

    Pfeuh

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonsoir,

    Pour entrer un long double, il faut utliser "%Lf" ou "%llf" (voir pages man).

    Il serait aussi intéressant de vérifier que l'utilisateur n'a pas rentré de valeurs aberrantes (0 ou valeurs négatives).

    Sinon, le programme a l'air de fonctionner (une fois les warning corrigés) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >./a.out 
    x=15
    (x)=15.000000
    eps=.1
    (eps)=0.100000
    racine carree = 3.898438
    sh: line 1: PAUSE: command not found

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Merci pour vos réponses.

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par yo_haha Voir le message
    Merci pour vos réponses.
    Peux tu nous poster le code final ?

    Merci.

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Le voilà!!!
    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
    #include<stdio.h>
    #include<stdlib.h>
     
    double racine(float x);
     
    main()
    {
    float y;
    printf("x=");
    scanf("%f",&y);
    printf("\aracine carree = %f\n",racine(y));
    system("PAUSE");
    return 0;
    }
    double racine(float x)
    {
    float a, b, n, eps;
    printf("eps=");
    scanf("%f",&eps);
    if (x>1)
    {
    a=1;
    b=x;
    }
    else
    {
    a=x;
    b=1;
    }
    n=(float)(a+b)/2;
    while (n*n!=x && (b-a)>eps )
    {
    if (n*n<x)
    a=n;
    else
    b=n;
    n=(float)(a+b)/2;
    }
    return n;
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Par défaut
    Pardon j'ai testé ce programme et je ne vois pas à quoi correspond eps
    merci.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    Pardon j'ai testé ce programme et je ne vois pas à quoi correspond eps
    merci.
    epsilon (une toute petite valeur)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    eps est la précision de la solution (la racine du nombre entré). Si la racine est réelle mais n'est pas entière, je dois préciser à la machine à quel point elle doit arrêter la recherche de la racine sinon elle recherchera infiniment la racine. Ainsi, elle me renvoie la racine du nombre que j'ai entré une fois que la longeur b-a de l'intervalle [a, b] qui contient cette racine est inférieure à eps. La racine renvoyé sera donc, le milieu de cet intervalle (ce n'est pas la racine exacte mais c'est une valeur approchée à eps près).
    La racine est plus exacte si eps est très petite.
    Pour plus d'information, se renseigner sur la recherche dichotomique d'une racine carrée.
    J'espère avoir été clair et compréhensible.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programme qui calcule la racine carré
    Par l1informatique dans le forum Calcul scientifique
    Réponses: 6
    Dernier message: 01/03/2014, 16h35
  2. Programme de calcul de racine carrée entière par défaut.
    Par Temari8 dans le forum Général Python
    Réponses: 2
    Dernier message: 07/12/2013, 19h14
  3. Utilisation de la fonction racine carré
    Par derf_r dans le forum Access
    Réponses: 3
    Dernier message: 23/11/2005, 16h30
  4. [Astuce] Approximation de racines carrées
    Par Smortex dans le forum Assembleur
    Réponses: 16
    Dernier message: 18/05/2004, 06h17
  5. Racine carrée
    Par SteelBox dans le forum Mathématiques
    Réponses: 5
    Dernier message: 23/11/2002, 17h15

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