Algorithme avec division euclidienne


  • C

    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à !


  • mtschoon

    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+1

    Pré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*


  • C

    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 🙂


  • C

    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 :/.


  • C

    Est ce que je reste dans la boucle pour l'affichage demandé ?


  • mtschoon

    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 .


  • C

    C'est affreux je n'y arrive vraiment pas, je vois même pas comment on pourrait utiliser la division euclidienne avec ce truc :(.


  • mtschoon

    Par exemple ,

    N multiple de 7 <=> le reste de la division euclidienne de N par 7 vaut 0


  • C

    Oui d'accord, mais je vois pas du tout comment le mettre en écriture algorithmique (je sais pas si ça se dit ^^).


  • mtschoon

    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 b

    Pour N multiple de 7 , tu écris donc :reste(N,7)=0


  • mtschoon

    Une autre remarque , en lisant ton énoncé .

    Je lis :
    Citation
    Ecrire un algorithme qui affiche les nombres entiers de 1 à 99

    En 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 !


  • C

    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") ^^.


  • mtschoon

    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


  • C

    Vu mon niveau médiocre en maths.. Je n'y arrive décidement pas..


  • mtschoon

    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


  • C

    reste(N,10) =7
    quot(N,10) =7


  • mtschoon

    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".


  • C

    merci !!!!


  • C

    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 ?


  • C

    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'algorithme

    Voilà peux-tu me corriger ? 🙂


  • mtschoon

    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)


  • C

    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'algorithme

    Pour 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 '-____-)


  • mtschoon

    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.

    fichier math

    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.


  • C

    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.


  • mtschoon

    non...


  • C

    La fin est fausse à partir de sinon ?


  • mtschoon

    Comprends tout simplement l'algorithme que je t'ai proposé et traduis le dans le langage "naturel" de ton professeur .


  • C

    Bein langage naturel, c'est ce que je viens d'écrire. mais je ne connais pas le vocabulaire donc bon..


  • mtschoon

    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.


  • C

    Merci beaucoup 🙂 !!


  • C

    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 ?


  • mtschoon

    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 .


  • mtschoon

    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 !

    fichier math

    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.


  • C

    Super merci beaucoup ! Je vais d'ailleurs le tester sur algobox pour voir ce que ça donne ! 🙂


  • C

    La deuxième version est meilleure je pense !


  • C

    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 ?


  • mtschoon

    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.


  • C

    Merci ! Il n'y a pas de cours enfait :/. Je demanderai à mon professeur à la rentrée !


Se connecter pour répondre