Exercice en Algorithmique (Boucles) [Résolu/Fermé]

Signaler
Messages postés
69
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
16 février 2014
-
 Diallo saïdou -
Bonjour,

L'exercice est comme suite :

Ecrire un algorithme qui affiche le nombre des entiers qui sont des multiples de 3 et inférieur à un nombre n donné par l'utilisateur.

Je propose ceci comme solution et je voudrais savoir votre avis sur mon algorithme :

Algorithme_Multiples
Variables : n, nb, M : entiers

Debut
Ecrire ("entrer un entier :");
Lire (n);
M <- 0;
nb<- 0;
Tant que (M<n) faire
  M <- M+3*nb;
  nb<- nb+1;
Fin tant que
Ecrire ("Le nombre des entiers est :",nb);
Fin



Cordialement,
CALiiMERO

8 réponses

Messages postés
43
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
16 mars 2010
21
Debut
Ecrire ("entrer un entier :");
Lire (n);
M <- 0;
nb<- 0;
Tant que (M<n) faire
si (n modulo M = 0 )
alors nb <- nb +1;
fin si;
M <- M +1;
Fin tant que
...
... ca remonte à loin mais je pense que c'est ça...

smart-IT.be :
création de sites webs, installation et maintenance informatique, revendeur des solutions Avast!
39
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Merci bcp cest gentil de votre part

Merci c'est vraiment génial de votre part Mr!!!
Messages postés
3241
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
614
C'est un bon début, mais maintenant essaye de faire "tourner" toi-même ton algorithme à l'aide d'une feuille de papier (note les valeurs de m et nb à chaque passage dans la boucle, et regarde lorsque tu ne rentres plus dans la boucle que vaut nb). Tu y verras j'espère au moins une erreur grossière. Et peut-être une deuxième un peu plus subtile!
Messages postés
69
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
16 février 2014
8
par exemple, si on donne n= 15
les multiples de 3 inférieur à 15 sont : 3 - 6 - 9 - 12
Le nombre que le programme doit afficher c'est 4

si on reviens à mon programme, voilà comment j'ai réfléchi :

Debut
Ecrire ("entrer un entier :");
Lire (n);          <=   n=15
M <- 0;
nb<- 0;
Tant que (M<n) faire     <=  M= 3*nb = 3*4 = 12 donc 12<15
  M <- M+3*nb;            <=    3*1 et 3*2  et 3*3 et 3*4
  nb<- nb+1;                 <=      1     2     3    4
Fin tant que
Ecrire ("Le nombre des entiers est :",nb);    <= Le programme affiche le nombre  "4"
Fin
Messages postés
3241
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
614
tu as réfléchi comme ça mais ce n'est pas ce que ton algo fait.

Essaye maintenant de jouer le rôle d'une machine, complètement stupide et essaye de suivre ligne par ligne, très scrupuleusement ce que tu as écris.

Prend une feuille de papier pour indiquer les différentes valeurs de nb et M

Avant la boucle :

M = 0 et nb =0

ensuite, à tour de rôle :

M<- M + 3*nb ce qui fait 0+3*0=0 donc M vaut 0 après cette ligne.
nb<- nb+1 donc ce qui fait 0+1=1, donc nb vaut 1 à la fin de cette ligne.
Condition de boucle : est-ce que M<15 ? oui donc on continue.
M<-M+ 3*nb ce qui fait 0+3*1=3, donc M vaut 3 à la fin de cette ligne.
nb<-nb+1 ce qui fait 1+1=2, donc nb vaut 2 à la fin de cette ligne.
etc....

essaye et tu verras que ça ne fait pas ce que tu veux. Et en plus, comme ça tu verras où est l'erreur principale.

Je pense vraiment que la chose la plus importante en algorithmique c'est d'arriver à comprendre ce qu'on a soi-même écrit :)
Messages postés
1542
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
332
l'algorithmie sert justement a ne pas avoir a compiler et donc a utiliser un language spécifique (on écrit le programme avec notre propre language sans avoir besoin de connaitre le nom de tel librairie ou la syntaxe de x boucle ou test)

sinon pour en revenir a l'algo, tu peu écrire ceci dans la boucle

nb<- nb+1;
M <- 3*nb;

et après la boucle tu enleve 1 a nb
algorithme exo;
var i ,n : entier;
debut
lire(n);
m<-0;
pour i allantde 3 jusqua n faire;
si (i mod3=0) alors m<- m+1; finsi;
finpour;
ecrire(m);
fin.
Messages postés
69
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
16 février 2014
8
Avant la boucle :

M = 0 et nb =0

ensuite, à tour de rôle :

M<- M + 3*nb ce qui fait 0+3*0=0 donc M vaut 0 après cette ligne.
nb<- nb+1 donc ce qui fait 0+1=1, donc nb vaut 1 à la fin de cette ligne.

Condition de boucle : est-ce que M<15 ? oui donc on continue.

M<- M + 3*nb ce qui fait 0+3*1=3, donc M vaut 3 à la fin de cette ligne.
nb<-nb+1 ce qui fait 1+1=2, donc nb vaut 2 à la fin de cette ligne.

Condition de boucle : est-ce que M<15 ? oui donc on continue.

M<- M + 3*nb ce qui fait 3+3*2=9, donc M vaut 9 à la fin de cette ligne.
nb<-nb+1 ce qui fait 2+1=3, donc nb vaut 3 à la fin de cette ligne.

Condition de boucle : est-ce que M<15 ? oui donc on continue.

M<- M + 3*nb ce qui fait 9+3*3=18, donc M vaut 18 à la fin de cette ligne. (*)

(*) Je pense que la boucle ne peut pas passer à la ligne suivante puisque M=18>15 donc elle revient à la boucle précèdente et elle affiche nb=3


Pour régler ce probléme j'ai rajouter un 3 au nombre entrer par l'utilisateur pour pouvoir passer à la boucle suivante et j'obtiens ce algorithme :


Debut
Ecrire ("Entrer un entier :");
Lire (n);
M <- 0;
nb<- 0;
N <- n+3;
Tant que (M<N) faire
 M <- M+nb*3;
 nb<- nb+1;
Fin tant que
Ecrire ("Le nombre des entiers est :",nb);
Fin


J'espére que c'est bon maintenant :)
Messages postés
466
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011
51
C koi comme langage? du TI basic ou un truk comme ça?
Messages postés
43
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
16 mars 2010
21
Relis ma solution et essaie de comprendre ce que je fais... et pourquoi.
Je pense pour affirmer la solution d'un tel exercice il faut d'abord verirfier si ce ernier compile sinon a quoi bon
algorithme mul ;
variable n , i : entier
debut
lire (n) ; i:=1
tant que 3i<n faire
debut
ecrire(3i) ; i:=i+1;
fin;
fin;
ta oublier un ; a la fin de declaration si non c correct ton algo enfin une personne qui reflechie
est ce que vrai ou pas ?
algorithme mul
variable
e,n,nb:entier
debut
ecrire('saisie un nombre')
lire(n)
ecrire ('enter un entier',e)
si ((e mod 3 =0) et (e<n)) alors
nb<---- nb+1
ecrire('le nombre des entiers est:', nb)
fin si
fin

voila comment j ai réflichiii moi c tréé simple
algo multiple;
debut
i , n , nb : entier;
lire(n);
nb <-- 0;
pour i <-- 3 a n
faire
si ( i mod 3 <-- 0 ) alors
nb <-- nb + 1 ;
Fsi ;
fait;
Ecrire ( "les nombres des entiers est : " , nb );
FIN