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 :
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 ?
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 nud 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 sil 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 ;
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 nud \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 sil 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 ; }
Partager