Algorithme_Racine_Carree

Résolu
Bonjour,

Je trouve des problémes pour faire un algorithme :

Ecrire un algorithme qui vérifie si X , un entier donné par l'utilisateur , est un carré , si oui retourne la valeur de l'entier dont il est le carré , sans passer par la racine carrée.


Exemple : X=9 , l'entier est 3


"sans passer par la racine carrée" je trouve que cette solution : X = x^(1/2) mais ça n'arrange pas les choses pour le traduire en algo.
Vous pensez quand peut faire mieu que ça?

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Je crois que parce que tu n'as pas donner une valeur initiale à "i" .

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

    int main()
    {
    int i=0,carre,nbr;
    printf("entrer un nbr");
    scanf("%d",&nbr);
    while(carre<nbr)
    {
    carre=i*i;
    if(carre==nbr)
    printf("la racine est %d",carre);
    else
    i++;

    return 0;
    }
    1. Algorithme_Carre
      Variables: i, carre, nbr;
      Debut
      Ecrire("Entrer un nombre :");
      Lire(nbr);
      Tant que (carre<nbr) faire 
        carre<-i*i;
        Si (carre=nbr) alors
           Ecrire("La racine carre est",carre);
        Sinon
           i<-i+1;
        FinSi
       FinTantque
      Fin
      1. ici de même tu as oublié d'initialiser i à 0 ;)
    2. on compare carre avec nbr .... mais ou est la valeur initiale de carre ????
      1. J'ai donner comme valeur initiale de carre = 0, et j'ai compiler le programme et ça donne
        X=9
        La racine carre est 9
        Il y a quelque chose qui cloche quelques part :s
        1. quel programme as-tu compilé exactement ? celui donné plus haut ne compile pas, il manque une accolade.
      2. Celui là :
        #include <stdio.h>
        #include <stdlib.h>

        int main()
        {
        int i=0,carre,nbr;
        printf("entrer un nbr");
        scanf("%d",&nbr);
        while(carre<nbr)
        {
        carre=i*i;
        if(carre==nbr)
        printf("la racine est %d",carre);
        else
        i++;

        return 0;
        }
        1. Bonjour
          printf("la racine est %d",carre);
          Et ça t'étonne que ça affiche le carré au lieu de la racine ?
          1. il faut afficher i pas le carre
        2. il faut faire plus simple et plus "naïf". Comment aurais-tu pu dire, depuis que tu as appris ce qu'est un carré, que 9 en est effectivement un ?

          Et bien tu fais simplement des essais :
          1 au carré -> 1 c'est pas 9
          2 -> 4 , c'est pas 9
          3 -> 9 , c'est 9 !!! Donc, oui, 9 est un carré et c'est le carré de 3.

          Autre exemple, avec 21.
          1 -> 1, c'est pas 21
          2 -> 4, c'est pas 21
          3 -> 9, c'est pas 21
          4-> 16, c'est pas 21
          5-> 25, c'est pas 21.
          En plus, avec 5 on a dépassé 21. On a aucune chance qu'un nombre plus grand au carré donne 21, on s'arrette là et on constate que 21 n'est pas un carré.

          Tu comprends ?
          1. #include <stdio.h>
            #include <stdlib.h>

            int main()
            {
            int i , carre,nbr;
            printf("entrer un nbr");
            scanf("%d",&nbr);
            while(carre<nbr)
            {
            carre=i*i;
            if(carre==nbr)
            printf("la racine est %d",carre);
            else
            i++;

            return 0;
            }

            je les compiler sans prob mais ça n'exécute pas !!!??? prq ?