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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    .

+ 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