Programmation avec méthode dichotomie
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Programmation avec méthode dichotomie



  1. #1
    invitebceb089b

    Programmation avec méthode dichotomie


    ------

    Bonjour

    j'ai programmé ce programme en c qui applique la méthode de dichotomie a ma fonction " fpro" mais la mais j'ai un probléme dans mon programme !! il y a une seule itération et le programme s’arrête !!
    ou est l'erreur svp ? et merci d'avance

    Code:
    #include<stdlib.h>
    #include<stdio.h>
    #include<math.h>
    #define PI acos(-1.)
    #define HBAR 1.05360572e-34
    #define M 9.e-31
    #define K0 1.61e+10
    #define A 10.e-10
    #define EPS 1.e-10
    #define N_MAX 50
    #define NPAS 10
    
    double fp(double zm);
    double fpz(double z1);
    int main()
    {
              
       double z1,z2,zm,fpro,fz1,v,fpz1,k;
       printf("donner la valeur de z1\t");
       scanf("%lf",&z1);
          FILE *fichier;
          fichier=fopen("figure2.dat","w");    
       printf("donner la valeur de z2\t");
       scanf("%lf",&z2);     
              
        while ( fabs(z1-z2)> EPS)
        {
           
           zm = (z1+z2) / 2. ;
           v=fp(zm);
           k=fpz(z1);   
           if (fpro==0) break; //zero trouvé
           if (fpro*fz1 < 0)
            {
               z2=zm;
           
            }
        
          else 
            {
               z1=zm;
            }
        
          
        } 
        fprintf(fichier,"%lf \t %lf \n",zm,v);
        fclose(fichier);
        system("pause");
        return 0;        
    }
    
        
    double fp(double zm)
           {
              double fpro;
              fpro=tan(zm/2.)-sqrt((K0*A/zm)*(K0*A/zm)-1.);
              return (fpro);
            
              
          }
          
    double fpz(double z1)
           {
              double fz1;
              fz1=tan(z1/2.)-sqrt((K0*A/z1)*(K0*A/z1)-1.);
              return (fz1);
            
              
          }

    -----

  2. #2
    invite1445654e

    Re : Pogrammation avec methode dichotomie

    C'est logique puisque tu valorises jamais fpro dans ton main
    donc au moment de la declaration il vaut 0
    tu fais bien une seule boucle
    revois ton algorithme
    tu peux utiliser aussi un debugger pour faire du pas a pas

  3. #3
    Tryph

    Re : Pogrammation avec methode dichotomie

    Salut,

    franchement, le choix des noms de variables, de constantes et de fonctions est assez horrible et le résultat donne un code qu'on rechigne vraiment à lire et à essayer de comprendre.

    donc quelques conseils pour obtenir de l'aide:
    - réécris ton programme avec des noms de variables, de constantes et de fonctions qui veulent dire quelque chose pour le commun des mortels
    - donne nous un peu plus d'explications détaillées sur ce qu'est censé faire ton programme.

    ceci dit j'ai l'impression que tu devrais regarder le chapitre sur la portée des variables...

    a+
    Dernière modification par Tryph ; 15/11/2011 à 09h25.

  4. #4
    invite2d7144a7

    Re : Pogrammation avec methode dichotomie

    Bonjour,

    +1

    De plus :
    Code:
    #define PI acos(-1.)
    est une aberration : appeler une fonction relativement lente pour avoir PI chaque fois qu'on en a besoin, alors qu'on connaît parfaitement sa valeur (dans les limites de la précision nécessaire - et même beaucoup plus).

  5. A voir en vidéo sur Futura
  6. #5
    Chanur

    Re : Pogrammation avec methode dichotomie

    Bonjour,
    La plupart des compilateurs sont capables (en réglant correctement le niveau de warning) de te signaler par un message que tu testes une variables non initialisée :
    Code:
    if (fpro==0) break; //zero trouvé
    De la même façon,
    Code:
    if (fpro*fz1 < 0)
    teste le produit de deux variables non initialisées.
    Par contre, tu n'utilises jamais les valeurs v et k que tu as calculées.

    D'accord avec Tryph : revois la portée des variables : la variable fpro de la fonction main() n'a aucun lien avec la variable fpro de la fonction fp().
    Idem pour fz1
    @+
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. programmation méthode des rectangles à gauche
    Par inviteacb50258 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 30/10/2010, 16h41
  2. Méthode de la dichotomie
    Par invite3c33d024 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 25/05/2008, 21h02
  3. Méthode de Newton et dichotomie
    Par invite3c33d024 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 24/05/2008, 13h21
  4. programmation methode cardan
    Par invite97a5ec11 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 23/08/2007, 11h10