Algorithme avec division euclidienne
-
CCroony75 dernière édition par
Voilà, je dois écrire un algorithme en langage naturel pour la rentrée, je ne sais pas comment faire :
Enoncé :
Ecrire un algorithme qui affiche les nombres entiers de 1 à 99 en remplaçant l'affichage du nombre par le mot "pox" si le nombre est multiple de 7 ou bien s'il utilise le chiffre 7 dans son écriture.
(par exemple 14,17,72... devront être remplacés).
Syntaxe : reste (a , b) est le reste de la division euclidienne de a par b
quot(a , b) est le quotient de la division euclidienne de a par b
Pour par exemple une condition telle que n > 40 et n < 50 on pourra écrire : et(n > 40, n < 50)
La fonction ou(condition 1, condition 2) est aussi disponible.Voilà !
-
BONJOUR ! ( un "bonjour" fait plaisir , surtout lorsqu'on vient demander de l'aide ! )
Quelques pistes pour organiser ton algorithme
Déclare une variable N nombre entier
Initialise N à la valeur 0
Tant que N < 99
Faire
N prend la valeur N+1Prévoir l'affichage demandé
Fin de Faire
Fin de Tant que
Fin de l'algorithme*Pour la zone "Prévoir l'affichage demandé" , réfléchis dans quels cas sera affiché pox :
N est multiple de 7 , le chiffre des unités de N est 7 , le chiffre des dizaines de N est 7 .
(Pour cela , pense à des restes et quotients de divisions euclidiennes )Dans les autres cas , l'affichage sera la valeur de N*
-
CCroony75 dernière édition par
Oh merci beaucoup beaucoup ! !
Je vais essayer pour voir ce que ça donne, je mettrai ensuite mon algo' en ligne pour voir si c'est bon
-
CCroony75 dernière édition par
Voilà pour le début :
Afficher ("Donner une valeur pour n")
Demander (n)
Affecter (n ; 0)
Tant que n inférieur à 99
Fairepour (n ; 1;99)
Affecter (n ; n+1)
mais je ne sais vraiment pas comment mettre en langage algo' la zone prévoir l'affichage demandé je bloque dessus :/.
-
CCroony75 dernière édition par
Est ce que je reste dans la boucle pour l'affichage demandé ?
-
Tu restes dans la boucle mais il faut que tu trouves les "bonnes formules mathématiques" avec quotient entier et/ou reste de division euclidienne ; c'est ça le but de l'exercice .
-
CCroony75 dernière édition par
C'est affreux je n'y arrive vraiment pas, je vois même pas comment on pourrait utiliser la division euclidienne avec ce truc :(.
-
Par exemple ,
N multiple de 7 <=> le reste de la division euclidienne de N par 7 vaut 0
-
CCroony75 dernière édition par
Oui d'accord, mais je vois pas du tout comment le mettre en écriture algorithmique (je sais pas si ça se dit ^^).
-
J'ignore le "langage naturel" utilisé par ton professeur , mais regarde les indications de ton énoncé.
Citation
reste (a , b) est le reste de la division euclidienne de a par bPour N multiple de 7 , tu écris donc :reste(N,7)=0
-
Une autre remarque , en lisant ton énoncé .
Je lis :
Citation
Ecrire un algorithme qui affiche les nombres entiers de 1 à 99En lisant cela , je n'ai pas l'impression que ce soit à l'utilisateur de choisir le nombre ( donc ce "donner la valeur de n" me laisse perplexe...), mais que c'est au programme tout seul de générer les nombres entiers entre 1 et 99
En plus , "donner la valeur de n" est en contradiction avec ce que tu écris ensuite , vu que la valeur de n choisie par l'utilisateur ne sert à rien ...
Décide toi sur ce que tu dois faire mais ne mélange pas tout.A toi de voir , bien sûr !
-
CCroony75 dernière édition par
Ah d'accord, bein on avait déjà fait un algorithme où l'énoncé était "proposez un algorithme qui affiche les nombres entiers n (...)" et on avait mis Afficher ("donner la valeur de n") ^^.
-
Si tu as un doute , tu peux peut-être demander à ton professeur ce qu'il veut exactement
J'espère que tu as traduit les autres cas d'affichage de pox : le chiffre des unités est 7 ou le chiffre des dizaines est 7
-
CCroony75 dernière édition par
Vu mon niveau médiocre en maths.. Je n'y arrive décidement pas..
-
Je vais essayer de te mettre sur la voie pour les autres cas où il faut afficher "fox"
Cas où le chiffre des unités est 7:
des exemples :
7=0x10+7
17=10+7=1x10+7
27=20+7=2x10+7
...
57=50+7=2x10+7
...
Dans ce cas , quel est le reste de la division euclidienne de N par 10 ?Cas où le chiffre des dizaines est 7:
des exemples :
70=7x10
71=70+1=7x10+1
72=70+2=7x10+2
...
75=70+5=7x10+5
...
Dans ce cas , quel est le quotient de la division euclidienne de N par 10 ?Remarque : 77 convient bien sûr aux 2 cas
-
CCroony75 dernière édition par
reste(N,10) =7
quot(N,10) =7
-
Tout à fait.
Tu as maintenant tous les éléments pour écrire ton algorithme.
Il te reste à te décider :
ou bien c'est l'utilisateur qui choisit un entier N entre 1 et 99 ; le programme affiche soit le nombre N , soit "pox".
Dans ce cas , pas besoin de boucle( sauf si tu veux faire de "l'art" en demandant à l'utilisateur s'il veut recommencer ).ou bien c'est le programme qui génère la suite des entiers N compris entre 1 et 99 .
Dans ce cas , il faut une boucle ; à l'intérieur de la boucle , pour chaque valeur de N , le programme affiche soit le nombre N , soit "pox".
-
CCroony75 dernière édition par
merci !!!!
-
CCroony75 dernière édition par
mais enfait je crois que le véritable problème est que je ne sais pas comment rédiger un algorithme fin le voc' et tout on a pas de cours et on a redigé qu'un algorithme depuis le début de l'année je sais pas comment m'y prendre. Tu pourrais pas m'aider pour rédiger la boucle en langage algo ?
-
CCroony75 dernière édition par
faut que je me serve de l'énoncé aussi et(n sup 40 , n inf 50) pour l'instant j'ai ça :
Variable (n, entier)
Demander (n)
Affecter (n,0)
Boucle :
Tant que n inférieur à 99
Faire pour (n; 1,99)
Affecter (n;n+1)
Afficher (n)
et(reste (n,7) ; reste (n;10) ; quot(n;10))
Afficher ("pox")Fin de Faire
Fin de Tant que
Fin de l'algorithmeVoilà peux-tu me corriger ?
-
Relis ma derniere réponse avec soin ...
Si c'est l'utilisateur qui donne N ( comme tu l'indiques dans l'agorithme que tu proposes ), la boucle n' a aucun sens...
"et(n > 40, n < 50)" de ton énoncé n'est qu'un exemple pour te mettre sur la voie.
Dans ton exercice ( pour "pox" ) , ce n'est pas "et" qu'il faut mettre mais "ou"
En plus , tu ne dis pas ce que valent reste (n,7) ,reste (n;10) , quot(n;10)
-
CCroony75 dernière édition par
Je vois pas du tout comment il ne pourrait pas y avoir de boucle ?
Variable (n, entier)
Demander (n)
Affecter (n,0)
Boucle :
Tant que n inférieur à 99
Faire pour (n; 1,99)
Affecter (n;n+1)
Afficher (n)
ou(reste (n,7)= 0; reste (n;10)=7 ; quot(n;10)=7)
Afficher ("pox")Fin de Faire
Fin de Tant que
Fin de l'algorithmePour l'instant, je sais faire que ça, je vois pas comment il pourrait pas y avoir de boucle (je ne comprends décidement rien aux algorithme '-____-)
-
Visiblement , tu ne comprends pas ce que tu écris dans l'algorithme ...
Je te donne un exemple , le plus simple possible , fait avec AlgoBox mais dont j'ai modifié la syntaxe pour qu'elle s'adapte à tes notations , pour le cas où c'est l'utilisateur qui choisit la valeur de N ( donc sans "boucle").
Il est évident que si tu le recopies sans comprendre , cela ne sert absolument à rien.
Je répète une fois encore : si tu veux que le programme génère successivement lui même tous les entiers compris entre 1 et 99 et donne une réponse pour chaque entier , le programme que je te propose n'est pas le bon.
-
CCroony75 dernière édition par
Donc enfait ça donne ça :
Variable (n; entier)
Demander (n)
Affecter (n;0)
Si(ou(reste(n;7)=0) , (reste(n;10) = 7), (quot(n;10=7)) alors
Afficher ("pox")
FinSi
Sinon
Fairepour (n;1,99)
Afficher (n;n+1)
Afficher (n)
FinSinon
Fin de l'algorithme.PS : Alinéa de Si à Finsinon.
-
non...
-
CCroony75 dernière édition par
La fin est fausse à partir de sinon ?
-
Comprends tout simplement l'algorithme que je t'ai proposé et traduis le dans le langage "naturel" de ton professeur .
-
CCroony75 dernière édition par
Bein langage naturel, c'est ce que je viens d'écrire. mais je ne connais pas le vocabulaire donc bon..
-
Variable (n; entier)
Demander (n)
Si(ou(reste(n;7)=0) , (reste(n;10) = 7), (quot(n;10=7)) alors
Début de Si
Afficher ("pox")
FinSi
Sinon
Début de sinon
Afficher (n)
FinSinon
Fin de l'algorithme.
-
CCroony75 dernière édition par
Merci beaucoup !!
-
CCroony75 dernière édition par
Mais on ne doit pas affecter n à 0 ensuite n+1 parce que là on sait pas que le programme affiche les nombres de 1 à 99 ?
-
RAPPEL
Je t'ai délà dit et relis le plusieurs fois !
Citation
Il te reste à te décider :ou bien c'est l'utilisateur qui choisit un entier N entre 1 et 99 ; le programme affiche soit le nombre N , soit "pox".
Dans ce cas , pas besoin de boucle( sauf si tu veux faire de "l'art" en demandant à l'utilisateur s'il veut recommencer ).ou bien c'est le programme qui génère la suite des entiers N compris entre 1 et 99 .
Dans ce cas , il faut une boucle ; à l'intérieur de la boucle , pour chaque valeur de N , le programme affiche soit le nombre N , soit "pox".Sois logique . Vu que tu commences dans ton programme à demander à l'utilisateur de choisir N , c'est que tu envisages d'utiliser la première version.
Comme je te l'ai encore dis ( et relis le à nouveau )
Citation
Je répète une fois encore : si tu veux que le programme génère successivement lui même tous les entiers compris entre 1 et 99 et donne une réponse pour chaque entier , le programme que je te propose n'est pas le bon.Je ne vais pas décider à ta place .
-
Comme je n'aurais pas trop de temps aujourd'hui , je te mets un algorithme tapé avec Algobox adapté à tes notations et le plus simple possible , dans la cas où tu te déciderais pour la seconde version !
Bien sûr , ces algorithmes pourraient être améliorés pour la "convivialité du programme " ; ils ne représentent que "l'indispensable" pour que la logique du programme fonctionne.
-
CCroony75 dernière édition par
Super merci beaucoup ! Je vais d'ailleurs le tester sur algobox pour voir ce que ça donne !
-
CCroony75 dernière édition par
La deuxième version est meilleure je pense !
-
CCroony75 dernière édition par
Variable (n;entier)
Pour (n;1,99)
Debut de Pour
Si ((ou(reste(n,7)=0, reste(n,10)=7 ou quot(n,10)=7)) alors
Debut de Si
Afficher ("pox")
Fin de Si
Sinon
Début de Sinon
Afficher (n)
Fin de Sinon
Fin de Pour
Fin de l'algorithme.Voilà :), faut-il utiliser des virgules, des points virgules ou bien ça n'a pas d'importance ?
-
Oui ! c'est bon !
La seconde version est nettement plus conforme à l'énoncé que tu proposes .
Pour les virgules ou points virgules , j'aurais tendance à mettre des virgules mais je l'ignore car je n'utilise jamais le langage dit "naturel" . Regarde ton cours .
Bon algorithme.
-
CCroony75 dernière édition par
Merci ! Il n'y a pas de cours enfait :/. Je demanderai à mon professeur à la rentrée !