Forum Programmation.c Code pour calculer une approximation d'une racine carrée

Posté par . Licence CC by-sa.
Tags : aucun
1
12
fév.
2019

Bonjour à tous,

Je dois réaliser le programme suivant:

"Calculez la racine carrée r d'un nombre réel positif n par approximations successives en utilisant la relation de récurrence suivante:

r1 = n
rj+1=(rj+ n/rj) / 2
où j représente la précision du calcul et est définie dans une variable de même nom et de type entier en début de programme (avec n)
Assurez-vous, avant d'effectuer les calculs, que la valeur de n est bien positive et que j est supérieur à 1 mais plus petit que 50."

Et je dois compléter ce code:

"#include

include

ifndef N

#define N 5

endif

ifndef J

#define J 3

endif

int main(void){
double n = N;
int j = J; "

J'avoue être un peu perdu, notamment je me demande pourquoi au début, n vaut N et j vaut J ?
Quel est l'intêret ?

Merci d'avance,

  • # Méthode de Héron

    Posté par . Évalué à 2. Dernière modification le 12/02/19 à 16:21.

    Wikipedia est ton ami
    Le nombre de départ n'a pas d'impact sur la valeur finale de la suite (mise à part que si tu le choisi bien tu pourras limiter le nombre d'itérations) d'où la valeur de N

    Pour J, c'est juste le nombre d'itération que ton programme est censé faire, il faudra demander à ton prof.

    Edit: Wikipedia indique aussi pourquoi J=3

  • # Tu peux y arriver.

    Posté par . Évalué à 3.

    Si j’ai bien suivi, voici ton source de départ

    #include <stdio.h>
    
    #ifndef N
    
    #define N 5
    
    #endif
    
    #ifndef J
    
    #define J 3
    
    #endif
    
    int main(void){
      double n = N;
      int j = J;
    
      /* Écrire ton programme ici */
    
      return 0;
    }

    Qu’est-ce que tu attends de nous, si c’est de t’écrire le programme, je ne le ferai pas. Ça va me prendre 2 minutes, et ne te servir à rien.

    Je préfère y passer plus de temps et répondre à de vrai interrogation pour t’aider à avancer avec ton propre cerveau qui est surement capable de résoudre ce problème.

    Sur ta première question, tu peux voir les #define comme de la définition de constante, donc double n = N <=> double n = 5.

    • [^] # Re: Tu peux y arriver.

      Posté par . Évalué à 1. Dernière modification le 13/02/19 à 11:31.

      Merci de ta réponse.

      Effectivement, ma question était peu claire, et bien sûr, je veux y arriver par moi même.

      Pour les #define, ça parait bête maintenant que tu me l'as dit, merci.

      J'ai pas mal avancé, les résultats sont corrects d'après le compilateur.

      Cependant, j'ai bricolé quelques élèments de mon code et je doute un peu… J'ai du rajouter le texte en gras( printf("At least one of the parameter is wrong!\n");
      ) pour afficher le fait que la première racine du nombre n est n… Est-ce correct ?
      Puis-je y arriver différemment ?

      Merci beaucoup à vous

      #include <stdio.h>
      #include <stdlib.h>  
      
      #ifndef N
          #define N 5
      #endif
      #ifndef J
          #define J 3
      #endif
      
      int main(void){
        double n = N;
        int j = J;
        float t=n;
      
      if (n<0 || j<1 || j>50){ 
          printf("At least one of the parameter is wrong!\n");
      }
      
      
      
      if (n>0 && j>1 && j<50) {
      **  printf("Approximation 1 of square root of %f is %f\n",n,n);
      **
          for(j=2;j<=J;j=j+1){
      
              t=(t+(n/t))/2;
      
              printf("Approximation %d of square root of %f is %f\n",j,n,t);
          }
      }
        return EXIT_SUCCESS;
      }
      class Ruby
      end
      • [^] # Re: Tu peux y arriver.

        Posté par . Évalué à 2. Dernière modification le 13/02/19 à 14:55.

        En ajoutant le calcul réel de la racine carré :

        $ ./a.out
        Approximation 1 of square root of 5.000000 is 5.000000
        Approximation 2 of square root of 5.000000 is 3.000000
        Approximation 3 of square root of 5.000000 is 2.333333
        Approximation 4 of square root of 5.000000 is 2.238095
        Approximation 5 of square root of 5.000000 is 2.236069
        Approximation 6 of square root of 5.000000 is 2.236068
        Approximation 7 of square root of 5.000000 is 2.236068
        Approximation 8 of square root of 5.000000 is 2.236068
        Approximation 9 of square root of 5.000000 is 2.236068
        Approximation 10 of square root of 5.000000 is 2.236068
        sqrt(5.000000) = 2.236068
        $

        Ton calcul semble correct. Le seul truc que je n’aime pas c’est ton if (condition1) puis if (!condition1)
        Pourquoi ne pas utiliser if … else ? De plus, tu ne choisi pas ce que tu fais pour n == 0.

        Pour ta question, oui tu pourrais y arriver différemment… en récursif par exemple. Mais en C, dans ce cas, je pense la solution itérative plus pertinente.

  • # merci

    Posté par . Évalué à 1.

    Merci de vos réponses, j'ai réussi à résoudre le soucis :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.