Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Exercices d'algo


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Exercices d'algo
    Bonjour, je suis actuellement en formation informatique à l'afpa (depuis 2 semaines) et j'ai du mal à comprendre la partie algo sur javascript...

    Je bloque sur deux exercices, j'ai beau lire et relire le cours, je ne trouve pas de solution. Serait-il possible, svp, de m'aider en m'expliquant la démarche mise en place pour la résolution des exos?

    Exo n°1 : Écrire un programme qui saisit 2 nombres n1 et n2 et qui calcul ensuite la somme des entiers de n1 à n2.

    Exo n°2 : Écrire un programme qui saisit des entiers et en affiche la somme et la moyenne (on arrête la saisie avec la valeur 0).

    Voilà voilà, merci beaucoup pour le temps que vous m'accordez! Bonne journée!

  2. #2
    Expert éminent sénior
    Bonjour

    Écrire
    Donc ça, manifestement, tu sais faire.

    un programme
    Comme tu parles de javascript, tu sais ce qu'est un programme et tu as le langage dans lequel l'écrire.

    qui saisit 2 nombres n1 et n2
    Qu'est-ce qu'une fonction en javascript ?

    calcule ensuite la somme des entiers de n1 à n2.
    Ta fonction doit renvoyer la somme de n1 et n2.

    Nous ne ferons pas ton boulot à ta place.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Candidat au Club
    Bonjour
    Ok ça marche, je vais faire fumer la machine dans ce cas ^^

    Juste une petite question : vous parlez de fonction, seulement nous ne les avons pas encore vu. Nous sommes actuellement sur le chapitre des boucles.
    Ce chapitre seul me suffira pour ces exercices?

    Merci, bonne journée !

  4. #4
    Expert éminent sénior
    Au temps pour moi. Tu n'as pas besoin de fonction. Tu as besoin de la commande prompt() voire window.prompt() pour demander une saisie.

    Mais ta question n'a rien à voir avec les algorithmes. Il faudrait demander au sous-forum javascript.
    Et, non, tu n'as pas besoin de boucle.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre expérimenté
    la somme des entiers de n1 à n2.
    Ta fonction doit renvoyer la somme de n1 et n2.
    Pour résoudre un problème, il faut commencer par bien lire les énoncés ...
    Et puis il faut une boucle.
    Je ne connais pas javascript, mais il y a surement une boucle FOR ...
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  6. #6
    Candidat au Club
    Pour le premier exo, voici mon programme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Var a = Number;
    Var b = Number;
    Var somme = 0;
    Var i = 0;
     
    For (i = b; i <= a; i++) 
    {
        (Somme = Somme + i);
    }


    Il y a beaucoup d'erreurs?
    Merci à vous!

  7. #7
    Membre expérimenté
    Ca marche si a>b, pas dans le cas contraire.
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  8. #8
    Membre éprouvé
    Il y a bien une boucle à l'exercice 2, mais surtout pas une "for" car on ne connait pas le nombre de tour : le travail s’arrête à la saisie de zéro. Je dirai plutôt, au choix : tant que c'est différent de 0 bosser _ou_ bosser jusqu'à ce que ce soit 0. Tu vois avec les mots du js que tu connais.
    poke 1024,0; poke 214,214

  9. #9
    Candidat au Club
    Ok, du coup j'ai essayé avec une boucle tantque mais ça ne fonctionne pas :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Var a;
    Var somme=0;
    Var moyenne;
    Var i=1;
     
    While (a != 0)
    {
    a=(prompt("Notes?"))
            If (a>0)
            {
                        a + somme;
             }
             i ++
    }
     
    If (a == 0)
    {
    Moyenne = somme/i ;
    }
     
    Alert ("La moyenne des notes est : " + Moyenne);



    Avez vous une idée des fautes?

    Merci beaucoup!

  10. #10
    Membre expérimenté
    Quand le prog arrive la première fois à While (a != 0), a n'a encore reçu aucune valeur.
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  11. #11
    Candidat au Club
    J'ai essayé (a = prompt("Note?")); (a !=0) juste après while mais ça ne fonctionne pas

  12. #12
    Expert confirmé
    salut

    peut etre utiliser un repete jusqu'a ... cela te fait passer forcement une fois dans la boucle

    Repete
    ... Je bosse

    Jusqu'a a <> 0
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Membre averti
    Déjà : tu testes la valeur de a, mais quand on teste une valeur, il faut être certain que la donnée ait une valeur.
    Donc : ou as-tu initialisé ta variable ? réponse : nulle part, donc tu n'a aucune idée de ce qu'il y a (ne jamais supposer que l'ordinateur fait des choses par défaut, et surtout pas celles qui t'arrangent dans ta tête).

    On va aller plus loin : y aurait-il une valeur utile pour initialiser ? Faut-il utiliser une autre variable pour tester si la boucle doit être effectuée ? Par exemple un booléen , ou un entier ? Là, c'est un peu ton organisation.

    Bienvenue dans le monde de la programmation _et_ de la réflexion. Il y a des points qui deviendront des automatismes. Pour l'instant : papier + crayon, et tu déroules ton algorithme (ou ton programme) à la main, et surtout sans auncun a priori sur ce qu'il se passe, uniquement sur les ordres qui ont été donnés.

    Édit : grillé, j'avais lu trop vite. Les bonnes remarques ont été faites.

  14. #14
    Invité
    Invité(e)
    Deux organigrammes LCP
    Qui dit algorithme, dit organigramme (ou algorigramme), c’est-à-dire un outil visuel pour décrire un algorithme. Je n’en vois guère sur ce forum pourtant dédié à l’algorithmique, je ne vois en fait que du codage. L’algorithme devrait être indépendant du langage. Non ? Ce serait plus pédagogique. Ces deux petits exercices sont intéressants pour des débutants.

    Il se trouve que ce forum est le seul de tout le site qui ne reconnaisse pas les caractères semi-graphiques entre les balises [CODE]. Je vous propose donc les organigrammes version LCP avec des caractères de substitution comme au bon vieux temps des imprimantes impact. Traduire les organigrammes en JavaScript, c’est une autre histoire.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
     
    Exo n° 1 : Écrire un programme qui saisit 2 nombres n1 et n2 et qui calcule ensuite la somme des entiers de n1 à n2.
     
    Simulation :
     
     Saisie             total
     
       7  ->          =   7
       8  -> 7+8      =  15
       9  -> 7+8+9    =  24
      10  -> 7+8+9+10 =  34
     
    Somme = 34
     
                         .---------------------.
                         |      n1  = ?        |          n1 =  7
                  D_PROG |      n2  = ?        |          n2 = 10
                         |      n2 :: n1       |
                n2<=n1   .----------+----------.  n2>n1
               .-------------------<?>-------------------.
               |                              .----------+----------.
               |                     D_SAISIE |  somme  = 0         |
               |                              .----------+----------.
               |                                         <-------------------.  n1    =7   n1    =8    n1    =9    n1   =10
               |                              .----------+----------.        |
    .----------+----------.                   |    somme = somme+n1 |        |  somme =7   somme =15   somme =24   somme=34
    |       MESSAGE       |          T_SAISIE |       n1 = n1 + 1   |        |  n1    =8   n1    =9    n1    =10   n1   =11
    .----------+----------.                   |      n1 :: n2       |        |
               |                              .----------+----------. n1<=n2 |  8    <10   9    <10    10   =10    11   >10
               |                                        <?>------------------.
               |                              .----------+----------.
               |                     F_SAISIE |    SOMME = somme    |
               |                              .----------+----------.
               .--------------------+--------------------.
                         .----------+----------.
                  F_PROG |          Ø          |
                         .---------------------.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
     
    Exo n° 2 : Écrire un programme qui saisit des entiers et en affiche la somme et la moyenne 
               (on arrête la saisie avec la valeur 0). 
     
     
    Simulation :
     
    saisie   entier           somme
     
     1    ->   7   ->    7  =   7
     2    ->   8   ->  7+8  =  15
     3    ->   9   -> 15+9  =  24
     4    ->  10   -> 24+10 =  34
     5    ->   0
     
    SOMME   = 34
    MOYENNE = 34/4 = 8,5
     
     
     
                         .---------------------.
                  D_PROG |  entier  = ?        |   entier = 7
                         |  entier :: 0        |
              entier = 0 .----------+----------.   entier > 0
               .-------------------<?>-------------------.
               |                              .----------+----------.
               |                     D_SAISIE | saisie = 0          |
               |                              | somme  = 0          |
               |                              .----------+----------.
               |                                         <-------------------.
    .----------+----------.                   .----------+----------.        |   
    |       MESSAGE       |                   |saisie = saisie + 1  |        |  saisie=1   saisie=2    saisie=3    saisie=4
    .----------+----------.          T_SAISIE |somme  = somme+entier|        |  somme =7   somme =15   somme =24   somme =34
               |                              |entier = ?           |        |
               |                              |entier :: 0          |        |
               |                              .----------+----------.  <> 0  |  entier=8   entier=9    entier=10   entier=0
               |                                        <?>------------------.
               |                              .----------+----------.
               |                     F_SAISIE |SOMME  =somme        |   SOMME   = 34
               |                              |MOYENNE=somme/saisie |   MOYENNE = 34/4 = 8,5
               |                              .----------+----------.
               .--------------------+--------------------.
                         .----------+----------.
                  F_PROG |          Ø          |
                         .---------------------.

    Réaliser un organigramme avec des caractères semi-graphiques n'est déjà pas évident mais avec des caractères de substitution, c'est vraiment galère. Je ne ferai pas ça tous les jours. D'autant qu'en dehors des balises [CODE] l'éditeur supprime anormalement des espaces et ajoute des balises [COLOR=black]. Il a un comportement bizarre cet éditeur.

  15. #15
    Membre éclairé
    Algorithme & exercice n°1
    Bonjour,

    Pour faire la somme de n1 à n2, si n2 > n1 >= 0, il y a la formule classique (n2+n1)(n2-n1+1)/2. Souvent utilisée avec n1 = 0 ou 1 elle devient n2(n2+1)/2. Cela évite la boucle. La démonstration est simple, il suffit de sommer 2 fois la liste en inversant l'ordre :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         n1  +  n1+1 +  n1+2 ... ... n2 = n1 + (n2-n1)
    +    n2  +  n2-1 +  n2-2 ... ... n1
    ----------------------------------------
    = (n1+n2)+(n1+n2)+(n1+n2)... ...(n1+n2)
    = (n1+n2)*(n2-n1+1)

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

###raw>template_hook.ano_emploi###