Défi final

On veut écrire un algorithme qui indique si on pourra sortir en vélo demain selon la météo du jour (niveau du soleil S, température T et niveau de pluie P) et si la personne est déjà sortie aujourd'hui. Les niveaux sont entre 0 et 100.

L'algorithme est en deux parties. D'abord il décide s'il fera beau demain puis utilise cette information pour décider de la sortie ou non le lendemain.

Question

Par défaut, il ne fera pas beau demain. Voici les conditions (il faut juste que l'une d'entre elles soit vraie) pour qu'il fasse beau :

  • P > 70

  • S > 50 et P < 30

  • P < 70 et T > 20

  • S + P < 50

  • T > 30

En revanche, si la somme des niveaux de soleil et de pluie est supérieure à 150, il ne fera pas beau le lendemain même si l'une des conditions ci-dessus est vraie.

Enfin, s'il fait beau demain, l'algorithme affiche « Sortie demain ». S'il ne fait pas beau, l'algorithme affiche « Sortie demain » seulement si la personne n'est pas sortie aujourd'hui. Sinon, il affiche « Pas sortie demain ».

Écrire un algorithme permettant de décider si la personne doit sortir le lendemain.

Indice

L'algorithme doit préciser les entrées qu'il reçoit, ainsi que les conditions sur ces entrées. Par exemple, une entrée nommée n qui doit être supérieure à 0 sera notée :

1
Entrées:
2
    n, un entier supérieur à 0

Indice

L'algorithme devra tester chacune des conditions une par une. Vous pouvez utiliser la structure suivante pour évaluer les conditions :

1
Si <condition> alors:
2
    ...
3
FinSi

Indice

Il est utile d'utiliser une variable beauTempsDemain qui stocke l'information du temps du lendemain et qui est modifiée par la série de conditions, avec la syntaxe suivante :

1
Attribuer à beauTempsDemain la valeur Vrai

ou

1
Attribuer à beauTempsDemain la valeur Faux

Indice

Si la somme des niveaux de soleil et de pluie est supérieur à 150, il ne fera pas beau le lendemain quoi qu'il arrive. Cette condition est donc à tester en dernier.

Solution

1
Algo sortie_demain
2
3
Entrées:
4
    S, un entier entre 0 et 100
5
    T, un entier supérieur à -273
6
    P, un entier entre 0 et 100
7
    SortieAujourdhui, un booléen
8
9
Attribuer à beauTempsDemain la valeur Faux
10
11
Si P > 70 alors:
12
    Attribuer à beauTempsDemain la valeur Vrai
13
FinSi
14
Si S > 50 et T > 15 alors:
15
    Attribuer à beauTempsDemain la valeur Vrai
16
FinSi
17
Si P < 70 et T > 20 alors:
18
    Attribuer à beauTempsDemain la valeur Vrai
19
FinSi
20
Si S + P < 50 alors:
21
    Attribuer à beauTempsDemain la valeur Vrai
22
FinSi
23
Si T > 30 alors:
24
    Attribuer à beauTempsDemain la valeur Vrai
25
FinSi
26
Si S + P > 150 alors:
27
    Attribuer à beauTempsDemain la valeur Faux
28
FinSi
29
30
Si beauTempsDemain alors:
31
    Afficher "Sortie demain"
32
Sinon
33
    Si non sortieAujourdhui alors:
34
        Afficher "Sortie demain"
35
    Sinon:
36
        Afficher "Pas sortie demain"

Question

Voici le squelette de l'algorithme en JavaScript.

Compléter le code JavaScript de la première partie de l'algorithme.

1
const S = Number(prompt('Entrer le niveau de soleil actuel'))
2
const T = Number(prompt('Entrer la température actuelle'))
3
const P = Number(prompt('Entrer le niveau de pluie actuel'))
4
const sortieAujourdhui = prompt('Êtes-vous sorti aujourd\'hui? (O ou N)') === 'O'
5
6
// Première partie
7
let beauTempsDemain = false
8
9
if (P > 70) {
10
  beauTempsDemain = true
11
}
12
if (...) {
13
   ...
14
}
15
if (...) {
16
   ...
17
}
18
if (...) {
19
   ...
20
}
21
if (...) {
22
   ...
23
}
24
25
if (...) {
26
   ...
27
}
28
29
30
// Deuxième partie de l'algorithme
31
...

Indice

L'opérateur « et » en Javascript s'écrit &&.

Solution

1
let beauTempsDemain = false
2
3
if (P > 70) {
4
  beauTempsDemain = true
5
}
6
if (S > 50 && T > 15) {
7
  beauTempsDemain = true
8
}
9
if (P < 70 && T > 20) {
10
  beauTempsDemain = true
11
}
12
if (S + P  < 50) {
13
  beauTempsDemain = true
14
}
15
if (T > 30) {
16
  beauTempsDemain = true
17
}
18
19
if (S + P > 150) {
20
  beauTempsDemain = false
21
}

Question

Peut-on réduire la complexité en temps de cette première partie ?

Indice

Est-il nécessaire d'avoir un if pour chaque condition ?

Solution

On pourrait factoriser les conditions avec des « ou » (|| en JS) afin de n'avoir qu'un seul if.

Question

Traduire la seconde partie de l'algorithme.

Indice

1
if (...) {...} else {...}

Indice

Pour afficher un texte on peut utiliser l'instruction :

1
console.log("toto")

Solution

1
if (beauTempsDemain){
2
  console.log('Sortie demain')
3
} else {
4
  if (sortieAujourdhui) {
5
      console.log('Pas sortie demain')
6
  } else {
7
      console.log('Sortie demain')
8
  }
9
}

Question

Voici les conditions météorologiques d'aujourd'hui : S = 50, T = 17, P = 38. Sachant que je suis sorti aujourd'hui, est-ce que je devrais sortir demain ?

Solution

Pas de sortie demain.