Activité SNT

Bonjour,
je ne comprends pas la réponse à la première question de cet exercice. D'après le corrigé, le message affiché est "onjour tout le mondeZ" et il faut permuter les deux dernières lignes de l'algorithme pour qu'il fonctionne.

Pourriez-vous m'expliquer ?108678

Réponses

  • Sur l'ordinateur 2, lorsqu'on arrive sur la seconde boucle le caractère "B" à déjà été lu (donc il est dans le buffer). Mais la boucle commence par lire un caractère et l'affiche (du coup il "oublie" le B qu'il avait déjà lu et affiche bon 'o').
    Pour que cela fonctionne comme prévu, il faut commencer par afficher le caractère lu précédemment ('B') et ensuite seulement lire le caractère suivant.

    Mais bon, dans tout les cas il est bien pourri cet algo :)
  • Pour moi, le "caractère lu" est le même à la ligne 2 et au premier passage à la ligne 4 : c'est "A" puisque le test de la ligne 2 est faux et donc la ligne 3 n'est pas exécutée.
    Par conséquent, au premier passage dans la deuxième boucle on affiche bel et bien "B".

    Le deuxième ordinateur affiche donc "Bonjour tout le mondeZ".

    D'après moi, c'est le corrigé qui est faux... Mais d'autres ont peut-être un autre avis.
  • bisam écrivait :
    > D'après moi, c'est le corrigé qui est faux... Mais d'autres ont peut-être un autre avis.

    C'est vrai, j'ai regardé un peu trop rapidement.
    Il affiche même "Bonjour le monde" si on inverse les deux dernières lignes.
  • Ah bah non...
    Si on inverse les deux dernières lignes, l'ordinateur 2 affiche : "ABonjour tout le monde"

    En ajoutant des noms de variable et en écrivant le code en Python (par exemple) cela donne :
    carac = serial.read(1)
    while carac != "A":
        carac = serial.read(1)
    while carac != "Z":
        carac = serial.read(1)
        print(carac)
    
    On voit que la variable 'carac' est affectée à la ligne 1 puis n'est modifiée qu'à la ligne 5.
    Si on inverse les lignes 5 et 6, on affiche d'abord la valeur de 'carac' (à savoir "A" au premier passage) avant de modifier 'carac' à la ligne 6.
  • bisam
    Tout à fait !

    [Inutile de reproduire le message précédent. AD]
  • Bonjour

    Je suis d'accord avec Raskolnikov et bisam. Le corrigé est faux. Le problème vient de l'utilisation d'un passé composé qui désigne une action passée non reproduite alors que le correcteur doit imaginer que "lu"="lire". Est-ce une mauvaise traduction de l'anglais ("read" impératif et "read" passé composé) ?
    Ce site est fatigant. Les gens modifient sans cesse leurs messages passés, et on ne comprend plus rien à la discussion. Je suis nostalgique du temps où, si on postait une bêtise, on devait l'assumer. Et si on cite le passage pour l'ancrer, l'administrateur supprime en disant qu'on n'a pas besoin de recopier le message passé.
Connectez-vous ou Inscrivez-vous pour répondre.