Tester l'algorithme :


(cliquer sur le bouton ci-dessus pour lancer ou relancer l'exécution de l'algorithme)

Remarque : Cette version est provisoire. Les noms des variables ne sont pas assez clairs et l'algo peut être améliorer.

But de l'exercice : On donne l'algo et le texte d'accompagnement. L'exercice consiste à compléter l'algo pour que le calcul de la racine soit poursuivi avec une précision donnée (n dans l'algo).  On peut me contacter dhenin@dhenin.fr.

Résultat :

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