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 :

Liste de points et repérage de couches


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 Liste de points et repérage de couches
    Bonjour,

    Comme dit le proverbe, jamais 2 sans 3. J’ amène donc mon troisième problème. Il s’ agit en fait d’ une évolution du code pour lequel j’ avais sollicité de l’ aide ces derniers jours et qui n’ a pas plu à mon boss parcequ’ il n’ était apparemment pas assez « général ».

    L’ évolution est la suivante : je me place toujours dans un rectangle, et le programme doit avoir deux étapes bien distinctes dans son fonctionnement ; tout d’ abord, je souhaite qu’ il m’ affiche une liste avec les coordonnées de tous les points disposés à intervalles réguliers (dont je fixe le pas). Il s’ agit d’ une grille régulière.

    Une fois cette liste affichée, c’est là que ça se corse. Je veux que le programme me demande combien de couches je veux pour le sous-sol. Idéalement, je souhaiterais que ce nombre de couches ne soit pas limité, mais si ce n’est pas possible, alors je pense que les valeurs 1, 2 et 3 (la 1 étant la plus basse et on monte successivement) devraient suffire. Une fois que je lui ai fixé le nombre de couches, je veux qu’il me demande a chose suivante :
    « Entrez les coordonnées (i1, j1) d’ un nœud appartenant à une interface entre les couches 1 et 2»
    « Entrez les coordonnées (i2, j2) d’ un nœud appartenant à cette même interface avec i2 > i1 »
    // La condition i2>i1 me paraît nécessaire pour que les intervalles définis restent orientés dans le sens des x croissants, ce qui simplifie le programme.//
    « Entrez les coordonnées (x, y), d’ un point »

    Une fois que les coordonnées (x, y) sont entrées, je veux qu’ il évalue si le point se situe au dessus ou en dessous de la droite reliant (i1, j1) à (i2, j2). Si il est en dessous, je veux que le programme me renvoie un message du genre
    « Le point appartient à la couche 1 »
    Si il est au dessus, je veux qu’il me renvoie :
    « Le point est situé dans la couche 2 ou 3. Entrez les coordonnées (i3, j3) d’ un nœud appartenant à l’ interface entre les couches 2 et 3. »
    « Entrez les coordonnées (i4, j4) d’ un nœud à l’ interface entre les couches 2 et 3 avec i4>i3).
    Et là il évalue si le point de coordonnées (x, y) se situe au dessus ou en dessous de cette interface. Si il est en dessous, il me renvoie :
    « Le point en situé dans la couche2 »
    Sinon, il me renvoie :
    « Le point est situé dans la couche 3 »

    Voici le code que j’ai fait jusqu’à présent, mais il n’est pas complet :
    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
    #include cond_limite_ext.h
     
    int main(void)
     
    //Largeur du profil :
    int L=13000 ;
    // Hauteur du profil :
    int H=2000 ;
     
    float i, j, x, y, a, b, a_1, b_1, i_1, i_2, i_3, i_4, j_1, j_2, j_3, j_4 ; Ici, j’ ai un problème car si le nombre de couches est de seulement 1 ou 2, je vais me retrouver avec des floats en trop qui ne serviront à rien dans mon programme. Est-ce un problème de déclarer des floats potentiellement inutiles en fonction des instructions (en l’ occurrence le nombre de couches) que l’ on rentre ensuite ?
    int k ; (Je voudrais que cet entier ne puisse prendre que les valeurs 1, 2 ou 3, mais je ne sais pas très bien comment faire)
     
    for (i=0, i=L, i=i+10)for (j=0, j=H, j=j+10)
                 
       printf(« Coordonnées du nœud n ») ;
       printf(« %f, %f, 0 n », i, j) ;
                 
            
    printf(« Entrez un nombre de couches compris entre 1 et 3 n ») ;
    scanf(« %d, &k) ;
    À ce niveau, je ne sais pas comment lui faire faire la différence entre 1, 2 et 3 couches, ce qui conditionne pourtant la suite du programme. Le code qui suit fait comme si il y avait 3 couches. Pourriez vous s’il vous plaît m’ aider pour que, par exemple si je lui rentre un nombre de couches égal à 1 ou 2, le programme m’ élimine automatiquement les cas en trop ?
    printf(« Entrez les coordonnées d’ un point appartenant à l’ interface entre les couches 1 et 2 n ») ;
    scanf(« %f, %f », &i_1, &j_1) ;
     
    printf(« Entrez les coordonnées d’ un second point appartenant à l’ interface entre les couches 1 et 2 avec i_2>i_1 n ») ;
    scanf(« %f, %f », &i_2, &j_2) ;
     
    if (i_2<i_1)
    printf(« Vous êtes vraiment un âne, on vous avait dit i_2>i_1 n ») ;
    else () ; Ai-je le droit de ne rien mettre entre les parenthèses du else si la condition est satisaite ?Sinon, que dois-je mettre comme instructions ?
     
    a=(j_2-j_1)/(i_2-i_1) ;
    b=(j_1-a*i_1) ;
     
    printf(« Entrez les coordonnées x et y d’ un point n ») ;
    scanf(« %f, %f », &x, &z) ;
     
    if (a*x + b – y >0)
        printf(« Le point se situe dans la couche 2 ou 3 n ») ;
        printf(« Entrez les coordonnées d’ un point appartenant à l’ interface entre les couches 2 et 3 n ») ;
        scanf(« %f, %f », &i_3, &j_3) ;
     
        printf(« Entrez les coordonnées d’ un second point appartenant à l’ interface entre les couches 1 et 2 avec i_4>i_3 n ») ;
        scanf(« %f, %f », &i_4, &j_4) ;
        if (i_4<i_3)
        printf(« Vous le faites exprès ? On a dit i_4>i_3 n ») ;
        else () ;
     
        a_1=(j_4-j_3)/(i_4-i_3) ;
        b_1=(j_3-a_1*i_3) ;
                     if (a_1*x + b_1 – y >0)
                     printf(« Le point se situe dans la couche 3 n ») ;
                     else(« Le point est dans la couche 2 n ») ;
    else
            printf(« Le point se situe dans la couche 1 n ») ;
     
    return 0 ;
     
    
    Voilà. Je ne l’ai pas testé (Je l’ai tapé sur mon ordi portable sur lequel je n’ai pas de compilateur de C). Quelqu’un pourrait-il me dire si il voit des erreurs énormes, ce que je dois faire aux endroits où j’ai mis des annotations avec pour objectif d’arriver au but décrit tout en haut ?

    Merci beaucoup et bon week end à tout le monde

    @+

    [EDIT] traduction en style C du code précédent (plus quelques omisssion {," )
    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
    #include "cond_limite_ext.h"
     
    int main(void)
    { 
    //Largeur du profil :
      int L=13000 ;
    // Hauteur du profil :
      int H=2000 ;
     
      float i, j, x, y, a, b, a_1, b_1, i_1, i_2, i_3, i_4, j_1, j_2, j_3, j_4 ;
      /* Ici, j’ ai un problème car si le nombre de couches est de seulement
       1 ou 2, je vais me retrouver avec des floats en trop qui ne serviront
       à rien dans mon programme. Est-ce un problème de déclarer des floats
       potentiellement inutiles en fonction des instructions (en l’ occurrence
       le nombre de couches) que l’ on rentre ensuite ? */
      int k ; /*Je voudrais que cet entier ne puisse prendre que les valeurs
               1, 2 ou 3, mais je ne sais pas très bien comment faire) */
     
      for (i=0, i=L, i=i+10)
      {
        for (j=0, j=H, j=j+10)
        {
         printf(" Coordonnées du nœud \n") ;
         printf(" %f, %f, 0 \n", i, j) ;
        }
      }
      printf(" Entrez un nombre de couches compris entre 1 et 3 \n") ;
      scanf(" %d", &k) ;
    /* À ce niveau, je ne sais pas comment lui faire faire la différence entre
     1, 2 et 3 couches, ce qui conditionne pourtant la suite du programme.
     Le code qui suit fait comme si il y avait 3 couches. Pourriez vous
     s’il vous plaît m’ aider pour que, par exemple si je lui rentre un nombre
     de couches égal à 1 ou 2, le programme m’ élimine automatiquement les cas
     en trop ?
     */
      printf(" Entrez les coordonnées d’ un point appartenant à l’ interface entre les couches 1 et 2 \n") ;
      scanf(" %f, %f ", &i_1, &j_1) ;
     
      printf(" Entrez les coordonnées d’ un second point appartenant à l’ interface entre les couches 1 et 2 avec i_2>i_1 \n") ;
      scanf(" %f, %f ", &i_2, &j_2) ;
     
      if (i_2<i_1)
        printf(" Vous êtes vraiment un âne, on vous avait dit i_2>i_1 \n ") ;
      else () ;
      /* Ai-je le droit de ne rien mettre entre les parenthèses du else si
       la condition est satisaite ? Sinon, que dois-je mettre comme instructions ?*/
     
      a=(j_2-j_1)/(i_2-i_1) ;
      b=(j_1-a*i_1) ;
     
      printf(" Entrez les coordonnées x et y d’ un point \n ") ;
      scanf(" %f, %f ", &x, &z) ;
     
      if (a*x + b - y >0)
        printf(" Le point se situe dans la couche 2 ou 3 \n ") ;
        printf(" Entrez les coordonnées d’ un point appartenant à l’ interface entre les couches 2 et 3 \n ") ;
        scanf(" %f, %f ", &i_3, &j_3) ;
     
        printf(" Entrez les coordonnées d’ un second point appartenant à l’ interface entre les couches 1 et 2 avec i_4>i_3 \n ") ;
        scanf(" %f, %f ", &i_4, &j_4) ;
        if (i_4<i_3)
        printf(" Vous le faites exprès ? On a dit i_4>i_3 \n ") ;
        else () ;
     
        a_1=(j_4-j_3)/(i_4-i_3) ;
        b_1=(j_3-a_1*i_3) ;
                     if (a_1*x + b_1 - y >0)
                     printf(" Le point se situe dans la couche 3 \n") ;
                     else(" Le point est dans la couche 2 \n ") ;
    else
            printf(" Le point se situe dans la couche 1 \n ") ;
     
    return 0 ;
     
    }

  2. #2
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    Manifestement, il n'aime pas mes backslashs et autres accolades. Il les a remplacées par des notations absurdes, mais en pratique, ils y sont

    ++

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/05/2009, 22h06
  2. eclipse trier une liste de points désordonnés
    Par pvoncken dans le forum Physique
    Réponses: 0
    Dernier message: 23/10/2007, 13h56
  3. Obtenir la zone minimum englobante d'une liste de points(x,y)
    Par Chekov dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 05/02/2007, 16h18
  4. Trouver equation à partir d'une liste de points
    Par scarabee dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 27/05/2004, 17h05
  5. [ plugin ][ extension point ] liste des points d'extension
    Par Satch dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/03/2004, 09h34

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