Tester l'algorithme :
Code de l'algorithme :
VARIABLES
x EST_DU_TYPE NOMBRE
n EST_DU_TYPE NOMBRE
tranche_de_gauche EST_DU_TYPE NOMBRE
temp EST_DU_TYPE NOMBRE
tranches_de_gauche EST_DU_TYPE LISTE
tranches_de_droite EST_DU_TYPE LISTE
i EST_DU_TYPE NOMBRE
temp2 EST_DU_TYPE NOMBRE
NbTranchesGauche EST_DU_TYPE NOMBRE
NbTranchesDroite EST_DU_TYPE NOMBRE
ImpairCourant EST_DU_TYPE NOMBRE
NombreCourant EST_DU_TYPE NOMBRE
Racine EST_DU_TYPE NOMBRE
Trace EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
AFFICHER "De quel nombre dois-je calculer la racine ? "
LIRE x
AFFICHER "Avec combien de chiffre après la virgule ? "
LIRE n
AFFICHER "Voulez-vous une trace du travail ? \n 0 signifie non"
LIRE Trace
SI (Trace != 0) ALORS
DEBUT_SI
Trace PREND_LA_VALEUR 1
FIN_SI
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER "Je sépare la partie entière :"
temp PREND_LA_VALEUR floor(x)
AFFICHER temp
AFFICHER "De la partie fractionnaire : "
temp PREND_LA_VALEUR x - temp
AFFICHER temp
FIN_SI
temp PREND_LA_VALEUR floor(x)
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER "Je sépare les tranches de gauche (partie entière)"
FIN_SI
NbTranchesGauche PREND_LA_VALEUR 0
TANT_QUE (temp > 0 ) FAIRE
DEBUT_TANT_QUE
temp2 PREND_LA_VALEUR temp
temp PREND_LA_VALEUR floor(temp / 100)
tranches_de_gauche[NbTranchesGauche] PREND_LA_VALEUR temp2 - temp * 100
NbTranchesGauche PREND_LA_VALEUR NbTranchesGauche + 1
FIN_TANT_QUE
NbTranchesGauche PREND_LA_VALEUR NbTranchesGauche - 1
SI (Trace == 1) ALORS
DEBUT_SI
i PREND_LA_VALEUR NbTranchesGauche
AFFICHER "Les tranches de gauches :"
TANT_QUE (i >= 0 ) FAIRE
DEBUT_TANT_QUE
AFFICHER tranches_de_gauche[i]
i PREND_LA_VALEUR i - 1
FIN_TANT_QUE
FIN_SI
temp PREND_LA_VALEUR x - floor(x)
NbTranchesDroite PREND_LA_VALEUR 0
TANT_QUE (temp > 0) FAIRE
DEBUT_TANT_QUE
temp2 PREND_LA_VALEUR floor(temp * 100)
temp PREND_LA_VALEUR temp * 100 - temp2
tranches_de_droite[NbTranchesDroite] PREND_LA_VALEUR temp2
NbTranchesDroite PREND_LA_VALEUR NbTranchesDroite + 1
FIN_TANT_QUE
NbTranchesDroite PREND_LA_VALEUR NbTranchesDroite - 1
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER "Les tranches de droites :"
i PREND_LA_VALEUR 0
TANT_QUE (i <= NbTranchesDroite) FAIRE
DEBUT_TANT_QUE
AFFICHER tranches_de_droite[i]
i PREND_LA_VALEUR i + 1
FIN_TANT_QUE
FIN_SI
NombreCourant PREND_LA_VALEUR 0
Racine PREND_LA_VALEUR 0
ImpairCourant PREND_LA_VALEUR 1
TANT_QUE (NbTranchesGauche >= 0 ) FAIRE
DEBUT_TANT_QUE
temp PREND_LA_VALEUR 0
NombreCourant PREND_LA_VALEUR NombreCourant * 100 + tranches_de_gauche[NbTranchesGauche]
TANT_QUE (NombreCourant >= ImpairCourant) FAIRE
DEBUT_TANT_QUE
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER NombreCourant
AFFICHER " - "
AFFICHER ImpairCourant
AFFICHER " = "
FIN_SI
NombreCourant PREND_LA_VALEUR NombreCourant - ImpairCourant
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER NombreCourant
FIN_SI
ImpairCourant PREND_LA_VALEUR ImpairCourant + 2
temp PREND_LA_VALEUR temp + 1
FIN_TANT_QUE
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER temp
AFFICHER " soustraction(s)"
FIN_SI
Racine PREND_LA_VALEUR Racine * 10 + temp
ImpairCourant PREND_LA_VALEUR (ImpairCourant - 1) * 10 + 1
NbTranchesGauche PREND_LA_VALEUR NbTranchesGauche - 1
FIN_TANT_QUE
i PREND_LA_VALEUR 0
TANT_QUE (i <= NbTranchesDroite) FAIRE
DEBUT_TANT_QUE
temp PREND_LA_VALEUR 0
NombreCourant PREND_LA_VALEUR NombreCourant * 100 + tranches_de_droite[i]
TANT_QUE (NombreCourant >= ImpairCourant) FAIRE
DEBUT_TANT_QUE
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER NombreCourant
AFFICHER " - "
AFFICHER ImpairCourant
AFFICHER " = "
FIN_SI
NombreCourant PREND_LA_VALEUR NombreCourant - ImpairCourant
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER NombreCourant
FIN_SI
ImpairCourant PREND_LA_VALEUR ImpairCourant + 2
temp PREND_LA_VALEUR temp + 1
FIN_TANT_QUE
SI (Trace == 1) ALORS
DEBUT_SI
AFFICHER temp
AFFICHER " soustraction(s)"
FIN_SI
Racine PREND_LA_VALEUR Racine * 10 + temp
ImpairCourant PREND_LA_VALEUR (ImpairCourant - 1) * 10 + 1
i PREND_LA_VALEUR i + 1
FIN_TANT_QUE
Racine PREND_LA_VALEUR Racine / (pow(10, NbTranchesDroite + 1))
AFFICHER "Racine carrée de "
AFFICHER x
AFFICHER " = "
AFFICHER Racine
FIN_ALGORITHME