Problème en C : Extraction de racine carrée

Fermé
djee - Modifié par djee le 7/11/2010 à 12:55
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 nov. 2010 à 14:16
Bonjour,

J'essaye de programmer un programme semblable à la fonction sqrt de la bibliothèque math, qui s'arrête au nombre de décimales souhaitées.
Seulement voilà, à chaque essai, en changeant aussi bien le nombre voulu que celui de décimales, le programme me renvoi comme valeur 0, et je n'arrive pas à trouver d'où le problème vient.

Voilà le code :

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

double tentative = 0, tentativeCarre = 0, ajout = 0, ajoutAjout = 0; 
double puissanceDix = 0; 

double extraction(double nombreRacineVoulue, double nombrePuissance) 
{ 
    { 

    while(puissanceDix != -nombrePuissance) 
        { 

            while(tentativeCarre < nombreRacineVoulue) 
                { 

            ajoutAjout++; 
            ajout = ajoutAjout * pow(10, puissanceDix); 
            tentative = ajout + tentative; 
            tentativeCarre = tentative * tentative; 

                } 

                tentative = tentative - ajout; 
                puissanceDix--; 

        } 
    } 

    return tentative; 

} 

double nombreRacineVoulue = 0, resultat = 0; 
double nombrePuissance = 0; 

int main() 
{ 

    printf("=== EXTRACTION DE RACINE PAR ALGORITHME ==="); 
    printf("\n\nEntrez le nombre dont vous desirez la racine : "); 
        scanf("%lf", &nombreRacineVoulue); 
    printf("Entrer le nombre de decimales : "); 
        scanf("%lf", &nombrePuissance); 
    resultat = extraction(nombreRacineVoulue, nombrePuissance); 
    printf("\nLe resultat est : %f\n", &resultat); 

} 




Merci d'avance.

1 réponse

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
7 nov. 2010 à 13:12
N'ayant pas détaillé tout le code, je ne sais si ma réponse sera satisfaisante, mais il est certain que la ligne
printf("\nLe resultat est : %f\n", &resultat);
ne peut que donner un mauvais résultat (d'ailleurs le compilateur doit râler!). Il faut écrire:
printf("\nLe resultat est : %lf\n", resultat);

Bonne continuation.
0
Pourtant, sur le tutoriel du site du zéro,

"Je vous parlerai des autres symboles en temps voulu. Pour le moment, sachez que si vous voulez afficher un int vous devez utiliser %d, et pour un double vous utiliserez %f."

Source : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14118-un-monde-de-variables à la section "Afficher le contenu d'une variable".
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
7 nov. 2010 à 13:38
Oh oui, c'est exact, car le printf peut s'adapter car il connait le type de variable, '%f' est donc suffisant... mais, dans ton code' le plus gênant est '&' car dans le printf il faut passer la valeur de la variable, alors que dans le scanf, on passe l'adresse de la variable (raison pour laquelle il est alors nécessaire de préciser le type précis de la variable).
Mille excuses.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
7 nov. 2010 à 14:16
Juste un apport de précision :
car il connait le type de variable, '%f' est donc suffisant
Il est suffisant et même nécessaire. Pas de %lf dans un printf.
En fait dans le printf les float seront promues en double implicitement, donc pour les deux cas, on met %lf.
Cdlt,
0