Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Besoin d'aide en programmation C++



  1. #1
    yassinefugi

    Besoin d'aide en programmation C++


    ------

    Bonjour tous le monde;

    j'essaye de faire un programme mathématique en langage C++ qui sert à résoudre les équations différentielles , mais j'ai rencontré une erreur à la fin de programme que je n'arrive pas à la comprendre :
    Le programme est le suivant:
    Code:
    #include<iostream.h>
    #include<conio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<excpt.h>
    double f(double x,double y)
    {return y-(x*x)+1;}
    void rk2(double a, double b,double h, double y0, double rk2out[])
    {
    int N=(int)abs((b-a)/h);
    double y=y0;
    double x=a;
    double k1;
    for(int i=0;i<=N;i++)
    {rk2out[i]=y;
    k1=h*f(x,y);
    y=y+h*f(x+(h/2.0),y+(k1/2.0));
    x=x+h;
    }
    }
    int main()
    {
    double a=0.0;
    double b=3.0;
    double h=0.05;
    double y0=0.5;
    int N =(int)abs((b-a)/h);
    double rk2out[N];
    rk2(a,b,h,y0,rk2out);
    return 0;}
    sur la ligne gras et en rouge l'erreur est :
    " constant expression required in function main() "

    Merci d'avance

    -----
    Dernière modification par yoda1234 ; 16/05/2009 à 07h52.

  2. #2
    ProgVal

    Re : Besoin d'aide en programmation C++

    Bonjour,

    On ne peut pas définir le nombre d'éléments d'un tableau en fonction d'une variable qui n'est paq une constante définie par le préprocesseur.
    Le seul moyen pour toi est de passer en C++ et d'utiliser la classe Vector.
    EDIT: remarque, tu peux définir a, b, h, y et N comme des constantes préprocesseurs, si elles ne sont pas amenées à changer.

    Cordialement,
    ProgVal

  3. #3
    SuperTux

    Re : Besoin d'aide en programmation C++

    Je ne sais pas si cela se fait en C++ mais en C il est possible d'allouer le tableau dynamiquement avec un malloc.

  4. #4
    ProgVal

    Re : Besoin d'aide en programmation C++

    Tiens? C'est bizzare, il me semblait que l'on parlais de programmation en C ?!?!

    Soit les ordis de mon lycée sont vraiment à jeter, soit c'est moi ^^

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

    Re : Besoin d'aide en programmation C++

    Tiens? C'est bizzare, il me semblait que l'on parlais de programmation en C ?!?!

    Soit les ordis de mon lycée sont vraiment à jeter, soit c'est moi ^^
    Je ne comprend pas l'intéret de cette remarque désobligeante?

  7. #6
    yassinefugi

    Re : Besoin d'aide en language C

    SVP ; aidez moi à corriger ce programme ;j'avais essayé avec
    double *rk2out=new double[N];

    mais pas moyen,( je suis encore débutant en ce domaine là ;même pas un mois de connaissance)


    Merci d'avance

  8. #7
    zoup1

    Re : Besoin d'aide en language C

    il faut faire une allocation dynamique effectivement
    Code:
    double rk2out[];
    rk2out=(double*)malloc(sizeof(double)*N);
    ou bien ce qui est équivalent :
    Code:
    double *rk2out;
    rk2out=(double*)malloc(sizeof(double)*N);
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  9. #8
    arogno

    Re : Besoin d'aide en programmation C++

    Salut yassinefugi.

    "double *rk2out=new double[N];" me semble correct. (Il faudra désallouer la mémoire avec "delete [] rk2out;").

    En C++, il est préférable d'utiliser new que malloc.

    Salut.

  10. #9
    yassinefugi

    Re : Besoin d'aide en programmation C++

    Je ne sais pas ou est l'erreur ccaché:
    avec ce code
    double *rk2out;
    rk2out=(double*)malloc(sizeof( double)*N);

    je n'ai plus d'erreur mais sur debug--> run
    je n'ai rien , ni resultat , ni problem; ni walou
    vérifiez avec moi SVP; j'utilise le borland C++

  11. #10
    yassinefugi

    Re : Besoin d'aide en programmation C++

    Malgré ça j'ai pas de resultat

  12. #11
    zoup1

    Re : Besoin d'aide en programmation C++

    Ben dans le programme tel que tu l'as écrit, il n'y a aucune sortie.
    Il faudrait qu'après avoir fait l'appel à rk2 tu fasses une sortie du tableau rk2out.

    Il faudrait aussi à la fin libérer l'espace occupé par le tableau en faisant un free.

    En C++, il est préférable d'utiliser new que malloc.
    c'est sans doute vrai... ce que je propose est clairement du C et le couple new/delete est sans doute préférable à malloc/free.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  13. #12
    yassinefugi

    Re : Besoin d'aide en programmation C++

    pouvez vous m'ecrire les commande SVP car je suis encore debutant
    et je n'arrive pas à trop comprendre le C;

  14. #13
    arogno

    Re : Besoin d'aide en programmation C++

    J'ai essayé ton programme avec new et il marche après une petite correction:

    Fonction rk2(..double rk2out[])
    {
    int N=(int)abs((b-a)/h);
    ..
    for(int i=0;i<=N;i++)
    {
    rk2out[i]=y;

    Si tu alloue rk2out[] avec N éléments, rk2out[N] n'est pas alloué, puisque tu commence avec l'index 0.

    Ci-joint le programme :

    #include<iostream.h>
    #include<conio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<excpt.h>

    double f(double x,double y)
    {
    return y-(x*x)+1;
    }

    void rk2(double a, double b,double h, double y0, double rk2out[])
    {
    int N=(int)abs((b-a)/h);
    double y=y0;
    double x=a;
    double k1;
    // pb: for(int i=0;i<=N;i++)
    for(int i=0;i<N;i++)
    {
    rk2out[i]=y;
    k1=h*f(x,y);
    y=y+h*f(x+(h/2.0),y+(k1/2.0));
    x=x+h;
    }
    }

    int main()
    {
    double a=0.0;
    double b=3.0;
    double h=0.05;
    double y0=0.5;
    int N =(int)abs((b-a)/h);
    //double rk2out[N];
    double *rk2out=new double[N];

    rk2(a,b,h,y0,rk2out);
    delete [] rk2out;
    return 0;
    }

    Quelques remarques de style :
    - Ajoute des commentaires et des indentations (retrait de texte) pour rendre le code plus clair.
    - N est calculé 2 fois (dans main() et rk2()). Il vaudrait mieux le définir comme commentaire de rk2().

    Salut

  15. #14
    zoup1

    Re : Besoin d'aide en programmation C++

    Citation Envoyé par yassinefugi Voir le message
    pouvez vous m'ecrire les commande SVP car je suis encore debutant
    et je n'arrive pas à trop comprendre le C;
    ben il faut faire un truc du genre :

    Code:
    for(i=0;i<N;i++){
       printf("%d\t%f\n",i,rk2out[i]);
    }
    PS : Je sais que c'est pas comme cela qu'on est sensé faire en C++, que cela c'est du C, mais bon...
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

Discussions similaires

  1. besoin d'aide programmation en c
    Par sahki dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 29/04/2009, 13h39
  2. Besoin d'aide programmation C/C++
    Par bobydu60 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 11/12/2008, 20h28
  3. Besoin d'aide PROGRAMMATION 18F452
    Par Donnelalerte dans le forum Électronique
    Réponses: 1
    Dernier message: 02/05/2008, 14h58
  4. Besoin d'aide programmation ATmega32
    Par Kilhian dans le forum Électronique
    Réponses: 1
    Dernier message: 12/07/2007, 10h39
  5. besoin d'aide en programmation ST7
    Par jkiol78 dans le forum Électronique
    Réponses: 2
    Dernier message: 07/06/2006, 12h02
Découvrez nos comparatifs produits sur l'informatique et les technologies.