bonsoir a tous,
j'ai ecris un programme qui calcule la racine carrée d'un nombre lu au clavier par
la methode de newton : (ak+1 =0.5*(ak+x/ak) <- la k ieme approximation de la
racine carrée de x (sachant que a0 = 1.0)
on arrete le calcul quand la difference entre ak+1 et ak est inferieure à epsilon fixé.
mon programme marche mais du moment ou je choisis de grands nombres l'approximation
n'est plus top
en plus je sais pas comment choisir le epsilon ( la condition du tant que : ak+1 - ak < epsilon)
voici mon programme :
WITH Ada.text_io;
WITH Ada.float_text_io;
USE Ada.text_io;
use Ada.float_text_io;
--spécification:
--R0: ecrire un programme qui calcule la racine carrée d'un nombre lu au clavier, par la méthode de Newton
--Tests: on testera le programme sur les valeurs suivantes: 4,9,16,0,34,13.9
--R1+Analyse informelle:
--1)demander a l'utilisateur de taper un nombre strictement positif
--2)lire le nombre pour lequel on souhaite calculer la racine
--3)calculer la racine en utilisant la methode de newton
--R2:
--1)je sais faire (on utilisera une boucle repeter jusqu'à pour imposer à l'utilisateur de taper un nombre strictement positif
--2)je sais faire
--3)on utilisera une boucle tant que car on ne sais pas si on doit executer l'instruction au moins une fois
PROCEDURE racine IS
--un programme qui calcule la racine carrée d'un nombre lu au clavier, par la méthode de Newton
--declarations des variables
x : FLOAT; --le nombre pour lequel on souhaite calculer la racine carrée
Un : FLOAT; --le terme courant de la suite qui permet d'approximer la racine carrée de x
n : INTEGER; --le rang courant de la suite de Newton
BEGIN
--demander a l'utilisateur de taper un nombre strictement positif
LOOP
PUT("veuillez taper un nombre strictement positif pour lequel vous souhaiter calculer la racine carrée : ");
GET(x);
EXIT WHEN (x>0.0);
END LOOP;
--x>0
--initialisation des variables
Un:=1.0;
n:=0;
--on fait le calcule pour simplifier Un+1 - Un comme ci-dessous en utilisant pour Un+1 la formule de newton
WHILE ((0.5*((x/Un)-Un))>0.00001) LOOP
Un:=0.5*(Un+x/Un);
n:=n+1;
END LOOP;
--(0.5*((x/Un)-Un))<0.00001
--afficher le resultat
PUT("la racine carrée de ");
PUT(x);
PUT(" est : ");
PUT(Un);
END racine;
merci enormement d'avance pour votre aide
-----