IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

[C] Erreur dans l'execution: interpolation de Newton


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut [C] Erreur dans l'execution: interpolation de Newton
    Bonjour tout le monde,
    J'ai essayé de faire un petit programme en langage C, calculant les coefficients qui nous permettent d'avoir une fonction avec l'interpolation de newton, mais ça n'a pas marché.
    Ci-dessous le code du programme, et je ne sais pas ou est l'erreur.
    J'obtiens comme résultat ce qui suit: A[1]=29817731, A[2]=0, et ce n'est pas le résultat que je devrai avoir

    Merci d'avance pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <stdio.h>
     
    void newton(int n)
    {
           int i,j;
         double X[20];
          double Y[20]; 
     
            float F[n][n];
            float A[20];
    for(i=1;i<n;i++)
    {                  
      F[i][0]=Y[i];
      }
     
     
              for(i=1;i<n;i++)
              {                   
                     for(j=1;j<i;j++)
                                     {
                                            F[i][j]=(F[i][j-1]-F[i-1][j-1])/(X[i]-X[i-j]);
     
                                     }
              }
     
     
     
              for(i=1;i<n;i++)
              {
                              A[i]=F[n][i]; 
                             }
     
     
                     for(i=1;i<n;i++)
              {
     
                       printf("A[%d]=%d \n" , i,A[i]);                      
    }
    }
     
     
     
    int main() {
                int i,n,j;        
     float F[20][20];
     double X[20];
      double Y[20];
     
     
     printf("donner le degre du polynome \n");
     scanf("%d",&n);
     
     
     
     for(j=1;j<=n;j++)
    {
    printf("element X[%d]= ",j);
    scanf("%d",&X[j]);
    }
     
     
     
    for(i=1;i<=n;i++)
    {
    printf("element Y[%d]= ",i);
    scanf("%d",&Y[i]);
    }
     
     
     
    newton(n);
     
     system("pause");
     return 0;
     
     
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Les fonctions main et newton travaillent sur deux tableaux différents : Dans newton, X et Y valent ne sont pas initialisé.

    Il faudrait ajouter en paramètre de la fonction newton les tableaux X et Y.

    EDIT :
    Il faut aussi faire attention à l'utilisation de scanf; et ne pas ignorer les warnings du compilateur

    PS : merci de penser aux balises code (#)
    Dernière modification par Invité(e) ; 17/08/2009 à 11h34.

  3. #3
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,

    Les fonctions main et newton travaillent sur deux tableaux différents : Dans newton, X et Y valent ne sont pas initialisé.

    Il faudrait ajouter en paramètre de la fonction newton les tableaux X et Y.

    EDIT :
    Il faut aussi faire attention à l'utilisation de scanf; et ne pas ignorer les warnings du compilateur

    PS : merci de penser aux balises code (#)
    Je les ai ajouter, et j'ai toujours le même problème.

    Voici ma nouvelle fonction newton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    void newton(int n, float X[], float Y[])
    {
           int i,j;
     
     
            float F[30][30];
            float A[30];
            float k;
            float v;
     
     
    for(i=1;i<n;i++)
                    {              
                     F[i][0]=Y[i];
                     }
     
     
              for(i=1;i<n;i++)
              {                   
                     for(j=1;j<i;j++)
                                     {
                                            k=F[i][j-1]-F[i-1][j-1];
                                            v=X[i]-X[i-j];
                 F[i][j]=k/v;
     
                                     }                              
              }
     
              for(i=1;i<n;i++)
              {
                              A[i]=F[n][i]; 
               }
     
     
                     for(i=1;i<n;i++)
              {
     
                       printf("A[%d]=%d \n" , i,A[i]);                      
    }
    }

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par nailita Voir le message
    Je les ai ajouter, et j'ai toujours le même problème.

    Voici ma nouvelle fonction newton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for(i=1;i<n;i++)
    {                   
        for(j=1;j<i;j++)
        {
            k=F[i][j-1]-F[i-1][j-1];
            v=X[i]-X[i-j];
            F[i][j]=k/v;
        }                              
    }
     
    for(i=1;i<n;i++)
    {
        A[i]=F[n][i]; 
    }
    Dans la première boucle for, i va de 1 à n-1 pour assigner F[i][...]
    Dans la dernière, tu utilises les valeurs de F[n][...], or F[n][...] ne sont jamais assignées (tu t'arrêtes à n-1).

    Aussi, F[0][0] n'est jamais assigné, or il est utilisé (dans le premier calcul de k).

Discussions similaires

  1. [OCI] une erreur dans l'execution pour cette requete SQL
    Par Abdelkaoui dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 14/09/2007, 12h29
  2. erreur dans l'execution de procedure
    Par obydissonn dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/06/2007, 10h47
  3. erreur dans l'exécution de la requête
    Par robert_trudel dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/11/2006, 23h57
  4. erreur dans l'execution
    Par debutant-1 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 18/08/2006, 12h39
  5. erreur dans l'execution d'une requete
    Par marsupilami34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/09/2005, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo