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 :

programme d'equation de la chaleur


Sujet :

C

  1. #1
    Membre très actif
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Par défaut programme d'equation de la chaleur
    bonjour,
    je suis débutante j'ai une petite projet d'equation de la chaleur en C bon voici mon code
    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
    #include<conio.h>
    #include<stdio.h>
    #include<math.h>
    int main()
    {
    int i,j,n,m;
    float dx,dt,ni=1,u[100][100],tmax,f[100][100],landa,;
    float pi=3.141592;
    FILE *g;
    printf("donner le pas d'espace:\n");
    scanf("%f",&dx);
    printf("donner la largeur de l'intervalle du temps:\n");
    scanf("%f",&tmax);
    printf("donner le pas du temps:\n");
    scanf("%f",&dt);
    n=(int)(1/dx)+1;
    m=(int)(tmax/dt);
    //d‚finition de la fonction f
    for(j=0;j<=m;j++)
    for(i=0;i<=n;i++)
    f[i][j]=2;
    //conditions aux limites
    for(j=0;j<=m;j++)
    u[0][j]=u[n][j]=0;
    //conditions initiales
    for(i=1;i<n;i++)
    u[i][0]=sin(pi*i*dx)+i*dx*(1-i*dx);
    //sch‚ma d'Euler progressif
    landa=dt*ni/(dx*dx);
    for(j=0;j<m;j++)
    for(i=1;i<n;i++)
    u[i][j+1]=(1-2*landa)*u[i][j]+landa*(u[i-1][j]+u[i+1][j])+dt*f[i][j];
    //affichage des r‚sultats
    g=fopen("c:\\EUexplicite.txt","w");
    for(j=0;j<=m;j++){
    for(i=0;i<=n;i++)
    fprintf(g,"%2.3f\t",u[i][j]);
    fprintf(g,"\n\n");
    }
    fclose(g);
    getch();
    return 0;
    }
    mais le problème que après l'exécution il me donne pas des vrais valeur il m'affiche d'autre valeur
    voici ce que je doit afficher
    Images attachées Images attachées  

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Si c'est du C, t'auras plus de chances dans le forum C.... Non ?

  3. #3
    Membre très actif
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Par défaut
    voici la photo
    oui j suis sur que c'est C
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Tu devrais plutôt poster là alors :
    http://www.developpez.net/forums/sea...archid=6703594

  5. #5
    Membre très actif
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Par défaut
    quelqu'un peu m'aider pour términer ce mini projet
    merci d'avance

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 615
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 615
    Billets dans le blog
    2
    Par défaut
    2 remarques vite faites :


  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    D'autre part tu n'as pas mis les parenthèses permttant de définir les blocs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(j=0;j<=m;j++)
    for(i=0;i<=n;i++)
    f[i][j]=2;
    revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ( i = 0 : i <= n ; i++ )
      f[i][n+1]=2;
    car la première boucle est effectuée sans rien, et e termine avec une valeur de j égale à n+1
    Non, le code est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(j=0;j<=m;j++)
    {
       for(i=0;i<=n;i++)
       {
          f[i][j]=2;
       }
    }
    Dans toute initialisation d'un float ou double, il est préférable de le faire suivre d'un ".0" si c'est une valeur entière
    ne donnera pas forcément le bon résultat, car la seconde partie du nombre n'est pas définie..
    donnera ce qu'on souhaite réellement.
    Non, le résultat est correct : le compilateur sait faire un conversion entier-> flottant exactement (si l'entier n'est pas très grand, mais avec 2 on est plus que tranquille).

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 615
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 615
    Billets dans le blog
    2
    Par défaut
    pour la première remarque, exact, j'avas lu trop vite J'avais cru voir un ";"...

    Vraiment désolé..


    Quant à la deuxième, je ne suis pas d'accord, car même si c'est vrai pour 2, il est de toutes façons plus prudent d'avoir une attitude consistante quelle que soit la valeur d'initialisation.... Et cela a l'avantage également de confirmer d'un coup d'oeil à la lecure qu'on a bien affaire à un réel...

    En tous cas c'est ce que je prône comme "bonne pratique"...

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Quant à la deuxième, je ne suis pas d'accord, car même si c'est vrai pour 2, il est de toutes façons plus prudent d'avoir une attitude consistante quelle que soit la valeur d'initialisation.... Et cela a l'avantage également de confirmer d'un coup d'oeil à la lecure qu'on a bien affaire à un réel...

    En tous cas c'est ce que je prône comme "bonne pratique"...
    je t'accorde que c'est une bonne pratique et dans ce cas il vaut mieux spécifier une constante en accord avec le type :
    Mais on ne pouvait dire
    ....ne donnera pas forcément le bon résultat, car la seconde partie du nombre n'est pas définie..

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 615
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 615
    Billets dans le blog
    2
    Par défaut
    c'est vrai..

    Mais au vu du nombre de posts où la division entière est en jeu (à l'étonnement des posteurs) à cause de ce genre de choses, il serait à mon avis bon, surtout pour un débutant, d'insister sur ce point...

    Mais par rapport au pbe du PO, je suis d'accord que ça n'est pas le cas..

Discussions similaires

  1. [Débutant] Equation de la chaleur / Image 1D 2D
    Par bilou_12 dans le forum Images
    Réponses: 4
    Dernier message: 26/03/2012, 23h04
  2. l'equation de la chaleur
    Par djodjosami dans le forum Fortran
    Réponses: 9
    Dernier message: 07/02/2012, 17h03
  3. Equation de la chaleur
    Par kawtar2 dans le forum Fortran
    Réponses: 9
    Dernier message: 10/03/2009, 19h41
  4. equation de la chaleur
    Par mirinda dans le forum Mathématiques
    Réponses: 5
    Dernier message: 25/06/2008, 12h04
  5. programme resolution equation en c
    Par superspike23 dans le forum C
    Réponses: 16
    Dernier message: 03/10/2005, 16h43

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