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 :

Quelqu'un saurait-il où est l'erreur?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut Quelqu'un saurait-il où est l'erreur?
    Bonsoir à tous

    Heureusement je n'aurai pas à faire directement mon histoire d'ondes sismiques parce que ça me faisait sérieusement stresser cette histoire

    De manière nettement plus simple, je souhaiterais réaliser une grille avec des points répartis dans 4 zones différentes que j'ai mises dans la pièce jointe.

    Je vais également vous montrer le programme que j'ai fait mais il ne fonctionne pas, pourtant il m'a l'air à peu près propre. Quelqu'un saurait il me dire ce qui ne va pas et ce qu'il faut que je fasse pour le débloquer?

    Merci beaucoup

    Voici le programme:

    Création d’un maillage

    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
    #include <stdio.h>
     
    main()
    {
    float x ;
    float z ;
    (x>=0) && (x<13);
    (z>1200) && (z<=1414.44);
       for (x=0; x<0.710; x=x+0.01)
             {
               printf(« Point situé en zone d’amortissement %f\n », x);
              }
       for (x=0.710 ; x<=2 ; x=x+0.01 ; x=x+0.01)
              {
                if ((z>=1200) && (z<=1250))
                printf(« Point situé en zone d’amortissement %f\n », x) ;
                if ((z>=1250) && (z<=-18.062*x+1322.82))
                printf(« Point situé dans la roche mère %f\n, x) ;
                if ((z>-18.062*x+1322.82) && (z <=-1.705*x+1311.21))
                printf(« Point situé dans les sédiments %f\n, x) ;
                if ((z>-1705*x+1311.21) && (z<=1414.44))
                printf(« Point en surface %f\n », x) ;
               }
    return 0 ;
    }
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    A vue d'oeil, il y a des trucs qui ne vont pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (x>=0) && (x<13);
    (z>1200) && (z<=1414.44);


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (x=0.710 ; x<=2 ; x=x+0.01 ; x=x+0.01)

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    À mon grand désarroi, je me doute en effet que des choses ne vont pas. Manque de chance, je ne suis pas bon du tout en programmation et il faut pourtant que je fasse avec cette lacune au quotidien

    Les 3 choses que tu as indiquées sont elles les seules qui te paraissent aberrantes?
    Puisque les valeurs que j'ai déclarées sont de type float, pourquoi devrais-je mettre int devant la fonction main?

    Pour ta troisième remarque, cette erreur n'est pas dans le programme d'origine. C'est juste que je n'ai pas pu faire de copier coller du programme dans le site Web et il a fallu que je le recopie mot à mot.

    Pour ta seconde remarque, je ne comprends pas pourquoi c'est faux. Après avoir déclaré mon x et mon z, j'avais besoin de définir un rectangle dans lesquels ils devaient impérativement se trouver. La syntaxe est elle absurde? Dans ce cas, quelle est la bonne pour ce genre de choses?

    Merci d'être intervenu dans ce topic.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut.

    Je ne comprends pas trop ce que ton code est censé effectuer. Pourrais-tu donner plus de précisions ?

    Sinon, côté programmation C, il y a effectivement de nombreuses choses qui ne vont pas.

    Déjà, la variable z n'est pas initialisée. Cela va poser un problème pour le test des conditions.

    Puisque les valeurs que j'ai déclarées sont de type float, pourquoi devrais-je mettre int devant la fonction main?
    Cela n'a rien à voir. Quand un programme se termine, il doit renvoyer une valeur au système d'exploitation. La fonction principale doit toujours renvoyer un entier de type int, en l'occurrence la valeur EXIT_SUCCESS si le programme se termine normalement.

    Pour ta seconde remarque, je ne comprends pas pourquoi c'est faux. Après avoir déclaré mon x et mon z, j'avais besoin de définir un rectangle dans lesquels ils devaient impérativement se trouver. La syntaxe est elle absurde? Dans ce cas, quelle est la bonne pour ce genre de choses?
    Là, je ne comprends pas ta manoeuvre. On ne peut pas définir une zone de cette manière.

    Lorsqu'en C, tu écris par exemple
    le programme va simplement tester si x>=0 ET si x<13. Or, là, les conditions sont testées mais le résultat du test est perdu. Lors de la compilation, cela ne va pas provoquer une erreur mais un warning, qui va t'indiquer que ce qui est écrit dans la ligne sera sans effet.
    Tu peux par contre te servir du if pour tester des conditions et exécuter des instructions en cas de réussite du test, en fonction de ce que tu veux faire.
    Et si tu veux "quadriller" ton graphique afin d'effectuer des tests à divers endroits, tu dois utiliser une boucle voire une boucle à l'intérieur d'une autre boucle si tu veux te positionner à la position X,Y.

    Mais avant de pouvoir te diriger correctement, il faudrait que tu nous apporte des précisions sur ce que ton programme est vraiment censé faire.

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    Bonjour

    Je vais essayer d'être plus précis:

    Le proigramme que j'essaie de créer est en fait la première étape de ce qui viendra ensuite, à savoir une étude de propagation d'ondes sismiques. Mais chaque chose en son temps.

    Dans la mesure où mon étude correspond à une tranche verticale de sol dans un bassins édimentaire, j'ai des strates de différents matériaux dont les limites sont symbolisées sur les schéma que j'ai mis en pièce jointe dans mon premier post. Certaines fois, ce sont des lignes horizontales, d'autres fois non, mais quand ce n'est pas le cas, j'ai mis les équations des droites sur ce même schéma.

    Comme je me trouve dans une tranche de sol en 2D, je peux donc dire que mon étude se passe dans un rectangle (le fameux que j'essaie de définir).

    Le logiciel dont je me sers permet d'établir un maillage à l'intérieur de ce rectangle, et qui est constitué d'un certain nombre de cellules dont il est possible d'avoir les coordonnées des centres. Ce que je veux, c'est un programme qui, si je lui rentre les coordonnées du centre d'une cellule, me renvoie une phrase me disant dans quelle strate elle se trouve (zone d' amortissement, roche mère, sédiments ou surface).

    J'ai bien conscience de l' aspect ultra basique de ce programme, mais je galère quand même et j'aimerais vraiment y arriver et comprendre pourquoi je ne fais pas les choses bien.

    Je te propose donc une nouvelle solution, en espérant qu'elle soit un peu moins lamentable que la première:

    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
    #include <stdio.h>
     
    int main(void)
    {
    float x ;
    float z ;
    0<=x<=13;
    1200<=z<=1414.44;
       for (x=0; z=0; x<=0.710; z<=1414.44; x=x+0.01: z=z+0.01)
             {
               printf(« Point situé en zone d’amortissement %f\n », x, z);
              }
       for (x=0.710 ; x<=2; z=1200 ; z<=1414.44; x=x+0.01 ; z=x+0.01)
              {
                if (1200<=z<=1250)
                printf(« Point situé en zone d’amortissement %f\n », x, z) ;
                if (1250<z<=-18.062*x+1322.82)
                printf(« Point situé dans la roche mère %f\n, x, z) ;
                if (-18.062*x+1322.82<z<=-1.705*x+1311.21)
                printf(« Point situé dans les sédiments %f\n, x, z) ;
                if (-1705*x+1311.2<z<=1414.44)
                printf(« Point en surface %f\n », x, z) ;
               }
    return 0 ;
    }
    Question annexe: mes { } sont elles mises au bons endroits et doit-on mettre des espaces quand on veut par exemple écrire 2<z<3 ou 2 < z < 3)?

    Je précise que j'apprécie vraiment ton aide.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 129
    Par défaut
    Les espaces n'ont pas d'importance en C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (x>=0) && (x<13);
    (z>1200) && (z<=1414.44);
    ne fait rien

    Et tes boucles for ne sont pas bonnes. Si tu as 3 variables tu dois faire 3 boucles imbriquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (i.....)
    {
           for (j.....)
           {
                     for (k .....)
                     {
                      printf (.....);
                      }
           }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Où est l'erreur?
    Par Paulinho dans le forum C++
    Réponses: 3
    Dernier message: 26/10/2005, 09h48
  2. [VB.NET] Pagination DataGrid (où est l'erreur?)
    Par franculo_caoulene dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/10/2004, 11h46
  3. Ou est l'erreur ?
    Par Antoine NSG dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/09/2004, 10h56
  4. [Erreur] Quel est cette erreur?
    Par netah25 dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/08/2004, 10h16

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