Téléchargement
illégal
Posez votre question Signaler

Exercice en Algorithmique (Boucles) [Résolu]

CALiiMERO 54Messages postés 5 mars 2009Date d'inscription 24 juin 2010Dernière intervention - Dernière réponse le 9 janv. 2011 à 17:49
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
Lire la suite 

Exercice en Algorithmique (Boucles) »

10 réponses
Réponse
+5
moins plus
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!
Ajouter un commentaire
Réponse
+1
moins plus
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...
Ajouter un commentaire
Réponse
+0
moins plus
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
Pacorabanix- 23 nov. 2009 à 23:50
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
C koi comme langage? du TI basic ou un truk comme ça?
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
Relis ma solution et essaie de comprendre ce que je fais... et pourquoi.
NKOLAC - 14 janv. 2010 à 04:12
Je pense pour affirmer la solution d'un tel exercice il faut d'abord verirfier si ce ernier compile sinon a quoi bon
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Ce document intitulé « Exercice en Algorithmique (Boucles) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?