PRREL

Correction DS 2014-2015

Exercice 1

1. A quoi sert l'instruction lire dans un algorithme ?

L'instruction lire sert à demander une valeur à l'utilisateur lors de l'exécution.

2. Citez trois types de données parmi ceux déjà utilisés ce semestre ?

3. Peut-on toujours transformer une boucle jusqu'à en boucle pour équivalente ? (justifier)

Non, une boucle jusqu'à ne peut pas toujours être transformée en boucle pour équivalente car la boucle pour permet uniquement d'itérer entre deux nombres alors que le jusqu'à prend en paramètre une condition quelconque, le nombre d'itérations n'est pas forcément connu à l'avance.

4. Donner le type et la valeur des expressions suivantes

Exercice 2

programme mystère
  var c, d, n : entier
début
  écrire("Entrer un entier entre 1 et 25 : ");
  lire(c);

  écrire("Début de la saisie :")
  lire(n);

  tant que (n >= 0) faire
  début
    d <- n - c;

    si (d < 0) alors
      d <- 26 + d;
    fin

    écrire(d);
    lire(n);
  fin
fin

1. Construire l'arbre programmatique du programme mystère.

2. Transformer l'algorithme mystère en remplaçant la boucle tant que par une boucle pour.

Il n'est pas possible de transformer cet algorithme via une boucle pour car les valeurs de n sont entrées au clavier, on ne peut donc pas déterminer le nombre d'itérations qui seront faites (c.f exercice 1, question 3).

3. Transformer l'algorithme mystère en remplaçant la boucle tant que par une jusqu'à.

programme mystère
  var c, d, n : entier
début
  écrire("Entrer un entier entre 1 et 25 : ");
  lire(c);

  écrire("Début de la saisie : ");
  lire(n)

  répéter
    d <- n - c;

    si (d < 0) alors
      d <- 26 + d;
    fin

    écrire(d);
    lire(n);

  jusqu'à ce que (n < 0)
fin

4. Dérouler l'algorithme avec c = 13 et le séquence de valeurs suivantes : 18 21 0 17 10 1 -1. Notez bien les valeurs successives de la variable d.

Avec n = 18, d = 5 Avec n = 21, d = 8 Avec n = 0, d = -13 puis d = -13 Avec n = 17, d = 4 Avec n = 10, d = -3 puis d = 23 Avec n = 1, d = -12 puis d = 14 Avec n = -1 : on stoppe la boucle

5. En associant chaque valeur de la variable d de la question 4 à la lettre de l'alphabet qui correspond (on utilisera la convention A <-> 0, B <-> 1, ..., Z <-> 25), quel est le message qui se cache derrière cette suite de valeurs ?

D'après l'énoncé de la question, la réponse est :

F I N E X O

6. La valeur de la variable c est importante pour obtenir le bon résultat. Que proposez vous d'ajouter avant la boucle pour s'assurer du bon fonctionnement de l'algorithme ? Écrire un algorithme intégrant cette modification.

Pour s'assurer du bon fonctionnement de l'algorithme on pourrait intégrer une boucle jusqu'à qui s'assurerait que c est compris entre 1 et 25.

programme mystère
  var c, d, n : entier
début
  répeter
    écrire("Entrer un entier entre 1 et 25 : ");
    lire(c);
  jusqu'à ce que (n >= 1 et n <= 25)

  écrire("Début de la saisie : ");
  lire(n)

  faire
    d <- n - c;

    si (d < 0) alors
      d <- 26 + d;
    fin

    écrire(d);
    lire(n);

  jusqu'à ce que (n < 0)
fin

Exercice 3

1. Écrire un algorithme qui détermine et affiche le minimum entre deux entiers, les valeurs de ces derniers, les valeurs de ces derniers étant lues au clavier.

programme plusPetit
 var a, b : entier
début
  écrire("Entrer a : ");
  lire(a);

  écrire("Entrer b : ");
  lire(b);

  si (a > b) alors
    écrire(b);
  sinon
    écrire(a);
  fin
fin

2. Même question qu'en 1 mais sans utiliser de sinon et avec un seul si.

programme plusPetit2
 var a, b, m : entier
début
  écrire("Entrer a : ");
  lire(a);

  écrire("Entrer b : ");
  lire(b);

  m <- b

  si (a < b) alors
    m <- a;
  fin

  écrire(m);
fin

3. Écrire un algorithme qui détermine et affiche le minimum dans une suite de n valeurs lues au clavier, une à une (n est également lu au clavier au début de l'algorithme).

programme plusPetitSuite
  var n, i, a, m : Entier
début
  écrire("Nombre de valeurs à entrer : ");
  lire(n);

  pour i de 1 à n faire
    lire(a);

    si (i = 1 ou a < m) alors
      m <- a
    fin si
  fin

  ecrire(m);
fin

4. Transformer l'algorithme de la question 3 en changeant la boucle utilisée.

programme plusPetitSuite2
  var n, i, a, m : Entier
début
  écrire("Nombre de valeurs à entrer : ");
  lire(n);

  i = 1

  tant que (i <= n) faire
    lire(a);

    si (i = 1 ou a < m) alors
      m <- a
    fin si

    // Super important pour éviter une boucle infinie
    i <- i + 1
  fin

  ecrire(m);
fin