Bonsoir,
ça fait 4h que je penche sur un exercice. J'en peux plus les amis!!!
Exo : afficher les multiples de d1 non multiple de d2 sur un intervalle [a,b]
ex : d1 = 3 d2 = 2 [4,30]
réponse : 9, 15, 21, 27
Version imprimable
Bonsoir,
ça fait 4h que je penche sur un exercice. J'en peux plus les amis!!!
Exo : afficher les multiples de d1 non multiple de d2 sur un intervalle [a,b]
ex : d1 = 3 d2 = 2 [4,30]
réponse : 9, 15, 21, 27
Montres nous tout de même un début de code qu'on puisse voir la réflexion que t'as concernant le problème...
Je n'ai pas de code mais j'ai des supposition,
si d1 et d2 sont(pair et impaire) alors il suffit donc d'afficher les multiples impaire de d1
si d1 et d2 sont (paire et paire) c'est plus compliquer.
Je pensais à faire une boucle for
Tout d'abord je calcule les multiples
Ce qui me pose problème c'est le code qu'il faut mettre pour avoir les multiples de d1 non multiple de d2.Code:
1
2
3
4
5
6
7 for(i = 0; d1 * n <= 100; m++) { printf("%d\n", n * d1); } for(i = 0; d2 * n <= 100; m++) { printf("%d\n", n * d2); }
C'est quoi la difficulté :koi: :koi:
Ou alors je n'ai pas compris l'énoncé :weird:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 tmp_int: entier list_multiples: tableau d'entiers tmp_int = d1; tant que (tmp_int <= borne_min) faire tmp_int = (tmp_int + d1) fin tant que tant que (tmp_int <= borne_max) faire si ((tmp_int % d2) != 0) faire // Modulo list_multiples.ajouter(tmp_int); fin si tmp_int = (tmp_int + d1) fin tant que
Merci pour ta réponse.
En fait j'aimerais afficher le résultat dans une fonction sans utiliser de tableaux
Je n'arrive pas à faire en sorte de"afficher les multiples de d1 non multiples de d2"
Je sais afficher les multiples de 2 nombres certes mais combiner avec la condition du non multiple je galère :(
what ???Citation:
si d1 et d2 sont(pair et impaire) alors il suffit donc d'afficher les multiples impaire de d1
si d1 et d2 sont (paire et paire) c'est plus compliquer.
d1 et d2 représente chacun un entier, en l'occurrence dans ton cas, 3 et 2...
Ton énoncé demande donc sur un ensemble d'entiers entre 4 et 30 de renvoyer tous les éléments multiples de 3 mais non multiples de 2.
Est-ce plus clair pour toi ?
Oui c'est clair, je comprend parfaitement l'exercice mais je n'arrive pas du tout à coder, depuis 16h je fais des exo mais celui la me rend fou
En 4h ne pas sortir un minimum de code, ça paraît tout de même surprenant,
En 5 lignes c'est bâclé !
La condition est simple pourtant
Fait un petit effort !Code:
1
2 if (n%3 == 0 && n%2 != 0) /* suite du code */
Je travail vraiment, j'ai même des feuilles de brouillons pleins de code si tu veux des preuves lol
Dans mon printf final comment puis-je isoler les valeurs qui m'intéressent d'une manière générale ?
Bonjour,
Fred1599 t'a donné la solution, en réalité : l'opérateur « % » est l'opérateur « modulo », c'est-à-dire celui qui te donne le reste de la division. Et les multiples d'un nombre n sont les nombres qui peuvent être divisés par n en conservant un reste nul. De là, tu écris une boucle for, utilisant un indice i, et qui compte de a à b. À chaque tour, tu vérifies si « modulo d1 » est nul et « modulo d2 » est non nul. Si les deux conditions sont vérifiées en même temps, tu écris la valeur de i à l'écran.
Bonjour,
J'ai essayer de faire cela mais en message j'ai Exception en point flottant (core dumped)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdio.h> int main () { int d1=3,d2=2, i; for(i=0; 5<i<=31; i++) { if (d1%i == 0 && d2%i != 0) { printf("%d\n", i); } } return 0; }
Il faut revoir le cours sur la boucle for...
Citation:
#include <stdio.h>
main()
{
int d1 =3,d2 =2,a=4,b=30,i; /* [a,b] */
for(i = a; i<=b ;i++ )
{ if(i%d1==0)
{if(i%d2!=0)
printf("%d;",i);
}
}
}
- Code trop compact
- Imbrication des conditions if
- Pas d'indication sur le type de retour (voir norme)
- Indentation mal choisie
Tout cela n'aide pas au débutant, donne de mauvaises habitudes et rend le code difficile à lire... Et en plus tu lui donnes la réponse ! La totale.
Je ne comprend pas la différence entre if (i%d1 == 0 && i%d2 != 0) et if(d1%i==0 && d2%i==0);
je sais que a modulo b c'est a = bq+r
d1 = iq+r
d2 = iq'+r
et
i = qd1+r si r = 0 i = qd1
i = q'd2r si r = 0 i = q'd2
Merci pour vos aide c'est super sympa, j'essaye de faire vos code sur un papier pour comprendre la mécanique
J'ai parlé de norme, il n'y a pas le choix, la fonction main renvoie en général un code (0) permettant d'exprimer la bonne fonctionnalité du programme.Citation:
3) l’énoncer dit de me stocker les valeur dans un tableau ce qui veut dire que c'est l'affichage qui est demander
Utilise l'option -Wall de ton compilateur...
Après avoir entrer mes diviseurs d1 et d2 mon programme n'affiche pas les multiples de d1 non multiples de d2
Code:
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 #include <stdio.h> void bornes(int *a, int *b) { printf("Fournir un enter a ? "); scanf("%d", a); do { printf("Fournir un entier b > %d ", *a); scanf("%d", b); } while(*b<=*a); printf("\n"); } int lire_diviseur(int a, int b) { int c; do { printf("Fournir un entier d1 <= %d\n", b); scanf(" %d", &c); } while(c>b); do { printf("Fournir un entier d2 <= %d\n", b); scanf(" %d", &c); } while(c>b); return c; } void affiche_multiples(int a, int b, int d1, int d2) { int i; for(i=a; i<b; i++) { if (i%d1 == 0 && i%d2 != 0) { printf("%d ", i); } } } int main () { int a=0,b=0,d1=0,d2=0; bornes(&a,&b); d1 = lire_diviseur(a,b); d2 = lire_diviseur(a,b); affiche_multiples(a,b,d1,d2); return 0; }
J'ai un problème d'affichage, lorsque j'entre d1, d1 est bien mis dans la variable d1 et mon main.
Puis lorsque j'entre d2, j'ai toujours " printf("Fournir un entier d1 <= %d\n", b);" j'aimerais remplacer d1 par d2 mais je n'y arrive pas
Voici une ptit MAJ du programme
Code:
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 <stdio.h> void bornes(int *a, int *b) { printf("Fournir un enter a ? "); scanf("%d", a); do { printf("Fournir un entier b > %d ", *a); scanf("%d", b); } while(*b<=*a); printf("\n"); } int lire_diviseur(int b) { int c; do { if(b>0) { printf("Fournir un entier d1 <= %d\n", b); scanf(" %d", &c); } else { printf("Fournir un entier d2 <= %d\n", b); scanf(" %d", &c); } } while(c>b); return c; } void affiche_multiples(int a, int b, int d1, int d2) { int i; for(i=a; i<=b; i++) { if (i%d1 == 0 && i%d2 != 0) { printf("%d ", i); } } } int main () { int a=0,b=0,d1=0,d2=0; bornes(&a,&b); d1 = lire_diviseur(b); d2 = lire_diviseur(b); printf("Les multiples de %d non multiples de %d compris entre %d et %d sont : \n", d1,d2,a,b); affiche_multiples(a,b,d1,d2); return 0; }